1 ; RUN: opt < %s -instcombine -enable-double-float-shrink -S | FileCheck %s 2 3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" 4 target triple = "x86_64-unknown-linux-gnu" 5 6 define float @acos_test(float %f) nounwind readnone { 7 ; CHECK: acos_test 8 %conv = fpext float %f to double 9 %call = call double @acos(double %conv) 10 %conv1 = fptrunc double %call to float 11 ret float %conv1 12 ; CHECK: call float @acosf(float %f) 13 } 14 15 define double @acos_test2(float %f) nounwind readnone { 16 ; CHECK: acos_test2 17 %conv = fpext float %f to double 18 %call = call double @acos(double %conv) 19 ret double %call 20 ; CHECK: call double @acos(double %conv) 21 } 22 23 define float @acosh_test(float %f) nounwind readnone { 24 ; CHECK: acosh_test 25 %conv = fpext float %f to double 26 %call = call double @acosh(double %conv) 27 %conv1 = fptrunc double %call to float 28 ret float %conv1 29 ; CHECK: call float @acoshf(float %f) 30 } 31 32 define double @acosh_test2(float %f) nounwind readnone { 33 ; CHECK: acosh_test2 34 %conv = fpext float %f to double 35 %call = call double @acosh(double %conv) 36 ret double %call 37 ; CHECK: call double @acosh(double %conv) 38 } 39 40 define float @asin_test(float %f) nounwind readnone { 41 ; CHECK: asin_test 42 %conv = fpext float %f to double 43 %call = call double @asin(double %conv) 44 %conv1 = fptrunc double %call to float 45 ret float %conv1 46 ; CHECK: call float @asinf(float %f) 47 } 48 49 define double @asin_test2(float %f) nounwind readnone { 50 ; CHECK: asin_test2 51 %conv = fpext float %f to double 52 %call = call double @asin(double %conv) 53 ret double %call 54 ; CHECK: call double @asin(double %conv) 55 } 56 57 define float @asinh_test(float %f) nounwind readnone { 58 ; CHECK: asinh_test 59 %conv = fpext float %f to double 60 %call = call double @asinh(double %conv) 61 %conv1 = fptrunc double %call to float 62 ret float %conv1 63 ; CHECK: call float @asinhf(float %f) 64 } 65 66 define double @asinh_test2(float %f) nounwind readnone { 67 ; CHECK: asinh_test2 68 %conv = fpext float %f to double 69 %call = call double @asinh(double %conv) 70 ret double %call 71 ; CHECK: call double @asinh(double %conv) 72 } 73 74 define float @atan_test(float %f) nounwind readnone { 75 ; CHECK: atan_test 76 %conv = fpext float %f to double 77 %call = call double @atan(double %conv) 78 %conv1 = fptrunc double %call to float 79 ret float %conv1 80 ; CHECK: call float @atanf(float %f) 81 } 82 83 define double @atan_test2(float %f) nounwind readnone { 84 ; CHECK: atan_test2 85 %conv = fpext float %f to double 86 %call = call double @atan(double %conv) 87 ret double %call 88 ; CHECK: call double @atan(double %conv) 89 } 90 define float @atanh_test(float %f) nounwind readnone { 91 ; CHECK: atanh_test 92 %conv = fpext float %f to double 93 %call = call double @atanh(double %conv) 94 %conv1 = fptrunc double %call to float 95 ret float %conv1 96 ; CHECK: call float @atanhf(float %f) 97 } 98 99 define double @atanh_test2(float %f) nounwind readnone { 100 ; CHECK: atanh_test2 101 %conv = fpext float %f to double 102 %call = call double @atanh(double %conv) 103 ret double %call 104 ; CHECK: call double @atanh(double %conv) 105 } 106 define float @cbrt_test(float %f) nounwind readnone { 107 ; CHECK: cbrt_test 108 %conv = fpext float %f to double 109 %call = call double @cbrt(double %conv) 110 %conv1 = fptrunc double %call to float 111 ret float %conv1 112 ; CHECK: call float @cbrtf(float %f) 113 } 114 115 define double @cbrt_test2(float %f) nounwind readnone { 116 ; CHECK: cbrt_test2 117 %conv = fpext float %f to double 118 %call = call double @cbrt(double %conv) 119 ret double %call 120 ; CHECK: call double @cbrt(double %conv) 121 } 122 define float @exp_test(float %f) nounwind readnone { 123 ; CHECK: exp_test 124 %conv = fpext float %f to double 125 %call = call double @exp(double %conv) 126 %conv1 = fptrunc double %call to float 127 ret float %conv1 128 ; CHECK: call float @expf(float %f) 129 } 130 131 define double @exp_test2(float %f) nounwind readnone { 132 ; CHECK: exp_test2 133 %conv = fpext float %f to double 134 %call = call double @exp(double %conv) 135 ret double %call 136 ; CHECK: call double @exp(double %conv) 137 } 138 define float @expm1_test(float %f) nounwind readnone { 139 ; CHECK: expm1_test 140 %conv = fpext float %f to double 141 %call = call double @expm1(double %conv) 142 %conv1 = fptrunc double %call to float 143 ret float %conv1 144 ; CHECK: call float @expm1f(float %f) 145 } 146 147 define double @expm1_test2(float %f) nounwind readnone { 148 ; CHECK: expm1_test2 149 %conv = fpext float %f to double 150 %call = call double @expm1(double %conv) 151 ret double %call 152 ; CHECK: call double @expm1(double %conv) 153 } 154 define float @exp10_test(float %f) nounwind readnone { 155 ; CHECK: exp10_test 156 %conv = fpext float %f to double 157 %call = call double @exp10(double %conv) 158 %conv1 = fptrunc double %call to float 159 ret float %conv1 160 ; CHECK: call float @exp10f(float %f) 161 } 162 163 define double @exp10_test2(float %f) nounwind readnone { 164 ; CHECK: exp10_test2 165 %conv = fpext float %f to double 166 %call = call double @exp10(double %conv) 167 ret double %call 168 ; CHECK: call double @exp10(double %conv) 169 } 170 define float @log_test(float %f) nounwind readnone { 171 ; CHECK: log_test 172 %conv = fpext float %f to double 173 %call = call double @log(double %conv) 174 %conv1 = fptrunc double %call to float 175 ret float %conv1 176 ; CHECK: call float @logf(float %f) 177 } 178 179 define double @log_test2(float %f) nounwind readnone { 180 ; CHECK: log_test2 181 %conv = fpext float %f to double 182 %call = call double @log(double %conv) 183 ret double %call 184 ; CHECK: call double @log(double %conv) 185 } 186 define float @log10_test(float %f) nounwind readnone { 187 ; CHECK: log10_test 188 %conv = fpext float %f to double 189 %call = call double @log10(double %conv) 190 %conv1 = fptrunc double %call to float 191 ret float %conv1 192 ; CHECK: call float @log10f(float %f) 193 } 194 195 define double @log10_test2(float %f) nounwind readnone { 196 ; CHECK: log10_test2 197 %conv = fpext float %f to double 198 %call = call double @log10(double %conv) 199 ret double %call 200 ; CHECK: call double @log10(double %conv) 201 } 202 define float @log1p_test(float %f) nounwind readnone { 203 ; CHECK: log1p_test 204 %conv = fpext float %f to double 205 %call = call double @log1p(double %conv) 206 %conv1 = fptrunc double %call to float 207 ret float %conv1 208 ; CHECK: call float @log1pf(float %f) 209 } 210 211 define double @log1p_test2(float %f) nounwind readnone { 212 ; CHECK: log1p_test2 213 %conv = fpext float %f to double 214 %call = call double @log1p(double %conv) 215 ret double %call 216 ; CHECK: call double @log1p(double %conv) 217 } 218 define float @log2_test(float %f) nounwind readnone { 219 ; CHECK: log2_test 220 %conv = fpext float %f to double 221 %call = call double @log2(double %conv) 222 %conv1 = fptrunc double %call to float 223 ret float %conv1 224 ; CHECK: call float @log2f(float %f) 225 } 226 227 define double @log2_test2(float %f) nounwind readnone { 228 ; CHECK: log2_test2 229 %conv = fpext float %f to double 230 %call = call double @log2(double %conv) 231 ret double %call 232 ; CHECK: call double @log2(double %conv) 233 } 234 define float @logb_test(float %f) nounwind readnone { 235 ; CHECK: logb_test 236 %conv = fpext float %f to double 237 %call = call double @logb(double %conv) 238 %conv1 = fptrunc double %call to float 239 ret float %conv1 240 ; CHECK: call float @logbf(float %f) 241 } 242 243 define double @logb_test2(float %f) nounwind readnone { 244 ; CHECK: logb_test2 245 %conv = fpext float %f to double 246 %call = call double @logb(double %conv) 247 ret double %call 248 ; CHECK: call double @logb(double %conv) 249 } 250 define float @sin_test(float %f) nounwind readnone { 251 ; CHECK: sin_test 252 %conv = fpext float %f to double 253 %call = call double @sin(double %conv) 254 %conv1 = fptrunc double %call to float 255 ret float %conv1 256 ; CHECK: call float @sinf(float %f) 257 } 258 259 define double @sin_test2(float %f) nounwind readnone { 260 ; CHECK: sin_test2 261 %conv = fpext float %f to double 262 %call = call double @sin(double %conv) 263 ret double %call 264 ; CHECK: call double @sin(double %conv) 265 } 266 define float @sqrt_test(float %f) nounwind readnone { 267 ; CHECK: sqrt_test 268 %conv = fpext float %f to double 269 %call = call double @sqrt(double %conv) 270 %conv1 = fptrunc double %call to float 271 ret float %conv1 272 ; CHECK: call float @sqrtf(float %f) 273 } 274 275 define double @sqrt_test2(float %f) nounwind readnone { 276 ; CHECK: sqrt_test2 277 %conv = fpext float %f to double 278 %call = call double @sqrt(double %conv) 279 ret double %call 280 ; CHECK: call double @sqrt(double %conv) 281 } 282 define float @tan_test(float %f) nounwind readnone { 283 ; CHECK: tan_test 284 %conv = fpext float %f to double 285 %call = call double @tan(double %conv) 286 %conv1 = fptrunc double %call to float 287 ret float %conv1 288 ; CHECK: call float @tanf(float %f) 289 } 290 291 define double @tan_test2(float %f) nounwind readnone { 292 ; CHECK: tan_test2 293 %conv = fpext float %f to double 294 %call = call double @tan(double %conv) 295 ret double %call 296 ; CHECK: call double @tan(double %conv) 297 } 298 define float @tanh_test(float %f) nounwind readnone { 299 ; CHECK: tanh_test 300 %conv = fpext float %f to double 301 %call = call double @tanh(double %conv) 302 %conv1 = fptrunc double %call to float 303 ret float %conv1 304 ; CHECK: call float @tanhf(float %f) 305 } 306 307 define double @tanh_test2(float %f) nounwind readnone { 308 ; CHECK: tanh_test2 309 %conv = fpext float %f to double 310 %call = call double @tanh(double %conv) 311 ret double %call 312 ; CHECK: call double @tanh(double %conv) 313 } 314 315 declare double @tanh(double) nounwind readnone 316 declare double @tan(double) nounwind readnone 317 declare double @sqrt(double) nounwind readnone 318 declare double @sin(double) nounwind readnone 319 declare double @log2(double) nounwind readnone 320 declare double @log1p(double) nounwind readnone 321 declare double @log10(double) nounwind readnone 322 declare double @log(double) nounwind readnone 323 declare double @logb(double) nounwind readnone 324 declare double @exp10(double) nounwind readnone 325 declare double @expm1(double) nounwind readnone 326 declare double @exp(double) nounwind readnone 327 declare double @cbrt(double) nounwind readnone 328 declare double @atanh(double) nounwind readnone 329 declare double @atan(double) nounwind readnone 330 declare double @acos(double) nounwind readnone 331 declare double @acosh(double) nounwind readnone 332 declare double @asin(double) nounwind readnone 333 declare double @asinh(double) nounwind readnone 334