1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S -mtriple "i386-pc-linux" | FileCheck -check-prefix=DO-SIMPLIFY %s 2*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S -mtriple "i386-pc-win32" | FileCheck -check-prefix=DONT-SIMPLIFY %s 3*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S -mtriple "x86_64-pc-win32" | FileCheck -check-prefix=C89-SIMPLIFY %s 4*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S -mtriple "i386-pc-mingw32" | FileCheck -check-prefix=DO-SIMPLIFY %s 5*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S -mtriple "x86_64-pc-mingw32" | FileCheck -check-prefix=DO-SIMPLIFY %s 6*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S -mtriple "sparc-sun-solaris" | FileCheck -check-prefix=DO-SIMPLIFY %s 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; DO-SIMPLIFY: call float @floorf( 9*9880d681SAndroid Build Coastguard Worker; DO-SIMPLIFY: call float @ceilf( 10*9880d681SAndroid Build Coastguard Worker; DO-SIMPLIFY: call float @roundf( 11*9880d681SAndroid Build Coastguard Worker; DO-SIMPLIFY: call float @nearbyintf( 12*9880d681SAndroid Build Coastguard Worker; DO-SIMPLIFY: call float @truncf( 13*9880d681SAndroid Build Coastguard Worker; DO-SIMPLIFY: call float @fabsf( 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; C89-SIMPLIFY: call float @floorf( 16*9880d681SAndroid Build Coastguard Worker; C89-SIMPLIFY: call float @ceilf( 17*9880d681SAndroid Build Coastguard Worker; C89-SIMPLIFY: call double @round( 18*9880d681SAndroid Build Coastguard Worker; C89-SIMPLIFY: call double @nearbyint( 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; DONT-SIMPLIFY: call double @floor( 21*9880d681SAndroid Build Coastguard Worker; DONT-SIMPLIFY: call double @ceil( 22*9880d681SAndroid Build Coastguard Worker; DONT-SIMPLIFY: call double @round( 23*9880d681SAndroid Build Coastguard Worker; DONT-SIMPLIFY: call double @nearbyint( 24*9880d681SAndroid Build Coastguard Worker; DONT-SIMPLIFY: call double @trunc( 25*9880d681SAndroid Build Coastguard Worker; DONT-SIMPLIFY: call double @fabs( 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdeclare double @floor(double) 28*9880d681SAndroid Build Coastguard Workerdeclare double @ceil(double) 29*9880d681SAndroid Build Coastguard Workerdeclare double @round(double) 30*9880d681SAndroid Build Coastguard Workerdeclare double @nearbyint(double) 31*9880d681SAndroid Build Coastguard Workerdeclare double @trunc(double) 32*9880d681SAndroid Build Coastguard Workerdeclare double @fabs(double) 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine float @test_floor(float %C) { 35*9880d681SAndroid Build Coastguard Worker %D = fpext float %C to double 36*9880d681SAndroid Build Coastguard Worker ; --> floorf 37*9880d681SAndroid Build Coastguard Worker %E = call double @floor(double %D) 38*9880d681SAndroid Build Coastguard Worker %F = fptrunc double %E to float 39*9880d681SAndroid Build Coastguard Worker ret float %F 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdefine float @test_ceil(float %C) { 43*9880d681SAndroid Build Coastguard Worker %D = fpext float %C to double 44*9880d681SAndroid Build Coastguard Worker ; --> ceilf 45*9880d681SAndroid Build Coastguard Worker %E = call double @ceil(double %D) 46*9880d681SAndroid Build Coastguard Worker %F = fptrunc double %E to float 47*9880d681SAndroid Build Coastguard Worker ret float %F 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerdefine float @test_round(float %C) { 51*9880d681SAndroid Build Coastguard Worker %D = fpext float %C to double 52*9880d681SAndroid Build Coastguard Worker ; --> roundf 53*9880d681SAndroid Build Coastguard Worker %E = call double @round(double %D) 54*9880d681SAndroid Build Coastguard Worker %F = fptrunc double %E to float 55*9880d681SAndroid Build Coastguard Worker ret float %F 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdefine float @test_nearbyint(float %C) { 59*9880d681SAndroid Build Coastguard Worker %D = fpext float %C to double 60*9880d681SAndroid Build Coastguard Worker ; --> nearbyintf 61*9880d681SAndroid Build Coastguard Worker %E = call double @nearbyint(double %D) 62*9880d681SAndroid Build Coastguard Worker %F = fptrunc double %E to float 63*9880d681SAndroid Build Coastguard Worker ret float %F 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerdefine float @test_trunc(float %C) { 67*9880d681SAndroid Build Coastguard Worker %D = fpext float %C to double 68*9880d681SAndroid Build Coastguard Worker ; --> truncf 69*9880d681SAndroid Build Coastguard Worker %E = call double @trunc(double %D) 70*9880d681SAndroid Build Coastguard Worker %F = fptrunc double %E to float 71*9880d681SAndroid Build Coastguard Worker ret float %F 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefine float @test_fabs(float %C) { 75*9880d681SAndroid Build Coastguard Worker %D = fpext float %C to double 76*9880d681SAndroid Build Coastguard Worker ; --> fabsf 77*9880d681SAndroid Build Coastguard Worker %E = call double @fabs(double %D) 78*9880d681SAndroid Build Coastguard Worker %F = fptrunc double %E to float 79*9880d681SAndroid Build Coastguard Worker ret float %F 80*9880d681SAndroid Build Coastguard Worker} 81