1 ; RUN: opt < %s -constprop -S | FileCheck %s 2 ; RUN: opt < %s -constprop -disable-simplify-libcalls -S | FileCheck %s --check-prefix=FNOBUILTIN 3 4 declare double @acos(double) readnone nounwind 5 declare double @asin(double) readnone nounwind 6 declare double @atan(double) readnone nounwind 7 declare double @atan2(double, double) readnone nounwind 8 declare double @ceil(double) readnone nounwind 9 declare double @cos(double) readnone nounwind 10 declare double @cosh(double) readnone nounwind 11 declare double @exp(double) readnone nounwind 12 declare double @exp2(double) readnone nounwind 13 declare double @fabs(double) readnone nounwind 14 declare double @floor(double) readnone nounwind 15 declare double @fmod(double, double) readnone nounwind 16 declare double @log(double) readnone nounwind 17 declare double @log10(double) readnone nounwind 18 declare double @pow(double, double) readnone nounwind 19 declare double @round(double) readnone nounwind 20 declare double @sin(double) readnone nounwind 21 declare double @sinh(double) readnone nounwind 22 declare double @sqrt(double) readnone nounwind 23 declare double @tan(double) readnone nounwind 24 declare double @tanh(double) readnone nounwind 25 26 declare float @acosf(float) readnone nounwind 27 declare float @asinf(float) readnone nounwind 28 declare float @atanf(float) readnone nounwind 29 declare float @atan2f(float, float) readnone nounwind 30 declare float @ceilf(float) readnone nounwind 31 declare float @cosf(float) readnone nounwind 32 declare float @coshf(float) readnone nounwind 33 declare float @expf(float) readnone nounwind 34 declare float @exp2f(float) readnone nounwind 35 declare float @fabsf(float) readnone nounwind 36 declare float @floorf(float) readnone nounwind 37 declare float @fmodf(float, float) readnone nounwind 38 declare float @logf(float) readnone nounwind 39 declare float @log10f(float) readnone nounwind 40 declare float @powf(float, float) readnone nounwind 41 declare float @roundf(float) readnone nounwind 42 declare float @sinf(float) readnone nounwind 43 declare float @sinhf(float) readnone nounwind 44 declare float @sqrtf(float) readnone nounwind 45 declare float @tanf(float) readnone nounwind 46 declare float @tanhf(float) readnone nounwind 47 48 define double @T() { 49 ; CHECK-LABEL: @T( 50 ; FNOBUILTIN-LABEL: @T( 51 52 ; CHECK-NOT: call 53 ; CHECK: ret 54 %A = call double @cos(double 0.000000e+00) 55 %B = call double @sin(double 0.000000e+00) 56 %a = fadd double %A, %B 57 %C = call double @tan(double 0.000000e+00) 58 %b = fadd double %a, %C 59 %D = call double @sqrt(double 4.000000e+00) 60 %c = fadd double %b, %D 61 62 %slot = alloca double 63 %slotf = alloca float 64 ; FNOBUILTIN: call 65 %1 = call double @acos(double 1.000000e+00) 66 store double %1, double* %slot 67 ; FNOBUILTIN: call 68 %2 = call double @asin(double 1.000000e+00) 69 store double %2, double* %slot 70 ; FNOBUILTIN: call 71 %3 = call double @atan(double 3.000000e+00) 72 store double %3, double* %slot 73 ; FNOBUILTIN: call 74 %4 = call double @atan2(double 3.000000e+00, double 4.000000e+00) 75 store double %4, double* %slot 76 ; FNOBUILTIN: call 77 %5 = call double @ceil(double 3.000000e+00) 78 store double %5, double* %slot 79 ; FNOBUILTIN: call 80 %6 = call double @cosh(double 3.000000e+00) 81 store double %6, double* %slot 82 ; FNOBUILTIN: call 83 %7 = call double @exp(double 3.000000e+00) 84 store double %7, double* %slot 85 ; FNOBUILTIN: call 86 %8 = call double @exp2(double 3.000000e+00) 87 store double %8, double* %slot 88 ; FNOBUILTIN: call 89 %9 = call double @fabs(double 3.000000e+00) 90 store double %9, double* %slot 91 ; FNOBUILTIN: call 92 %10 = call double @floor(double 3.000000e+00) 93 store double %10, double* %slot 94 ; FNOBUILTIN: call 95 %11 = call double @fmod(double 3.000000e+00, double 4.000000e+00) 96 store double %11, double* %slot 97 ; FNOBUILTIN: call 98 %12 = call double @log(double 3.000000e+00) 99 store double %12, double* %slot 100 ; FNOBUILTIN: call 101 %13 = call double @log10(double 3.000000e+00) 102 store double %13, double* %slot 103 ; FNOBUILTIN: call 104 %14 = call double @pow(double 3.000000e+00, double 4.000000e+00) 105 store double %14, double* %slot 106 ; FNOBUILTIN: call 107 %round_val = call double @round(double 3.000000e+00) 108 store double %round_val, double* %slot 109 ; FNOBUILTIN: call 110 %15 = call double @sinh(double 3.000000e+00) 111 store double %15, double* %slot 112 ; FNOBUILTIN: call 113 %16 = call double @tanh(double 3.000000e+00) 114 store double %16, double* %slot 115 ; FNOBUILTIN: call 116 %17 = call float @acosf(float 1.000000e+00) 117 store float %17, float* %slotf 118 ; FNOBUILTIN: call 119 %18 = call float @asinf(float 1.000000e+00) 120 store float %18, float* %slotf 121 ; FNOBUILTIN: call 122 %19 = call float @atanf(float 3.000000e+00) 123 store float %19, float* %slotf 124 ; FNOBUILTIN: call 125 %20 = call float @atan2f(float 3.000000e+00, float 4.000000e+00) 126 store float %20, float* %slotf 127 ; FNOBUILTIN: call 128 %21 = call float @ceilf(float 3.000000e+00) 129 store float %21, float* %slotf 130 ; FNOBUILTIN: call 131 %22 = call float @cosf(float 3.000000e+00) 132 store float %22, float* %slotf 133 ; FNOBUILTIN: call 134 %23 = call float @coshf(float 3.000000e+00) 135 store float %23, float* %slotf 136 ; FNOBUILTIN: call 137 %24 = call float @expf(float 3.000000e+00) 138 store float %24, float* %slotf 139 ; FNOBUILTIN: call 140 %25 = call float @exp2f(float 3.000000e+00) 141 store float %25, float* %slotf 142 ; FNOBUILTIN: call 143 %26 = call float @fabsf(float 3.000000e+00) 144 store float %26, float* %slotf 145 ; FNOBUILTIN: call 146 %27 = call float @floorf(float 3.000000e+00) 147 store float %27, float* %slotf 148 ; FNOBUILTIN: call 149 %28 = call float @fmodf(float 3.000000e+00, float 4.000000e+00) 150 store float %28, float* %slotf 151 ; FNOBUILTIN: call 152 %29 = call float @logf(float 3.000000e+00) 153 store float %29, float* %slotf 154 ; FNOBUILTIN: call 155 %30 = call float @log10f(float 3.000000e+00) 156 store float %30, float* %slotf 157 ; FNOBUILTIN: call 158 %31 = call float @powf(float 3.000000e+00, float 4.000000e+00) 159 store float %31, float* %slotf 160 ; FNOBUILTIN: call 161 %roundf_val = call float @roundf(float 3.000000e+00) 162 store float %roundf_val, float* %slotf 163 ; FNOBUILTIN: call 164 %32 = call float @sinf(float 3.000000e+00) 165 store float %32, float* %slotf 166 ; FNOBUILTIN: call 167 %33 = call float @sinhf(float 3.000000e+00) 168 store float %33, float* %slotf 169 ; FNOBUILTIN: call 170 %34 = call float @sqrtf(float 3.000000e+00) 171 store float %34, float* %slotf 172 ; FNOBUILTIN: call 173 %35 = call float @tanf(float 3.000000e+00) 174 store float %35, float* %slotf 175 ; FNOBUILTIN: call 176 %36 = call float @tanhf(float 3.000000e+00) 177 store float %36, float* %slotf 178 179 ; FNOBUILTIN: ret 180 181 ; PR9315 182 %E = call double @exp2(double 4.0) 183 %d = fadd double %c, %E 184 ret double %d 185 } 186 187 define double @test_intrinsic_pow() nounwind uwtable ssp { 188 entry: 189 ; CHECK-LABEL: @test_intrinsic_pow( 190 ; CHECK-NOT: call 191 ; CHECK: ret 192 %0 = call double @llvm.pow.f64(double 1.500000e+00, double 3.000000e+00) 193 ret double %0 194 } 195 196 declare double @llvm.pow.f64(double, double) nounwind readonly 197