1; RUN: opt < %s -instcombine -enable-double-float-shrink -S | FileCheck %s 2 3target 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" 4target triple = "x86_64-unknown-linux-gnu" 5 6define 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 15define 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 23define 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 32define 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 40define 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 49define 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 57define 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 66define 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 74define 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 83define 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} 90define 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 99define 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} 106define 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 115define 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} 122define 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 131define 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} 138define 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 147define 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} 154define 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 163define 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} 170define 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 179define 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} 186define 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 195define 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} 202define 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 211define 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} 218define 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 227define 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} 234define 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 243define 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} 250define 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 259define 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 267define float @sqrt_test(float %f) nounwind readnone { 268; CHECK: sqrt_test 269 %conv = fpext float %f to double 270 %call = call double @sqrt(double %conv) 271 %conv1 = fptrunc double %call to float 272 ret float %conv1 273; CHECK: call float @sqrtf(float %f) 274} 275 276define float @sqrt_int_test(float %f) nounwind readnone { 277; CHECK: sqrt_int_test 278 %conv = fpext float %f to double 279 %call = call double @llvm.sqrt.f64(double %conv) 280 %conv1 = fptrunc double %call to float 281 ret float %conv1 282; CHECK: call float @llvm.sqrt.f32(float %f) 283} 284 285define double @sqrt_test2(float %f) nounwind readnone { 286; CHECK: sqrt_test2 287 %conv = fpext float %f to double 288 %call = call double @sqrt(double %conv) 289 ret double %call 290; CHECK: call double @sqrt(double %conv) 291} 292define float @tan_test(float %f) nounwind readnone { 293; CHECK: tan_test 294 %conv = fpext float %f to double 295 %call = call double @tan(double %conv) 296 %conv1 = fptrunc double %call to float 297 ret float %conv1 298; CHECK: call float @tanf(float %f) 299} 300 301define double @tan_test2(float %f) nounwind readnone { 302; CHECK: tan_test2 303 %conv = fpext float %f to double 304 %call = call double @tan(double %conv) 305 ret double %call 306; CHECK: call double @tan(double %conv) 307} 308define float @tanh_test(float %f) nounwind readnone { 309; CHECK: tanh_test 310 %conv = fpext float %f to double 311 %call = call double @tanh(double %conv) 312 %conv1 = fptrunc double %call to float 313 ret float %conv1 314; CHECK: call float @tanhf(float %f) 315} 316 317define double @tanh_test2(float %f) nounwind readnone { 318; CHECK: tanh_test2 319 %conv = fpext float %f to double 320 %call = call double @tanh(double %conv) 321 ret double %call 322; CHECK: call double @tanh(double %conv) 323} 324 325declare double @tanh(double) nounwind readnone 326declare double @tan(double) nounwind readnone 327declare double @sqrt(double) nounwind readnone 328declare double @sin(double) nounwind readnone 329declare double @log2(double) nounwind readnone 330declare double @log1p(double) nounwind readnone 331declare double @log10(double) nounwind readnone 332declare double @log(double) nounwind readnone 333declare double @logb(double) nounwind readnone 334declare double @exp10(double) nounwind readnone 335declare double @expm1(double) nounwind readnone 336declare double @exp(double) nounwind readnone 337declare double @cbrt(double) nounwind readnone 338declare double @atanh(double) nounwind readnone 339declare double @atan(double) nounwind readnone 340declare double @acos(double) nounwind readnone 341declare double @acosh(double) nounwind readnone 342declare double @asin(double) nounwind readnone 343declare double @asinh(double) nounwind readnone 344 345declare double @llvm.sqrt.f64(double) nounwind readnone 346 347