brintos

brintos / llvm-project-archived public Read only

0
0
Text · 90.7 KiB · b7c4e07 Raw
2110 lines · plain
1// RUN: split-file %s %t2// TODO: verify that Fast-Math Flags and 'strictfp' are properly set.3 4//--- abs_fast.fir5// RUN: fir-opt %t/abs_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/abs_fast.fir6// CHECK: @_QPtest_real47// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f32) -> f328 9// CHECK: @_QPtest_real810// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f64) -> f6411 12// CHECK: @_QPtest_real1613// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f128) -> f12814 15// CHECK: @_QPtest_complex416// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypotf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f3217 18// CHECK: @_QPtest_complex819// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypot({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f6420 21func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {22  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}23  %1 = fir.load %arg0 : !fir.ref<f32>24  %2 = math.absf %1 : f3225  fir.store %2 to %0 : !fir.ref<f32>26  %3 = fir.load %0 : !fir.ref<f32>27  return %3 : f3228}29func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {30  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}31  %1 = fir.load %arg0 : !fir.ref<f64>32  %2 = math.absf %1 : f6433  fir.store %2 to %0 : !fir.ref<f64>34  %3 = fir.load %0 : !fir.ref<f64>35  return %3 : f6436}37func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}) -> f128 {38  %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"}39  %1 = fir.load %arg0 : !fir.ref<f128>40  %2 = math.absf %1 : f12841  fir.store %2 to %0 : !fir.ref<f128>42  %3 = fir.load %0 : !fir.ref<f128>43  return %3 : f12844}45func.func @_QPtest_complex4(%arg0: !fir.ref<complex<f32>> {fir.bindc_name = "c"}) -> complex<f32> {46  %0 = fir.alloca complex<f32> {bindc_name = "test_complex4", uniq_name = "_QFtest_complex4Etest_complex4"}47  %1 = fir.load %arg0 : !fir.ref<complex<f32>>48  %2 = fir.extract_value %1, [0 : index] : (complex<f32>) -> f3249  %3 = fir.extract_value %1, [1 : index] : (complex<f32>) -> f3250  %4 = fir.call @hypotf(%2, %3) : (f32, f32) -> f3251  %cst = arith.constant 0.000000e+00 : f3252  %5 = fir.undefined complex<f32>53  %6 = fir.insert_value %5, %4, [0 : index] : (complex<f32>, f32) -> complex<f32>54  %7 = fir.insert_value %6, %cst, [1 : index] : (complex<f32>, f32) -> complex<f32>55  fir.store %7 to %0 : !fir.ref<complex<f32>>56  %8 = fir.load %0 : !fir.ref<complex<f32>>57  return %8 : complex<f32>58}59func.func @_QPtest_complex8(%arg0: !fir.ref<complex<f64>> {fir.bindc_name = "c"}) -> complex<f64> {60  %0 = fir.alloca complex<f64> {bindc_name = "test_complex8", uniq_name = "_QFtest_complex8Etest_complex8"}61  %1 = fir.load %arg0 : !fir.ref<complex<f64>>62  %2 = fir.extract_value %1, [0 : index] : (complex<f64>) -> f6463  %3 = fir.extract_value %1, [1 : index] : (complex<f64>) -> f6464  %4 = fir.call @hypot(%2, %3) : (f64, f64) -> f6465  %cst = arith.constant 0.000000e+00 : f6466  %5 = fir.undefined complex<f64>67  %6 = fir.insert_value %5, %4, [0 : index] : (complex<f64>, f64) -> complex<f64>68  %7 = fir.insert_value %6, %cst, [1 : index] : (complex<f64>, f64) -> complex<f64>69  fir.store %7 to %0 : !fir.ref<complex<f64>>70  %8 = fir.load %0 : !fir.ref<complex<f64>>71  return %8 : complex<f64>72}73func.func private @hypotf(f32, f32) -> f3274func.func private @hypot(f64, f64) -> f6475 76//--- abs_relaxed.fir77// RUN: fir-opt %t/abs_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/abs_relaxed.fir78// CHECK: @_QPtest_real479// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f32) -> f3280 81// CHECK: @_QPtest_real882// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f64) -> f6483 84// CHECK: @_QPtest_real1685// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f128) -> f12886 87// CHECK: @_QPtest_complex488// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypotf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f3289 90// CHECK: @_QPtest_complex891// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypot({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f6492 93func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {94  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}95  %1 = fir.load %arg0 : !fir.ref<f32>96  %2 = math.absf %1 : f3297  fir.store %2 to %0 : !fir.ref<f32>98  %3 = fir.load %0 : !fir.ref<f32>99  return %3 : f32100}101func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {102  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}103  %1 = fir.load %arg0 : !fir.ref<f64>104  %2 = math.absf %1 : f64105  fir.store %2 to %0 : !fir.ref<f64>106  %3 = fir.load %0 : !fir.ref<f64>107  return %3 : f64108}109func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}) -> f128 {110  %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"}111  %1 = fir.load %arg0 : !fir.ref<f128>112  %2 = math.absf %1 : f128113  fir.store %2 to %0 : !fir.ref<f128>114  %3 = fir.load %0 : !fir.ref<f128>115  return %3 : f128116}117func.func @_QPtest_complex4(%arg0: !fir.ref<complex<f32>> {fir.bindc_name = "c"}) -> complex<f32> {118  %0 = fir.alloca complex<f32> {bindc_name = "test_complex4", uniq_name = "_QFtest_complex4Etest_complex4"}119  %1 = fir.load %arg0 : !fir.ref<complex<f32>>120  %2 = fir.extract_value %1, [0 : index] : (complex<f32>) -> f32121  %3 = fir.extract_value %1, [1 : index] : (complex<f32>) -> f32122  %4 = fir.call @hypotf(%2, %3) : (f32, f32) -> f32123  %cst = arith.constant 0.000000e+00 : f32124  %5 = fir.undefined complex<f32>125  %6 = fir.insert_value %5, %4, [0 : index] : (complex<f32>, f32) -> complex<f32>126  %7 = fir.insert_value %6, %cst, [1 : index] : (complex<f32>, f32) -> complex<f32>127  fir.store %7 to %0 : !fir.ref<complex<f32>>128  %8 = fir.load %0 : !fir.ref<complex<f32>>129  return %8 : complex<f32>130}131func.func @_QPtest_complex8(%arg0: !fir.ref<complex<f64>> {fir.bindc_name = "c"}) -> complex<f64> {132  %0 = fir.alloca complex<f64> {bindc_name = "test_complex8", uniq_name = "_QFtest_complex8Etest_complex8"}133  %1 = fir.load %arg0 : !fir.ref<complex<f64>>134  %2 = fir.extract_value %1, [0 : index] : (complex<f64>) -> f64135  %3 = fir.extract_value %1, [1 : index] : (complex<f64>) -> f64136  %4 = fir.call @hypot(%2, %3) : (f64, f64) -> f64137  %cst = arith.constant 0.000000e+00 : f64138  %5 = fir.undefined complex<f64>139  %6 = fir.insert_value %5, %4, [0 : index] : (complex<f64>, f64) -> complex<f64>140  %7 = fir.insert_value %6, %cst, [1 : index] : (complex<f64>, f64) -> complex<f64>141  fir.store %7 to %0 : !fir.ref<complex<f64>>142  %8 = fir.load %0 : !fir.ref<complex<f64>>143  return %8 : complex<f64>144}145func.func private @hypotf(f32, f32) -> f32146func.func private @hypot(f64, f64) -> f64147 148//--- abs_precise.fir149// RUN: fir-opt %t/abs_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/abs_precise.fir150// CHECK: @_QPtest_real4151// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @fabsf({{%[A-Za-z0-9._]+}}) : (f32) -> f32152 153// CHECK: @_QPtest_real8154// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @fabs({{%[A-Za-z0-9._]+}}) : (f64) -> f64155 156// CHECK: @_QPtest_real16157// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.fabs.f128({{%[A-Za-z0-9._]+}}) : (f128) -> f128158 159// CHECK: @_QPtest_complex4160// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypotf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32161 162// CHECK: @_QPtest_complex8163// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypot({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64164 165func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {166  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}167  %1 = fir.load %arg0 : !fir.ref<f32>168  %2 = fir.call @fabsf(%1) : (f32) -> f32169  fir.store %2 to %0 : !fir.ref<f32>170  %3 = fir.load %0 : !fir.ref<f32>171  return %3 : f32172}173func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {174  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}175  %1 = fir.load %arg0 : !fir.ref<f64>176  %2 = fir.call @fabs(%1) : (f64) -> f64177  fir.store %2 to %0 : !fir.ref<f64>178  %3 = fir.load %0 : !fir.ref<f64>179  return %3 : f64180}181func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}) -> f128 {182  %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"}183  %1 = fir.load %arg0 : !fir.ref<f128>184  %2 = fir.call @llvm.fabs.f128(%1) : (f128) -> f128185  fir.store %2 to %0 : !fir.ref<f128>186  %3 = fir.load %0 : !fir.ref<f128>187  return %3 : f128188}189func.func @_QPtest_complex4(%arg0: !fir.ref<complex<f32>> {fir.bindc_name = "c"}) -> complex<f32> {190  %0 = fir.alloca complex<f32> {bindc_name = "test_complex4", uniq_name = "_QFtest_complex4Etest_complex4"}191  %1 = fir.load %arg0 : !fir.ref<complex<f32>>192  %2 = fir.extract_value %1, [0 : index] : (complex<f32>) -> f32193  %3 = fir.extract_value %1, [1 : index] : (complex<f32>) -> f32194  %4 = fir.call @hypotf(%2, %3) : (f32, f32) -> f32195  %cst = arith.constant 0.000000e+00 : f32196  %5 = fir.undefined complex<f32>197  %6 = fir.insert_value %5, %4, [0 : index] : (complex<f32>, f32) -> complex<f32>198  %7 = fir.insert_value %6, %cst, [1 : index] : (complex<f32>, f32) -> complex<f32>199  fir.store %7 to %0 : !fir.ref<complex<f32>>200  %8 = fir.load %0 : !fir.ref<complex<f32>>201  return %8 : complex<f32>202}203func.func @_QPtest_complex8(%arg0: !fir.ref<complex<f64>> {fir.bindc_name = "c"}) -> complex<f64> {204  %0 = fir.alloca complex<f64> {bindc_name = "test_complex8", uniq_name = "_QFtest_complex8Etest_complex8"}205  %1 = fir.load %arg0 : !fir.ref<complex<f64>>206  %2 = fir.extract_value %1, [0 : index] : (complex<f64>) -> f64207  %3 = fir.extract_value %1, [1 : index] : (complex<f64>) -> f64208  %4 = fir.call @hypot(%2, %3) : (f64, f64) -> f64209  %cst = arith.constant 0.000000e+00 : f64210  %5 = fir.undefined complex<f64>211  %6 = fir.insert_value %5, %4, [0 : index] : (complex<f64>, f64) -> complex<f64>212  %7 = fir.insert_value %6, %cst, [1 : index] : (complex<f64>, f64) -> complex<f64>213  fir.store %7 to %0 : !fir.ref<complex<f64>>214  %8 = fir.load %0 : !fir.ref<complex<f64>>215  return %8 : complex<f64>216}217func.func private @fabsf(f32) -> f32218func.func private @fabs(f64) -> f64219func.func private @llvm.fabs.f128(f128) -> f128220func.func private @hypotf(f32, f32) -> f32221func.func private @hypot(f64, f64) -> f64222 223//--- aint_fast.fir224// RUN: fir-opt %t/aint_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/aint_fast.fir225// CHECK: @_QPtest_real4226// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f32({{%[A-Za-z0-9._]+}}) : (f32) -> f32227 228// CHECK: @_QPtest_real8229// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f64({{%[A-Za-z0-9._]+}}) : (f64) -> f64230 231func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {232  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}233  %1 = fir.load %arg0 : !fir.ref<f32>234  %2 = fir.call @llvm.trunc.f32(%1) : (f32) -> f32235  fir.store %2 to %0 : !fir.ref<f32>236  %3 = fir.load %0 : !fir.ref<f32>237  return %3 : f32238}239func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {240  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}241  %1 = fir.load %arg0 : !fir.ref<f64>242  %2 = fir.call @llvm.trunc.f64(%1) : (f64) -> f64243  fir.store %2 to %0 : !fir.ref<f64>244  %3 = fir.load %0 : !fir.ref<f64>245  return %3 : f64246}247func.func private @llvm.trunc.f32(f32) -> f32248func.func private @llvm.trunc.f64(f64) -> f64249 250//--- aint_relaxed.fir251// RUN: fir-opt %t/aint_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/aint_relaxed.fir252// CHECK: @_QPtest_real4253// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f32({{%[A-Za-z0-9._]+}}) : (f32) -> f32254 255// CHECK: @_QPtest_real8256// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f64({{%[A-Za-z0-9._]+}}) : (f64) -> f64257 258func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {259  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}260  %1 = fir.load %arg0 : !fir.ref<f32>261  %2 = fir.call @llvm.trunc.f32(%1) : (f32) -> f32262  fir.store %2 to %0 : !fir.ref<f32>263  %3 = fir.load %0 : !fir.ref<f32>264  return %3 : f32265}266func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {267  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}268  %1 = fir.load %arg0 : !fir.ref<f64>269  %2 = fir.call @llvm.trunc.f64(%1) : (f64) -> f64270  fir.store %2 to %0 : !fir.ref<f64>271  %3 = fir.load %0 : !fir.ref<f64>272  return %3 : f64273}274func.func private @llvm.trunc.f32(f32) -> f32275func.func private @llvm.trunc.f64(f64) -> f64276 277//--- aint_precise.fir278// RUN: fir-opt %t/aint_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/aint_precise.fir279// CHECK: @_QPtest_real4280// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f32({{%[A-Za-z0-9._]+}}) : (f32) -> f32281 282// CHECK: @_QPtest_real8283// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f64({{%[A-Za-z0-9._]+}}) : (f64) -> f64284 285func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {286  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}287  %1 = fir.load %arg0 : !fir.ref<f32>288  %2 = fir.call @llvm.trunc.f32(%1) : (f32) -> f32289  fir.store %2 to %0 : !fir.ref<f32>290  %3 = fir.load %0 : !fir.ref<f32>291  return %3 : f32292}293func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {294  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}295  %1 = fir.load %arg0 : !fir.ref<f64>296  %2 = fir.call @llvm.trunc.f64(%1) : (f64) -> f64297  fir.store %2 to %0 : !fir.ref<f64>298  %3 = fir.load %0 : !fir.ref<f64>299  return %3 : f64300}301func.func private @llvm.trunc.f32(f32) -> f32302func.func private @llvm.trunc.f64(f64) -> f64303 304//--- anint_fast.fir305// RUN: fir-opt %t/anint_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/anint_fast.fir306// CHECK: @_QPtest_real4307// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.round({{%[A-Za-z0-9._]+}}) : (f32) -> f32308 309// CHECK: @_QPtest_real8310// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.round({{%[A-Za-z0-9._]+}}) : (f64) -> f64311 312func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {313  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}314  %1 = fir.load %arg0 : !fir.ref<f32>315  %2 = llvm.intr.round(%1) : (f32) -> f32316  fir.store %2 to %0 : !fir.ref<f32>317  %3 = fir.load %0 : !fir.ref<f32>318  return %3 : f32319}320func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {321  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}322  %1 = fir.load %arg0 : !fir.ref<f64>323  %2 = llvm.intr.round(%1) : (f64) -> f64324  fir.store %2 to %0 : !fir.ref<f64>325  %3 = fir.load %0 : !fir.ref<f64>326  return %3 : f64327}328 329//--- anint_relaxed.fir330// RUN: fir-opt %t/anint_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/anint_relaxed.fir331// CHECK: @_QPtest_real4332// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.round({{%[A-Za-z0-9._]+}}) : (f32) -> f32333 334// CHECK: @_QPtest_real8335// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.round({{%[A-Za-z0-9._]+}}) : (f64) -> f64336 337func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {338  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}339  %1 = fir.load %arg0 : !fir.ref<f32>340  %2 = llvm.intr.round(%1) : (f32) -> f32341  fir.store %2 to %0 : !fir.ref<f32>342  %3 = fir.load %0 : !fir.ref<f32>343  return %3 : f32344}345func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {346  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}347  %1 = fir.load %arg0 : !fir.ref<f64>348  %2 = llvm.intr.round(%1) : (f64) -> f64349  fir.store %2 to %0 : !fir.ref<f64>350  %3 = fir.load %0 : !fir.ref<f64>351  return %3 : f64352}353 354//--- anint_precise.fir355// RUN: fir-opt %t/anint_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/anint_precise.fir356// CHECK: @_QPtest_real4357// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.round.f32({{%[A-Za-z0-9._]+}}) : (f32) -> f32358 359// CHECK: @_QPtest_real8360// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.round.f64({{%[A-Za-z0-9._]+}}) : (f64) -> f64361 362func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {363  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}364  %1 = fir.load %arg0 : !fir.ref<f32>365  %2 = fir.call @llvm.round.f32(%1) : (f32) -> f32366  fir.store %2 to %0 : !fir.ref<f32>367  %3 = fir.load %0 : !fir.ref<f32>368  return %3 : f32369}370func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {371  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}372  %1 = fir.load %arg0 : !fir.ref<f64>373  %2 = fir.call @llvm.round.f64(%1) : (f64) -> f64374  fir.store %2 to %0 : !fir.ref<f64>375  %3 = fir.load %0 : !fir.ref<f64>376  return %3 : f64377}378func.func private @llvm.round.f32(f32) -> f32379func.func private @llvm.round.f64(f64) -> f64380 381//--- asin_fast.fir382// RUN: fir-opt %t/asin_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/asin_fast.fir383// CHECK: @_QPtest_real4384// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.asin({{%[A-Za-z0-9._]+}}) : (f32) -> f32385 386// CHECK: @_QPtest_real8387// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.asin({{%[A-Za-z0-9._]+}}) : (f64) -> f64388 389func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {390  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}391  %1 = fir.load %arg0 : !fir.ref<f32>392  %2 = math.asin %1 : f32393  fir.store %2 to %0 : !fir.ref<f32>394  %3 = fir.load %0 : !fir.ref<f32>395  return %3 : f32396}397func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {398  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}399  %1 = fir.load %arg0 : !fir.ref<f64>400  %2 = math.asin %1 : f64401  fir.store %2 to %0 : !fir.ref<f64>402  %3 = fir.load %0 : !fir.ref<f64>403  return %3 : f64404}405 406//--- asin_relaxed.fir407// RUN: fir-opt %t/asin_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/asin_relaxed.fir408// CHECK: @_QPtest_real4409// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.asin({{%[A-Za-z0-9._]+}}) : (f32) -> f32410 411// CHECK: @_QPtest_real8412// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.asin({{%[A-Za-z0-9._]+}}) : (f64) -> f64413 414func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {415  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}416  %1 = fir.load %arg0 : !fir.ref<f32>417  %2 = math.asin %1 : f32418  fir.store %2 to %0 : !fir.ref<f32>419  %3 = fir.load %0 : !fir.ref<f32>420  return %3 : f32421}422func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {423  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}424  %1 = fir.load %arg0 : !fir.ref<f64>425  %2 = math.asin %1 : f64426  fir.store %2 to %0 : !fir.ref<f64>427  %3 = fir.load %0 : !fir.ref<f64>428  return %3 : f64429}430 431//--- asin_precise.fir432// RUN: fir-opt %t/asin_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/asin_precise.fir433// CHECK: @_QPtest_real4434// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @asinf({{%[A-Za-z0-9._]+}}) : (f32) -> f32435 436// CHECK: @_QPtest_real8437// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @asin({{%[A-Za-z0-9._]+}}) : (f64) -> f64438 439func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {440  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}441  %1 = fir.load %arg0 : !fir.ref<f32>442  %2 = fir.call @asinf(%1) : (f32) -> f32443  fir.store %2 to %0 : !fir.ref<f32>444  %3 = fir.load %0 : !fir.ref<f32>445  return %3 : f32446}447func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {448  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}449  %1 = fir.load %arg0 : !fir.ref<f64>450  %2 = fir.call @asin(%1) : (f64) -> f64451  fir.store %2 to %0 : !fir.ref<f64>452  %3 = fir.load %0 : !fir.ref<f64>453  return %3 : f64454}455func.func private @asinf(f32) -> f32456func.func private @asin(f64) -> f64457 458//--- acos_fast.fir459// RUN: fir-opt %t/acos_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/acos_fast.fir460// CHECK: @_QPtest_real4461// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.acos({{%[A-Za-z0-9._]+}}) : (f32) -> f32462 463// CHECK: @_QPtest_real8464// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.acos({{%[A-Za-z0-9._]+}}) : (f64) -> f64465 466func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {467  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}468  %1 = fir.load %arg0 : !fir.ref<f32>469  %2 = math.acos %1 : f32470  fir.store %2 to %0 : !fir.ref<f32>471  %3 = fir.load %0 : !fir.ref<f32>472  return %3 : f32473}474func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {475  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}476  %1 = fir.load %arg0 : !fir.ref<f64>477  %2 = math.acos %1 : f64478  fir.store %2 to %0 : !fir.ref<f64>479  %3 = fir.load %0 : !fir.ref<f64>480  return %3 : f64481}482 483//--- acos_relaxed.fir484// RUN: fir-opt %t/acos_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/acos_relaxed.fir485// CHECK: @_QPtest_real4486// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.acos({{%[A-Za-z0-9._]+}}) : (f32) -> f32487 488// CHECK: @_QPtest_real8489// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.acos({{%[A-Za-z0-9._]+}}) : (f64) -> f64490 491func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {492  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}493  %1 = fir.load %arg0 : !fir.ref<f32>494  %2 = math.acos %1 : f32495  fir.store %2 to %0 : !fir.ref<f32>496  %3 = fir.load %0 : !fir.ref<f32>497  return %3 : f32498}499func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {500  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}501  %1 = fir.load %arg0 : !fir.ref<f64>502  %2 = math.acos %1 : f64503  fir.store %2 to %0 : !fir.ref<f64>504  %3 = fir.load %0 : !fir.ref<f64>505  return %3 : f64506}507 508//--- acos_precise.fir509// RUN: fir-opt %t/acos_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/acos_precise.fir510// CHECK: @_QPtest_real4511// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @acosf({{%[A-Za-z0-9._]+}}) : (f32) -> f32512 513// CHECK: @_QPtest_real8514// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @acos({{%[A-Za-z0-9._]+}}) : (f64) -> f64515 516func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {517  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}518  %1 = fir.load %arg0 : !fir.ref<f32>519  %2 = fir.call @acosf(%1) : (f32) -> f32520  fir.store %2 to %0 : !fir.ref<f32>521  %3 = fir.load %0 : !fir.ref<f32>522  return %3 : f32523}524func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {525  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}526  %1 = fir.load %arg0 : !fir.ref<f64>527  %2 = fir.call @acos(%1) : (f64) -> f64528  fir.store %2 to %0 : !fir.ref<f64>529  %3 = fir.load %0 : !fir.ref<f64>530  return %3 : f64531}532func.func private @acosf(f32) -> f32533func.func private @acos(f64) -> f64534 535//--- atan_fast.fir536// RUN: fir-opt %t/atan_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan_fast.fir537// CHECK: @_QPtest_real4538// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.atan({{%[A-Za-z0-9._]+}}) : (f32) -> f32539 540// CHECK: @_QPtest_real8541// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.atan({{%[A-Za-z0-9._]+}}) : (f64) -> f64542 543func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {544  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}545  %1 = fir.load %arg0 : !fir.ref<f32>546  %2 = math.atan %1 : f32547  fir.store %2 to %0 : !fir.ref<f32>548  %3 = fir.load %0 : !fir.ref<f32>549  return %3 : f32550}551func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {552  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}553  %1 = fir.load %arg0 : !fir.ref<f64>554  %2 = math.atan %1 : f64555  fir.store %2 to %0 : !fir.ref<f64>556  %3 = fir.load %0 : !fir.ref<f64>557  return %3 : f64558}559 560//--- atan_relaxed.fir561// RUN: fir-opt %t/atan_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan_relaxed.fir562// CHECK: @_QPtest_real4563// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.atan({{%[A-Za-z0-9._]+}}) : (f32) -> f32564 565// CHECK: @_QPtest_real8566// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.atan({{%[A-Za-z0-9._]+}}) : (f64) -> f64567 568func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {569  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}570  %1 = fir.load %arg0 : !fir.ref<f32>571  %2 = math.atan %1 : f32572  fir.store %2 to %0 : !fir.ref<f32>573  %3 = fir.load %0 : !fir.ref<f32>574  return %3 : f32575}576func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {577  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}578  %1 = fir.load %arg0 : !fir.ref<f64>579  %2 = math.atan %1 : f64580  fir.store %2 to %0 : !fir.ref<f64>581  %3 = fir.load %0 : !fir.ref<f64>582  return %3 : f64583}584 585//--- atan_precise.fir586// RUN: fir-opt %t/atan_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan_precise.fir587// CHECK: @_QPtest_real4588// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atanf({{%[A-Za-z0-9._]+}}) : (f32) -> f32589 590// CHECK: @_QPtest_real8591// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan({{%[A-Za-z0-9._]+}}) : (f64) -> f64592 593func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {594  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}595  %1 = fir.load %arg0 : !fir.ref<f32>596  %2 = fir.call @atanf(%1) : (f32) -> f32597  fir.store %2 to %0 : !fir.ref<f32>598  %3 = fir.load %0 : !fir.ref<f32>599  return %3 : f32600}601func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {602  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}603  %1 = fir.load %arg0 : !fir.ref<f64>604  %2 = fir.call @atan(%1) : (f64) -> f64605  fir.store %2 to %0 : !fir.ref<f64>606  %3 = fir.load %0 : !fir.ref<f64>607  return %3 : f64608}609func.func private @atanf(f32) -> f32610func.func private @atan(f64) -> f64611 612//--- atan2_fast.fir613// RUN: fir-opt %t/atan2_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan2_fast.fir614// CHECK: @_QPtest_real4615// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.atan2({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32616 617// CHECK: @_QPtest_real8618// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.atan2({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64619 620func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 {621  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}622  %1 = fir.load %arg0 : !fir.ref<f32>623  %2 = fir.load %arg1 : !fir.ref<f32>624  %3 = math.atan2 %1, %2 : f32625  fir.store %3 to %0 : !fir.ref<f32>626  %4 = fir.load %0 : !fir.ref<f32>627  return %4 : f32628}629func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 {630  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}631  %1 = fir.load %arg0 : !fir.ref<f64>632  %2 = fir.load %arg1 : !fir.ref<f64>633  %3 = math.atan2 %1, %2 : f64634  fir.store %3 to %0 : !fir.ref<f64>635  %4 = fir.load %0 : !fir.ref<f64>636  return %4 : f64637}638 639//--- atan2_relaxed.fir640// RUN: fir-opt %t/atan2_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan2_relaxed.fir641// CHECK: @_QPtest_real4642// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.atan2({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32643 644// CHECK: @_QPtest_real8645// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.atan2({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64646 647func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 {648  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}649  %1 = fir.load %arg0 : !fir.ref<f32>650  %2 = fir.load %arg1 : !fir.ref<f32>651  %3 = math.atan2 %1, %2 : f32652  fir.store %3 to %0 : !fir.ref<f32>653  %4 = fir.load %0 : !fir.ref<f32>654  return %4 : f32655}656func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 {657  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}658  %1 = fir.load %arg0 : !fir.ref<f64>659  %2 = fir.load %arg1 : !fir.ref<f64>660  %3 = math.atan2 %1, %2 : f64661  fir.store %3 to %0 : !fir.ref<f64>662  %4 = fir.load %0 : !fir.ref<f64>663  return %4 : f64664}665 666//--- atan2_precise.fir667// RUN: fir-opt %t/atan2_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan2_precise.fir668// CHECK: @_QPtest_real4669// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan2f({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32670 671// CHECK: @_QPtest_real8672// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan2({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64673 674func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 {675  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}676  %1 = fir.load %arg0 : !fir.ref<f32>677  %2 = fir.load %arg1 : !fir.ref<f32>678  %3 = fir.call @atan2f(%1, %2) : (f32, f32) -> f32679  fir.store %3 to %0 : !fir.ref<f32>680  %4 = fir.load %0 : !fir.ref<f32>681  return %4 : f32682}683func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 {684  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}685  %1 = fir.load %arg0 : !fir.ref<f64>686  %2 = fir.load %arg1 : !fir.ref<f64>687  %3 = fir.call @atan2(%1, %2) : (f64, f64) -> f64688  fir.store %3 to %0 : !fir.ref<f64>689  %4 = fir.load %0 : !fir.ref<f64>690  return %4 : f64691}692func.func private @atan2f(f32, f32) -> f32693func.func private @atan2(f64, f64) -> f64694 695//--- ceiling_fast.fir696// RUN: fir-opt %t/ceiling_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/ceiling_fast.fir697// CHECK: @_QPtest_real4698// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.ceil({{%[A-Za-z0-9._]+}}) : (f32) -> f32699 700// CHECK: @_QPtest_real8701// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.ceil({{%[A-Za-z0-9._]+}}) : (f64) -> f64702 703func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {704  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}705  %1 = fir.load %arg0 : !fir.ref<f32>706  %2 = math.ceil %1 : f32707  %3 = fir.convert %2 : (f32) -> i32708  %4 = fir.convert %3 : (i32) -> f32709  fir.store %4 to %0 : !fir.ref<f32>710  %5 = fir.load %0 : !fir.ref<f32>711  return %5 : f32712}713func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {714  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}715  %1 = fir.load %arg0 : !fir.ref<f64>716  %2 = math.ceil %1 : f64717  %3 = fir.convert %2 : (f64) -> i32718  %4 = fir.convert %3 : (i32) -> f64719  fir.store %4 to %0 : !fir.ref<f64>720  %5 = fir.load %0 : !fir.ref<f64>721  return %5 : f64722}723 724//--- ceiling_relaxed.fir725// RUN: fir-opt %t/ceiling_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/ceiling_relaxed.fir726// CHECK: @_QPtest_real4727// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.ceil({{%[A-Za-z0-9._]+}}) : (f32) -> f32728 729// CHECK: @_QPtest_real8730// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.ceil({{%[A-Za-z0-9._]+}}) : (f64) -> f64731 732func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {733  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}734  %1 = fir.load %arg0 : !fir.ref<f32>735  %2 = math.ceil %1 : f32736  %3 = fir.convert %2 : (f32) -> i32737  %4 = fir.convert %3 : (i32) -> f32738  fir.store %4 to %0 : !fir.ref<f32>739  %5 = fir.load %0 : !fir.ref<f32>740  return %5 : f32741}742func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {743  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}744  %1 = fir.load %arg0 : !fir.ref<f64>745  %2 = math.ceil %1 : f64746  %3 = fir.convert %2 : (f64) -> i32747  %4 = fir.convert %3 : (i32) -> f64748  fir.store %4 to %0 : !fir.ref<f64>749  %5 = fir.load %0 : !fir.ref<f64>750  return %5 : f64751}752 753//--- ceiling_precise.fir754// RUN: fir-opt %t/ceiling_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/ceiling_precise.fir755// CHECK: @_QPtest_real4756// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @ceilf({{%[A-Za-z0-9._]+}}) : (f32) -> f32757 758// CHECK: @_QPtest_real8759// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @ceil({{%[A-Za-z0-9._]+}}) : (f64) -> f64760 761func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {762  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}763  %1 = fir.load %arg0 : !fir.ref<f32>764  %2 = fir.call @ceilf(%1) : (f32) -> f32765  %3 = fir.convert %2 : (f32) -> i32766  %4 = fir.convert %3 : (i32) -> f32767  fir.store %4 to %0 : !fir.ref<f32>768  %5 = fir.load %0 : !fir.ref<f32>769  return %5 : f32770}771func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {772  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}773  %1 = fir.load %arg0 : !fir.ref<f64>774  %2 = fir.call @ceil(%1) : (f64) -> f64775  %3 = fir.convert %2 : (f64) -> i32776  %4 = fir.convert %3 : (i32) -> f64777  fir.store %4 to %0 : !fir.ref<f64>778  %5 = fir.load %0 : !fir.ref<f64>779  return %5 : f64780}781func.func private @ceilf(f32) -> f32782func.func private @ceil(f64) -> f64783 784//--- cos_fast.fir785// RUN: fir-opt %t/cos_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cos_fast.fir786// CHECK: @_QPtest_real4787// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.cos({{%[A-Za-z0-9._]+}}) : (f32) -> f32788 789// CHECK: @_QPtest_real8790// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.cos({{%[A-Za-z0-9._]+}}) : (f64) -> f64791 792func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {793  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}794  %1 = fir.load %arg0 : !fir.ref<f32>795  %2 = math.cos %1 : f32796  fir.store %2 to %0 : !fir.ref<f32>797  %3 = fir.load %0 : !fir.ref<f32>798  return %3 : f32799}800func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {801  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}802  %1 = fir.load %arg0 : !fir.ref<f64>803  %2 = math.cos %1 : f64804  fir.store %2 to %0 : !fir.ref<f64>805  %3 = fir.load %0 : !fir.ref<f64>806  return %3 : f64807}808 809//--- cos_relaxed.fir810// RUN: fir-opt %t/cos_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cos_relaxed.fir811// CHECK: @_QPtest_real4812// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.cos({{%[A-Za-z0-9._]+}}) : (f32) -> f32813 814// CHECK: @_QPtest_real8815// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.cos({{%[A-Za-z0-9._]+}}) : (f64) -> f64816 817func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {818  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}819  %1 = fir.load %arg0 : !fir.ref<f32>820  %2 = math.cos %1 : f32821  fir.store %2 to %0 : !fir.ref<f32>822  %3 = fir.load %0 : !fir.ref<f32>823  return %3 : f32824}825func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {826  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}827  %1 = fir.load %arg0 : !fir.ref<f64>828  %2 = math.cos %1 : f64829  fir.store %2 to %0 : !fir.ref<f64>830  %3 = fir.load %0 : !fir.ref<f64>831  return %3 : f64832}833 834//--- cos_precise.fir835// RUN: fir-opt %t/cos_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cos_precise.fir836// CHECK: @_QPtest_real4837// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @cosf({{%[A-Za-z0-9._]+}}) : (f32) -> f32838 839// CHECK: @_QPtest_real8840// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @cos({{%[A-Za-z0-9._]+}}) : (f64) -> f64841 842func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {843  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}844  %1 = fir.load %arg0 : !fir.ref<f32>845  %2 = fir.call @cosf(%1) : (f32) -> f32846  fir.store %2 to %0 : !fir.ref<f32>847  %3 = fir.load %0 : !fir.ref<f32>848  return %3 : f32849}850func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {851  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}852  %1 = fir.load %arg0 : !fir.ref<f64>853  %2 = fir.call @cos(%1) : (f64) -> f64854  fir.store %2 to %0 : !fir.ref<f64>855  %3 = fir.load %0 : !fir.ref<f64>856  return %3 : f64857}858func.func private @cosf(f32) -> f32859func.func private @cos(f64) -> f64860 861//--- cosh_fast.fir862// RUN: fir-opt %t/cosh_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cosh_fast.fir863// CHECK: @_QPtest_real4864// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @coshf({{%[A-Za-z0-9._]+}}) : (f32) -> f32865 866// CHECK: @_QPtest_real8867// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @cosh({{%[A-Za-z0-9._]+}}) : (f64) -> f64868 869func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {870  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}871  %1 = fir.load %arg0 : !fir.ref<f32>872  %2 = fir.call @coshf(%1) : (f32) -> f32873  fir.store %2 to %0 : !fir.ref<f32>874  %3 = fir.load %0 : !fir.ref<f32>875  return %3 : f32876}877func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {878  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}879  %1 = fir.load %arg0 : !fir.ref<f64>880  %2 = fir.call @cosh(%1) : (f64) -> f64881  fir.store %2 to %0 : !fir.ref<f64>882  %3 = fir.load %0 : !fir.ref<f64>883  return %3 : f64884}885func.func private @coshf(f32) -> f32886func.func private @cosh(f64) -> f64887 888//--- cosh_relaxed.fir889// RUN: fir-opt %t/cosh_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cosh_relaxed.fir890// CHECK: @_QPtest_real4891// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @coshf({{%[A-Za-z0-9._]+}}) : (f32) -> f32892 893// CHECK: @_QPtest_real8894// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @cosh({{%[A-Za-z0-9._]+}}) : (f64) -> f64895 896func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {897  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}898  %1 = fir.load %arg0 : !fir.ref<f32>899  %2 = fir.call @coshf(%1) : (f32) -> f32900  fir.store %2 to %0 : !fir.ref<f32>901  %3 = fir.load %0 : !fir.ref<f32>902  return %3 : f32903}904func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {905  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}906  %1 = fir.load %arg0 : !fir.ref<f64>907  %2 = fir.call @cosh(%1) : (f64) -> f64908  fir.store %2 to %0 : !fir.ref<f64>909  %3 = fir.load %0 : !fir.ref<f64>910  return %3 : f64911}912func.func private @coshf(f32) -> f32913func.func private @cosh(f64) -> f64914 915//--- cosh_precise.fir916// RUN: fir-opt %t/cosh_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cosh_precise.fir917// CHECK: @_QPtest_real4918// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @coshf({{%[A-Za-z0-9._]+}}) : (f32) -> f32919 920// CHECK: @_QPtest_real8921// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @cosh({{%[A-Za-z0-9._]+}}) : (f64) -> f64922 923func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {924  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}925  %1 = fir.load %arg0 : !fir.ref<f32>926  %2 = fir.call @coshf(%1) : (f32) -> f32927  fir.store %2 to %0 : !fir.ref<f32>928  %3 = fir.load %0 : !fir.ref<f32>929  return %3 : f32930}931func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {932  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}933  %1 = fir.load %arg0 : !fir.ref<f64>934  %2 = fir.call @cosh(%1) : (f64) -> f64935  fir.store %2 to %0 : !fir.ref<f64>936  %3 = fir.load %0 : !fir.ref<f64>937  return %3 : f64938}939func.func private @coshf(f32) -> f32940func.func private @cosh(f64) -> f64941 942//--- erf_fast.fir943// RUN: fir-opt %t/erf_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/erf_fast.fir944// CHECK: @_QPtest_real4945// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erff({{%[A-Za-z0-9._]+}}) : (f32) -> f32946 947// CHECK: @_QPtest_real8948// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erf({{%[A-Za-z0-9._]+}}) : (f64) -> f64949 950func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {951  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}952  %1 = fir.load %arg0 : !fir.ref<f32>953  %2 = math.erf %1 : f32954  fir.store %2 to %0 : !fir.ref<f32>955  %3 = fir.load %0 : !fir.ref<f32>956  return %3 : f32957}958func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {959  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}960  %1 = fir.load %arg0 : !fir.ref<f64>961  %2 = math.erf %1 : f64962  fir.store %2 to %0 : !fir.ref<f64>963  %3 = fir.load %0 : !fir.ref<f64>964  return %3 : f64965}966 967//--- erf_relaxed.fir968// RUN: fir-opt %t/erf_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/erf_relaxed.fir969// CHECK: @_QPtest_real4970// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erff({{%[A-Za-z0-9._]+}}) : (f32) -> f32971 972// CHECK: @_QPtest_real8973// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erf({{%[A-Za-z0-9._]+}}) : (f64) -> f64974 975func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {976  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}977  %1 = fir.load %arg0 : !fir.ref<f32>978  %2 = math.erf %1 : f32979  fir.store %2 to %0 : !fir.ref<f32>980  %3 = fir.load %0 : !fir.ref<f32>981  return %3 : f32982}983func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {984  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}985  %1 = fir.load %arg0 : !fir.ref<f64>986  %2 = math.erf %1 : f64987  fir.store %2 to %0 : !fir.ref<f64>988  %3 = fir.load %0 : !fir.ref<f64>989  return %3 : f64990}991 992//--- erf_precise.fir993// RUN: fir-opt %t/erf_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/erf_precise.fir994// CHECK: @_QPtest_real4995// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erff({{%[A-Za-z0-9._]+}}) : (f32) -> f32996 997// CHECK: @_QPtest_real8998// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erf({{%[A-Za-z0-9._]+}}) : (f64) -> f64999 1000func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1001  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1002  %1 = fir.load %arg0 : !fir.ref<f32>1003  %2 = fir.call @erff(%1) : (f32) -> f321004  fir.store %2 to %0 : !fir.ref<f32>1005  %3 = fir.load %0 : !fir.ref<f32>1006  return %3 : f321007}1008func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1009  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1010  %1 = fir.load %arg0 : !fir.ref<f64>1011  %2 = fir.call @erf(%1) : (f64) -> f641012  fir.store %2 to %0 : !fir.ref<f64>1013  %3 = fir.load %0 : !fir.ref<f64>1014  return %3 : f641015}1016func.func private @erff(f32) -> f321017func.func private @erf(f64) -> f641018 1019//--- exp_fast.fir1020// RUN: fir-opt %t/exp_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exp_fast.fir1021// CHECK: @_QPtest_real41022// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.exp({{%[A-Za-z0-9._]+}}) : (f32) -> f321023 1024// CHECK: @_QPtest_real81025// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.exp({{%[A-Za-z0-9._]+}}) : (f64) -> f641026 1027func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1028  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1029  %1 = fir.load %arg0 : !fir.ref<f32>1030  %2 = math.exp %1 : f321031  fir.store %2 to %0 : !fir.ref<f32>1032  %3 = fir.load %0 : !fir.ref<f32>1033  return %3 : f321034}1035func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1036  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1037  %1 = fir.load %arg0 : !fir.ref<f64>1038  %2 = math.exp %1 : f641039  fir.store %2 to %0 : !fir.ref<f64>1040  %3 = fir.load %0 : !fir.ref<f64>1041  return %3 : f641042}1043 1044//--- exp_relaxed.fir1045// RUN: fir-opt %t/exp_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exp_relaxed.fir1046// CHECK: @_QPtest_real41047// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.exp({{%[A-Za-z0-9._]+}}) : (f32) -> f321048 1049// CHECK: @_QPtest_real81050// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.exp({{%[A-Za-z0-9._]+}}) : (f64) -> f641051 1052func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1053  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1054  %1 = fir.load %arg0 : !fir.ref<f32>1055  %2 = math.exp %1 : f321056  fir.store %2 to %0 : !fir.ref<f32>1057  %3 = fir.load %0 : !fir.ref<f32>1058  return %3 : f321059}1060func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1061  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1062  %1 = fir.load %arg0 : !fir.ref<f64>1063  %2 = math.exp %1 : f641064  fir.store %2 to %0 : !fir.ref<f64>1065  %3 = fir.load %0 : !fir.ref<f64>1066  return %3 : f641067}1068 1069//--- exp_precise.fir1070// RUN: fir-opt %t/exp_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exp_precise.fir1071// CHECK: @_QPtest_real41072// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @expf({{%[A-Za-z0-9._]+}}) : (f32) -> f321073 1074// CHECK: @_QPtest_real81075// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @exp({{%[A-Za-z0-9._]+}}) : (f64) -> f641076 1077func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1078  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1079  %1 = fir.load %arg0 : !fir.ref<f32>1080  %2 = fir.call @expf(%1) : (f32) -> f321081  fir.store %2 to %0 : !fir.ref<f32>1082  %3 = fir.load %0 : !fir.ref<f32>1083  return %3 : f321084}1085func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1086  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1087  %1 = fir.load %arg0 : !fir.ref<f64>1088  %2 = fir.call @exp(%1) : (f64) -> f641089  fir.store %2 to %0 : !fir.ref<f64>1090  %3 = fir.load %0 : !fir.ref<f64>1091  return %3 : f641092}1093func.func private @expf(f32) -> f321094func.func private @exp(f64) -> f641095 1096//--- floor_fast.fir1097// RUN: fir-opt %t/floor_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/floor_fast.fir1098// CHECK: @_QPtest_real41099// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.floor({{%[A-Za-z0-9._]+}}) : (f32) -> f321100 1101// CHECK: @_QPtest_real81102// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.floor({{%[A-Za-z0-9._]+}}) : (f64) -> f641103 1104func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1105  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1106  %1 = fir.load %arg0 : !fir.ref<f32>1107  %2 = math.floor %1 : f321108  %3 = fir.convert %2 : (f32) -> i321109  %4 = fir.convert %3 : (i32) -> f321110  fir.store %4 to %0 : !fir.ref<f32>1111  %5 = fir.load %0 : !fir.ref<f32>1112  return %5 : f321113}1114func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1115  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1116  %1 = fir.load %arg0 : !fir.ref<f64>1117  %2 = math.floor %1 : f641118  %3 = fir.convert %2 : (f64) -> i321119  %4 = fir.convert %3 : (i32) -> f641120  fir.store %4 to %0 : !fir.ref<f64>1121  %5 = fir.load %0 : !fir.ref<f64>1122  return %5 : f641123}1124 1125//--- floor_relaxed.fir1126// RUN: fir-opt %t/floor_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/floor_relaxed.fir1127// CHECK: @_QPtest_real41128// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.floor({{%[A-Za-z0-9._]+}}) : (f32) -> f321129 1130// CHECK: @_QPtest_real81131// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.floor({{%[A-Za-z0-9._]+}}) : (f64) -> f641132 1133func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1134  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1135  %1 = fir.load %arg0 : !fir.ref<f32>1136  %2 = math.floor %1 : f321137  %3 = fir.convert %2 : (f32) -> i321138  %4 = fir.convert %3 : (i32) -> f321139  fir.store %4 to %0 : !fir.ref<f32>1140  %5 = fir.load %0 : !fir.ref<f32>1141  return %5 : f321142}1143func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1144  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1145  %1 = fir.load %arg0 : !fir.ref<f64>1146  %2 = math.floor %1 : f641147  %3 = fir.convert %2 : (f64) -> i321148  %4 = fir.convert %3 : (i32) -> f641149  fir.store %4 to %0 : !fir.ref<f64>1150  %5 = fir.load %0 : !fir.ref<f64>1151  return %5 : f641152}1153 1154//--- floor_precise.fir1155// RUN: fir-opt %t/floor_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/floor_precise.fir1156// CHECK: @_QPtest_real41157// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @floorf({{%[A-Za-z0-9._]+}}) : (f32) -> f321158 1159// CHECK: @_QPtest_real81160// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @floor({{%[A-Za-z0-9._]+}}) : (f64) -> f641161 1162func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1163  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1164  %1 = fir.load %arg0 : !fir.ref<f32>1165  %2 = fir.call @floorf(%1) : (f32) -> f321166  %3 = fir.convert %2 : (f32) -> i321167  %4 = fir.convert %3 : (i32) -> f321168  fir.store %4 to %0 : !fir.ref<f32>1169  %5 = fir.load %0 : !fir.ref<f32>1170  return %5 : f321171}1172func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1173  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1174  %1 = fir.load %arg0 : !fir.ref<f64>1175  %2 = fir.call @floor(%1) : (f64) -> f641176  %3 = fir.convert %2 : (f64) -> i321177  %4 = fir.convert %3 : (i32) -> f641178  fir.store %4 to %0 : !fir.ref<f64>1179  %5 = fir.load %0 : !fir.ref<f64>1180  return %5 : f641181}1182func.func private @floorf(f32) -> f321183func.func private @floor(f64) -> f641184 1185//--- log_fast.fir1186// RUN: fir-opt %t/log_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log_fast.fir1187// CHECK: @_QPtest_real41188// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log({{%[A-Za-z0-9._]+}}) : (f32) -> f321189 1190// CHECK: @_QPtest_real81191// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log({{%[A-Za-z0-9._]+}}) : (f64) -> f641192 1193func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1194  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1195  %1 = fir.load %arg0 : !fir.ref<f32>1196  %2 = math.log %1 : f321197  fir.store %2 to %0 : !fir.ref<f32>1198  %3 = fir.load %0 : !fir.ref<f32>1199  return %3 : f321200}1201func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1202  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1203  %1 = fir.load %arg0 : !fir.ref<f64>1204  %2 = math.log %1 : f641205  fir.store %2 to %0 : !fir.ref<f64>1206  %3 = fir.load %0 : !fir.ref<f64>1207  return %3 : f641208}1209 1210//--- log_relaxed.fir1211// RUN: fir-opt %t/log_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log_relaxed.fir1212// CHECK: @_QPtest_real41213// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log({{%[A-Za-z0-9._]+}}) : (f32) -> f321214 1215// CHECK: @_QPtest_real81216// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log({{%[A-Za-z0-9._]+}}) : (f64) -> f641217 1218func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1219  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1220  %1 = fir.load %arg0 : !fir.ref<f32>1221  %2 = math.log %1 : f321222  fir.store %2 to %0 : !fir.ref<f32>1223  %3 = fir.load %0 : !fir.ref<f32>1224  return %3 : f321225}1226func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1227  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1228  %1 = fir.load %arg0 : !fir.ref<f64>1229  %2 = math.log %1 : f641230  fir.store %2 to %0 : !fir.ref<f64>1231  %3 = fir.load %0 : !fir.ref<f64>1232  return %3 : f641233}1234 1235//--- log_precise.fir1236// RUN: fir-opt %t/log_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log_precise.fir1237// CHECK: @_QPtest_real41238// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @logf({{%[A-Za-z0-9._]+}}) : (f32) -> f321239 1240// CHECK: @_QPtest_real81241// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @log({{%[A-Za-z0-9._]+}}) : (f64) -> f641242 1243func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1244  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1245  %1 = fir.load %arg0 : !fir.ref<f32>1246  %2 = fir.call @logf(%1) : (f32) -> f321247  fir.store %2 to %0 : !fir.ref<f32>1248  %3 = fir.load %0 : !fir.ref<f32>1249  return %3 : f321250}1251func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1252  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1253  %1 = fir.load %arg0 : !fir.ref<f64>1254  %2 = fir.call @log(%1) : (f64) -> f641255  fir.store %2 to %0 : !fir.ref<f64>1256  %3 = fir.load %0 : !fir.ref<f64>1257  return %3 : f641258}1259func.func private @logf(f32) -> f321260func.func private @log(f64) -> f641261 1262//--- log10_fast.fir1263// RUN: fir-opt %t/log10_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log10_fast.fir1264// CHECK: @_QPtest_real41265// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log10({{%[A-Za-z0-9._]+}}) : (f32) -> f321266 1267// CHECK: @_QPtest_real81268// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log10({{%[A-Za-z0-9._]+}}) : (f64) -> f641269 1270func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1271  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1272  %1 = fir.load %arg0 : !fir.ref<f32>1273  %2 = math.log10 %1 : f321274  fir.store %2 to %0 : !fir.ref<f32>1275  %3 = fir.load %0 : !fir.ref<f32>1276  return %3 : f321277}1278func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1279  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1280  %1 = fir.load %arg0 : !fir.ref<f64>1281  %2 = math.log10 %1 : f641282  fir.store %2 to %0 : !fir.ref<f64>1283  %3 = fir.load %0 : !fir.ref<f64>1284  return %3 : f641285}1286 1287//--- log10_relaxed.fir1288// RUN: fir-opt %t/log10_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log10_relaxed.fir1289// CHECK: @_QPtest_real41290// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log10({{%[A-Za-z0-9._]+}}) : (f32) -> f321291 1292// CHECK: @_QPtest_real81293// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log10({{%[A-Za-z0-9._]+}}) : (f64) -> f641294 1295func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1296  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1297  %1 = fir.load %arg0 : !fir.ref<f32>1298  %2 = math.log10 %1 : f321299  fir.store %2 to %0 : !fir.ref<f32>1300  %3 = fir.load %0 : !fir.ref<f32>1301  return %3 : f321302}1303func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1304  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1305  %1 = fir.load %arg0 : !fir.ref<f64>1306  %2 = math.log10 %1 : f641307  fir.store %2 to %0 : !fir.ref<f64>1308  %3 = fir.load %0 : !fir.ref<f64>1309  return %3 : f641310}1311 1312//--- log10_precise.fir1313// RUN: fir-opt %t/log10_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log10_precise.fir1314// CHECK: @_QPtest_real41315// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @log10f({{%[A-Za-z0-9._]+}}) : (f32) -> f321316 1317// CHECK: @_QPtest_real81318// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @log10({{%[A-Za-z0-9._]+}}) : (f64) -> f641319 1320func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1321  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1322  %1 = fir.load %arg0 : !fir.ref<f32>1323  %2 = fir.call @log10f(%1) : (f32) -> f321324  fir.store %2 to %0 : !fir.ref<f32>1325  %3 = fir.load %0 : !fir.ref<f32>1326  return %3 : f321327}1328func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1329  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1330  %1 = fir.load %arg0 : !fir.ref<f64>1331  %2 = fir.call @log10(%1) : (f64) -> f641332  fir.store %2 to %0 : !fir.ref<f64>1333  %3 = fir.load %0 : !fir.ref<f64>1334  return %3 : f641335}1336func.func private @log10f(f32) -> f321337func.func private @log10(f64) -> f641338 1339//--- nint_fast.fir1340// RUN: fir-opt %t/nint_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/nint_fast.fir1341// CHECK: @_QPtest_real41342// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i321343// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i641344 1345// CHECK: @_QPtest_real81346// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i321347// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i641348 1349func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1350  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1351  %1 = fir.load %arg0 : !fir.ref<f32>1352  %2 = fir.call @llvm.lround.i32.f32(%1) : (f32) -> i321353  %3 = fir.convert %2 : (i32) -> i641354  %4 = fir.load %arg0 : !fir.ref<f32>1355  %5 = fir.call @llvm.lround.i64.f32(%4) : (f32) -> i641356  %6 = arith.addi %3, %5 : i641357  %7 = fir.convert %6 : (i64) -> f321358  fir.store %7 to %0 : !fir.ref<f32>1359  %8 = fir.load %0 : !fir.ref<f32>1360  return %8 : f321361}1362func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1363  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1364  %1 = fir.load %arg0 : !fir.ref<f64>1365  %2 = fir.call @llvm.lround.i32.f64(%1) : (f64) -> i321366  %3 = fir.convert %2 : (i32) -> i641367  %4 = fir.load %arg0 : !fir.ref<f64>1368  %5 = fir.call @llvm.lround.i64.f64(%4) : (f64) -> i641369  %6 = arith.addi %3, %5 : i641370  %7 = fir.convert %6 : (i64) -> f641371  fir.store %7 to %0 : !fir.ref<f64>1372  %8 = fir.load %0 : !fir.ref<f64>1373  return %8 : f641374}1375func.func private @llvm.lround.i32.f32(f32) -> i321376func.func private @llvm.lround.i64.f32(f32) -> i641377func.func private @llvm.lround.i32.f64(f64) -> i321378func.func private @llvm.lround.i64.f64(f64) -> i641379 1380//--- nint_relaxed.fir1381// RUN: fir-opt %t/nint_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/nint_relaxed.fir1382// CHECK: @_QPtest_real41383// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i321384// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i641385 1386// CHECK: @_QPtest_real81387// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i321388// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i641389 1390func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1391  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1392  %1 = fir.load %arg0 : !fir.ref<f32>1393  %2 = fir.call @llvm.lround.i32.f32(%1) : (f32) -> i321394  %3 = fir.convert %2 : (i32) -> i641395  %4 = fir.load %arg0 : !fir.ref<f32>1396  %5 = fir.call @llvm.lround.i64.f32(%4) : (f32) -> i641397  %6 = arith.addi %3, %5 : i641398  %7 = fir.convert %6 : (i64) -> f321399  fir.store %7 to %0 : !fir.ref<f32>1400  %8 = fir.load %0 : !fir.ref<f32>1401  return %8 : f321402}1403func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1404  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1405  %1 = fir.load %arg0 : !fir.ref<f64>1406  %2 = fir.call @llvm.lround.i32.f64(%1) : (f64) -> i321407  %3 = fir.convert %2 : (i32) -> i641408  %4 = fir.load %arg0 : !fir.ref<f64>1409  %5 = fir.call @llvm.lround.i64.f64(%4) : (f64) -> i641410  %6 = arith.addi %3, %5 : i641411  %7 = fir.convert %6 : (i64) -> f641412  fir.store %7 to %0 : !fir.ref<f64>1413  %8 = fir.load %0 : !fir.ref<f64>1414  return %8 : f641415}1416func.func private @llvm.lround.i32.f32(f32) -> i321417func.func private @llvm.lround.i64.f32(f32) -> i641418func.func private @llvm.lround.i32.f64(f64) -> i321419func.func private @llvm.lround.i64.f64(f64) -> i641420 1421//--- nint_precise.fir1422// RUN: fir-opt %t/nint_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/nint_precise.fir1423// CHECK: @_QPtest_real41424// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i321425// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i641426 1427// CHECK: @_QPtest_real81428// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i321429// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i641430 1431func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1432  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1433  %1 = fir.load %arg0 : !fir.ref<f32>1434  %2 = fir.call @llvm.lround.i32.f32(%1) : (f32) -> i321435  %3 = fir.convert %2 : (i32) -> i641436  %4 = fir.load %arg0 : !fir.ref<f32>1437  %5 = fir.call @llvm.lround.i64.f32(%4) : (f32) -> i641438  %6 = arith.addi %3, %5 : i641439  %7 = fir.convert %6 : (i64) -> f321440  fir.store %7 to %0 : !fir.ref<f32>1441  %8 = fir.load %0 : !fir.ref<f32>1442  return %8 : f321443}1444func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1445  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1446  %1 = fir.load %arg0 : !fir.ref<f64>1447  %2 = fir.call @llvm.lround.i32.f64(%1) : (f64) -> i321448  %3 = fir.convert %2 : (i32) -> i641449  %4 = fir.load %arg0 : !fir.ref<f64>1450  %5 = fir.call @llvm.lround.i64.f64(%4) : (f64) -> i641451  %6 = arith.addi %3, %5 : i641452  %7 = fir.convert %6 : (i64) -> f641453  fir.store %7 to %0 : !fir.ref<f64>1454  %8 = fir.load %0 : !fir.ref<f64>1455  return %8 : f641456}1457func.func private @llvm.lround.i32.f32(f32) -> i321458func.func private @llvm.lround.i64.f32(f32) -> i641459func.func private @llvm.lround.i32.f64(f64) -> i321460func.func private @llvm.lround.i64.f64(f64) -> i641461 1462//--- exponentiation_fast.fir1463// RUN: fir-opt %t/exponentiation_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exponentiation_fast.fir1464// CHECK: @_QPtest_real41465// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i321466// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f32, i32) -> f321467// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.pow({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f321468// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, i32) -> f321469 1470// CHECK: @_QPtest_real81471// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i321472// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f64, i32) -> f641473// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.pow({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f641474// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, i32) -> f641475 1476func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}, %arg2: !fir.ref<i16> {fir.bindc_name = "s"}, %arg3: !fir.ref<i32> {fir.bindc_name = "i"}) -> f32 {1477  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1478  %1 = fir.load %arg0 : !fir.ref<f32>1479  %2 = fir.load %arg2 : !fir.ref<i16>1480  %3 = fir.convert %2 : (i16) -> i321481  %4 = fir.call @llvm.powi.f32.i32(%1, %3) : (f32, i32) -> f321482  %5 = fir.load %arg0 : !fir.ref<f32>1483  %6 = fir.load %arg1 : !fir.ref<f32>1484  %7 = math.powf %5, %6 : f321485  %8 = arith.addf %4, %7 : f321486  %9 = fir.load %arg0 : !fir.ref<f32>1487  %10 = fir.load %arg3 : !fir.ref<i32>1488  %11 = fir.call @llvm.powi.f32.i32(%9, %10) : (f32, i32) -> f321489  %12 = arith.addf %8, %11 : f321490  fir.store %12 to %0 : !fir.ref<f32>1491  %13 = fir.load %0 : !fir.ref<f32>1492  return %13 : f321493}1494func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}, %arg2: !fir.ref<i16> {fir.bindc_name = "s"}, %arg3: !fir.ref<i32> {fir.bindc_name = "i"}) -> f64 {1495  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1496  %1 = fir.load %arg0 : !fir.ref<f64>1497  %2 = fir.load %arg2 : !fir.ref<i16>1498  %3 = fir.convert %2 : (i16) -> i321499  %4 = fir.call @llvm.powi.f64.i32(%1, %3) : (f64, i32) -> f641500  %5 = fir.load %arg0 : !fir.ref<f64>1501  %6 = fir.load %arg1 : !fir.ref<f64>1502  %7 = math.powf %5, %6 : f641503  %8 = arith.addf %4, %7 : f641504  %9 = fir.load %arg0 : !fir.ref<f64>1505  %10 = fir.load %arg3 : !fir.ref<i32>1506  %11 = fir.call @llvm.powi.f64.i32(%9, %10) : (f64, i32) -> f641507  %12 = arith.addf %8, %11 : f641508  fir.store %12 to %0 : !fir.ref<f64>1509  %13 = fir.load %0 : !fir.ref<f64>1510  return %13 : f641511}1512func.func private @llvm.powi.f32.i32(f32, i32) -> f321513func.func private @llvm.powi.f64.i32(f64, i32) -> f641514 1515//--- exponentiation_relaxed.fir1516// RUN: fir-opt %t/exponentiation_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exponentiation_relaxed.fir1517// CHECK: @_QPtest_real41518// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i321519// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f32, i32) -> f321520// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.pow({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f321521// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, i32) -> f321522 1523// CHECK: @_QPtest_real81524// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i321525// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f64, i32) -> f641526// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.pow({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f641527// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, i32) -> f641528 1529func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}, %arg2: !fir.ref<i16> {fir.bindc_name = "s"}, %arg3: !fir.ref<i32> {fir.bindc_name = "i"}) -> f32 {1530  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1531  %1 = fir.load %arg0 : !fir.ref<f32>1532  %2 = fir.load %arg2 : !fir.ref<i16>1533  %3 = fir.convert %2 : (i16) -> i321534  %4 = fir.call @llvm.powi.f32.i32(%1, %3) : (f32, i32) -> f321535  %5 = fir.load %arg0 : !fir.ref<f32>1536  %6 = fir.load %arg1 : !fir.ref<f32>1537  %7 = math.powf %5, %6 : f321538  %8 = arith.addf %4, %7 : f321539  %9 = fir.load %arg0 : !fir.ref<f32>1540  %10 = fir.load %arg3 : !fir.ref<i32>1541  %11 = fir.call @llvm.powi.f32.i32(%9, %10) : (f32, i32) -> f321542  %12 = arith.addf %8, %11 : f321543  fir.store %12 to %0 : !fir.ref<f32>1544  %13 = fir.load %0 : !fir.ref<f32>1545  return %13 : f321546}1547func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}, %arg2: !fir.ref<i16> {fir.bindc_name = "s"}, %arg3: !fir.ref<i32> {fir.bindc_name = "i"}) -> f64 {1548  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1549  %1 = fir.load %arg0 : !fir.ref<f64>1550  %2 = fir.load %arg2 : !fir.ref<i16>1551  %3 = fir.convert %2 : (i16) -> i321552  %4 = fir.call @llvm.powi.f64.i32(%1, %3) : (f64, i32) -> f641553  %5 = fir.load %arg0 : !fir.ref<f64>1554  %6 = fir.load %arg1 : !fir.ref<f64>1555  %7 = math.powf %5, %6 : f641556  %8 = arith.addf %4, %7 : f641557  %9 = fir.load %arg0 : !fir.ref<f64>1558  %10 = fir.load %arg3 : !fir.ref<i32>1559  %11 = fir.call @llvm.powi.f64.i32(%9, %10) : (f64, i32) -> f641560  %12 = arith.addf %8, %11 : f641561  fir.store %12 to %0 : !fir.ref<f64>1562  %13 = fir.load %0 : !fir.ref<f64>1563  return %13 : f641564}1565func.func private @llvm.powi.f32.i32(f32, i32) -> f321566func.func private @llvm.powi.f64.i32(f64, i32) -> f641567 1568//--- exponentiation_precise.fir1569// RUN: fir-opt %t/exponentiation_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exponentiation_precise.fir1570// CHECK: @_QPtest_real41571// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i321572// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f32, i32) -> f321573// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @powf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f321574// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, i32) -> f321575 1576// CHECK: @_QPtest_real81577// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i321578// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f64, i32) -> f641579// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @pow({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f641580// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, i32) -> f641581 1582func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}, %arg2: !fir.ref<i16> {fir.bindc_name = "s"}, %arg3: !fir.ref<i32> {fir.bindc_name = "i"}) -> f32 {1583  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1584  %1 = fir.load %arg0 : !fir.ref<f32>1585  %2 = fir.load %arg2 : !fir.ref<i16>1586  %3 = fir.convert %2 : (i16) -> i321587  %4 = fir.call @llvm.powi.f32.i32(%1, %3) : (f32, i32) -> f321588  %5 = fir.load %arg0 : !fir.ref<f32>1589  %6 = fir.load %arg1 : !fir.ref<f32>1590  %7 = fir.call @powf(%5, %6) : (f32, f32) -> f321591  %8 = arith.addf %4, %7 : f321592  %9 = fir.load %arg0 : !fir.ref<f32>1593  %10 = fir.load %arg3 : !fir.ref<i32>1594  %11 = fir.call @llvm.powi.f32.i32(%9, %10) : (f32, i32) -> f321595  %12 = arith.addf %8, %11 : f321596  fir.store %12 to %0 : !fir.ref<f32>1597  %13 = fir.load %0 : !fir.ref<f32>1598  return %13 : f321599}1600func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}, %arg2: !fir.ref<i16> {fir.bindc_name = "s"}, %arg3: !fir.ref<i32> {fir.bindc_name = "i"}) -> f64 {1601  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1602  %1 = fir.load %arg0 : !fir.ref<f64>1603  %2 = fir.load %arg2 : !fir.ref<i16>1604  %3 = fir.convert %2 : (i16) -> i321605  %4 = fir.call @llvm.powi.f64.i32(%1, %3) : (f64, i32) -> f641606  %5 = fir.load %arg0 : !fir.ref<f64>1607  %6 = fir.load %arg1 : !fir.ref<f64>1608  %7 = fir.call @pow(%5, %6) : (f64, f64) -> f641609  %8 = arith.addf %4, %7 : f641610  %9 = fir.load %arg0 : !fir.ref<f64>1611  %10 = fir.load %arg3 : !fir.ref<i32>1612  %11 = fir.call @llvm.powi.f64.i32(%9, %10) : (f64, i32) -> f641613  %12 = arith.addf %8, %11 : f641614  fir.store %12 to %0 : !fir.ref<f64>1615  %13 = fir.load %0 : !fir.ref<f64>1616  return %13 : f641617}1618func.func private @llvm.powi.f32.i32(f32, i32) -> f321619func.func private @powf(f32, f32) -> f321620func.func private @llvm.powi.f64.i32(f64, i32) -> f641621func.func private @pow(f64, f64) -> f641622 1623//--- exponentiation_integer.fir1624// RUN: fir-opt %t/exponentiation_integer.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exponentiation_integer.fir --check-prefixes="CHECK,CHECK-COMDAT"1625// RUN: fir-opt %t/exponentiation_integer.fir --fir-to-llvm-ir="target=x86_64-pc-windows-msvc" | FileCheck %t/exponentiation_integer.fir --check-prefixes="CHECK,CHECK-COMDAT"1626// RUN: fir-opt %t/exponentiation_integer.fir --fir-to-llvm-ir="target=aarch64-apple-darwin" | FileCheck %t/exponentiation_integer.fir --check-prefixes="CHECK,CHECK-NOCOMDAT"1627// CHECK-COMDAT: llvm.comdat_selector @__mlir_math_ipowi_i32 any1628// CHECK-NOCOMDAT-NOT: llvm.comdat_selector @__mlir_math_ipowi_i32 any1629// CHECK: @_QPtest_int41630// CHECK: llvm.call @__mlir_math_ipowi_i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (i32, i32) -> i321631// CHECK-COMDAT: llvm.func linkonce_odr @__mlir_math_ipowi_i32(%arg0: i32, %arg1: i32) -> i32 comdat(@__llvm_comdat::@__mlir_math_ipowi_i32)1632// CHECK-NOCOMDAT: llvm.func linkonce_odr @__mlir_math_ipowi_i32(%arg0: i32, %arg1: i32) -> i321633 1634func.func @_QPtest_int4(%arg0: !fir.ref<i32> {fir.bindc_name = "x"}, %arg1: !fir.ref<i32> {fir.bindc_name = "y"}, %arg2: !fir.ref<i32> {fir.bindc_name = "z"}) {1635  %0 = fir.load %arg0 : !fir.ref<i32>1636  %1 = fir.load %arg1 : !fir.ref<i32>1637  %2 = math.ipowi %0, %1 : i321638  fir.store %2 to %arg2 : !fir.ref<i32>1639  return1640}1641 1642//--- sign_fast.fir1643// RUN: fir-opt %t/sign_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sign_fast.fir1644// CHECK: @_QPtest_real41645// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f321646 1647// CHECK: @_QPtest_real81648// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f641649 1650// CHECK: @_QPtest_real101651// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f80, f80) -> f801652 1653// CHECK: @_QPtest_real161654// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f128, f128) -> f1281655 1656func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 {1657  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1658  %1 = fir.load %arg0 : !fir.ref<f32>1659  %2 = fir.load %arg1 : !fir.ref<f32>1660  %3 = math.copysign %1, %2 : f321661  fir.store %3 to %0 : !fir.ref<f32>1662  %4 = fir.load %0 : !fir.ref<f32>1663  return %4 : f321664}1665func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 {1666  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1667  %1 = fir.load %arg0 : !fir.ref<f64>1668  %2 = fir.load %arg1 : !fir.ref<f64>1669  %3 = math.copysign %1, %2 : f641670  fir.store %3 to %0 : !fir.ref<f64>1671  %4 = fir.load %0 : !fir.ref<f64>1672  return %4 : f641673}1674func.func @_QPtest_real10(%arg0: !fir.ref<f80> {fir.bindc_name = "x"}, %arg1: !fir.ref<f80> {fir.bindc_name = "y"}) -> f80 {1675  %0 = fir.alloca f80 {bindc_name = "test_real10", uniq_name = "_QFtest_real10Etest_real10"}1676  %1 = fir.load %arg0 : !fir.ref<f80>1677  %2 = fir.load %arg1 : !fir.ref<f80>1678  %3 = math.copysign %1, %2 : f801679  fir.store %3 to %0 : !fir.ref<f80>1680  %4 = fir.load %0 : !fir.ref<f80>1681  return %4 : f801682}1683func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}, %arg1: !fir.ref<f128> {fir.bindc_name = "y"}) -> f128 {1684  %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"}1685  %1 = fir.load %arg0 : !fir.ref<f128>1686  %2 = fir.load %arg1 : !fir.ref<f128>1687  %3 = math.copysign %1, %2 : f1281688  fir.store %3 to %0 : !fir.ref<f128>1689  %4 = fir.load %0 : !fir.ref<f128>1690  return %4 : f1281691}1692 1693//--- sign_relaxed.fir1694// RUN: fir-opt %t/sign_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sign_relaxed.fir1695// CHECK: @_QPtest_real41696// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f321697 1698// CHECK: @_QPtest_real81699// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f641700 1701// CHECK: @_QPtest_real101702// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f80, f80) -> f801703 1704// CHECK: @_QPtest_real161705// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f128, f128) -> f1281706 1707func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 {1708  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1709  %1 = fir.load %arg0 : !fir.ref<f32>1710  %2 = fir.load %arg1 : !fir.ref<f32>1711  %3 = math.copysign %1, %2 : f321712  fir.store %3 to %0 : !fir.ref<f32>1713  %4 = fir.load %0 : !fir.ref<f32>1714  return %4 : f321715}1716func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 {1717  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1718  %1 = fir.load %arg0 : !fir.ref<f64>1719  %2 = fir.load %arg1 : !fir.ref<f64>1720  %3 = math.copysign %1, %2 : f641721  fir.store %3 to %0 : !fir.ref<f64>1722  %4 = fir.load %0 : !fir.ref<f64>1723  return %4 : f641724}1725func.func @_QPtest_real10(%arg0: !fir.ref<f80> {fir.bindc_name = "x"}, %arg1: !fir.ref<f80> {fir.bindc_name = "y"}) -> f80 {1726  %0 = fir.alloca f80 {bindc_name = "test_real10", uniq_name = "_QFtest_real10Etest_real10"}1727  %1 = fir.load %arg0 : !fir.ref<f80>1728  %2 = fir.load %arg1 : !fir.ref<f80>1729  %3 = math.copysign %1, %2 : f801730  fir.store %3 to %0 : !fir.ref<f80>1731  %4 = fir.load %0 : !fir.ref<f80>1732  return %4 : f801733}1734func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}, %arg1: !fir.ref<f128> {fir.bindc_name = "y"}) -> f128 {1735  %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"}1736  %1 = fir.load %arg0 : !fir.ref<f128>1737  %2 = fir.load %arg1 : !fir.ref<f128>1738  %3 = math.copysign %1, %2 : f1281739  fir.store %3 to %0 : !fir.ref<f128>1740  %4 = fir.load %0 : !fir.ref<f128>1741  return %4 : f1281742}1743 1744//--- sign_precise.fir1745// RUN: fir-opt %t/sign_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sign_precise.fir1746// CHECK: @_QPtest_real41747// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @copysignf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f321748 1749// CHECK: @_QPtest_real81750// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f641751 1752// CHECK: @_QPtest_real101753// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @copysignl({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f80, f80) -> f801754 1755// CHECK: @_QPtest_real161756// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.copysign.f128({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f128, f128) -> f1281757 1758func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 {1759  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1760  %1 = fir.load %arg0 : !fir.ref<f32>1761  %2 = fir.load %arg1 : !fir.ref<f32>1762  %3 = fir.call @copysignf(%1, %2) : (f32, f32) -> f321763  fir.store %3 to %0 : !fir.ref<f32>1764  %4 = fir.load %0 : !fir.ref<f32>1765  return %4 : f321766}1767func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 {1768  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1769  %1 = fir.load %arg0 : !fir.ref<f64>1770  %2 = fir.load %arg1 : !fir.ref<f64>1771  %3 = fir.call @copysign(%1, %2) : (f64, f64) -> f641772  fir.store %3 to %0 : !fir.ref<f64>1773  %4 = fir.load %0 : !fir.ref<f64>1774  return %4 : f641775}1776func.func @_QPtest_real10(%arg0: !fir.ref<f80> {fir.bindc_name = "x"}, %arg1: !fir.ref<f80> {fir.bindc_name = "y"}) -> f80 {1777  %0 = fir.alloca f80 {bindc_name = "test_real10", uniq_name = "_QFtest_real10Etest_real10"}1778  %1 = fir.load %arg0 : !fir.ref<f80>1779  %2 = fir.load %arg1 : !fir.ref<f80>1780  %3 = fir.call @copysignl(%1, %2) : (f80, f80) -> f801781  fir.store %3 to %0 : !fir.ref<f80>1782  %4 = fir.load %0 : !fir.ref<f80>1783  return %4 : f801784}1785func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}, %arg1: !fir.ref<f128> {fir.bindc_name = "y"}) -> f128 {1786  %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"}1787  %1 = fir.load %arg0 : !fir.ref<f128>1788  %2 = fir.load %arg1 : !fir.ref<f128>1789  %3 = fir.call @llvm.copysign.f128(%1, %2) : (f128, f128) -> f1281790  fir.store %3 to %0 : !fir.ref<f128>1791  %4 = fir.load %0 : !fir.ref<f128>1792  return %4 : f1281793}1794func.func private @copysignf(f32, f32) -> f321795func.func private @copysign(f64, f64) -> f641796func.func private @copysignl(f80, f80) -> f801797func.func private @llvm.copysign.f128(f128, f128) -> f1281798 1799//--- sin_fast.fir1800// RUN: fir-opt %t/sin_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sin_fast.fir1801// CHECK: @_QPtest_real41802// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.sin({{%[A-Za-z0-9._]+}}) : (f32) -> f321803 1804// CHECK: @_QPtest_real81805// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.sin({{%[A-Za-z0-9._]+}}) : (f64) -> f641806 1807func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1808  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1809  %1 = fir.load %arg0 : !fir.ref<f32>1810  %2 = math.sin %1 : f321811  fir.store %2 to %0 : !fir.ref<f32>1812  %3 = fir.load %0 : !fir.ref<f32>1813  return %3 : f321814}1815func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1816  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1817  %1 = fir.load %arg0 : !fir.ref<f64>1818  %2 = math.sin %1 : f641819  fir.store %2 to %0 : !fir.ref<f64>1820  %3 = fir.load %0 : !fir.ref<f64>1821  return %3 : f641822}1823 1824//--- sin_relaxed.fir1825// RUN: fir-opt %t/sin_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sin_relaxed.fir1826// CHECK: @_QPtest_real41827// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.sin({{%[A-Za-z0-9._]+}}) : (f32) -> f321828 1829// CHECK: @_QPtest_real81830// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.sin({{%[A-Za-z0-9._]+}}) : (f64) -> f641831 1832func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1833  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1834  %1 = fir.load %arg0 : !fir.ref<f32>1835  %2 = math.sin %1 : f321836  fir.store %2 to %0 : !fir.ref<f32>1837  %3 = fir.load %0 : !fir.ref<f32>1838  return %3 : f321839}1840func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1841  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1842  %1 = fir.load %arg0 : !fir.ref<f64>1843  %2 = math.sin %1 : f641844  fir.store %2 to %0 : !fir.ref<f64>1845  %3 = fir.load %0 : !fir.ref<f64>1846  return %3 : f641847}1848 1849//--- sin_precise.fir1850// RUN: fir-opt %t/sin_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sin_precise.fir1851// CHECK: @_QPtest_real41852// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinf({{%[A-Za-z0-9._]+}}) : (f32) -> f321853 1854// CHECK: @_QPtest_real81855// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sin({{%[A-Za-z0-9._]+}}) : (f64) -> f641856 1857func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1858  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1859  %1 = fir.load %arg0 : !fir.ref<f32>1860  %2 = fir.call @sinf(%1) : (f32) -> f321861  fir.store %2 to %0 : !fir.ref<f32>1862  %3 = fir.load %0 : !fir.ref<f32>1863  return %3 : f321864}1865func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1866  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1867  %1 = fir.load %arg0 : !fir.ref<f64>1868  %2 = fir.call @sin(%1) : (f64) -> f641869  fir.store %2 to %0 : !fir.ref<f64>1870  %3 = fir.load %0 : !fir.ref<f64>1871  return %3 : f641872}1873func.func private @sinf(f32) -> f321874func.func private @sin(f64) -> f641875 1876//--- sinh_fast.fir1877// RUN: fir-opt %t/sinh_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sinh_fast.fir1878// CHECK: @_QPtest_real41879// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinhf({{%[A-Za-z0-9._]+}}) : (f32) -> f321880 1881// CHECK: @_QPtest_real81882// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinh({{%[A-Za-z0-9._]+}}) : (f64) -> f641883 1884func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1885  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1886  %1 = fir.load %arg0 : !fir.ref<f32>1887  %2 = fir.call @sinhf(%1) : (f32) -> f321888  fir.store %2 to %0 : !fir.ref<f32>1889  %3 = fir.load %0 : !fir.ref<f32>1890  return %3 : f321891}1892func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1893  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1894  %1 = fir.load %arg0 : !fir.ref<f64>1895  %2 = fir.call @sinh(%1) : (f64) -> f641896  fir.store %2 to %0 : !fir.ref<f64>1897  %3 = fir.load %0 : !fir.ref<f64>1898  return %3 : f641899}1900func.func private @sinhf(f32) -> f321901func.func private @sinh(f64) -> f641902 1903//--- sinh_relaxed.fir1904// RUN: fir-opt %t/sinh_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sinh_relaxed.fir1905// CHECK: @_QPtest_real41906// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinhf({{%[A-Za-z0-9._]+}}) : (f32) -> f321907 1908// CHECK: @_QPtest_real81909// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinh({{%[A-Za-z0-9._]+}}) : (f64) -> f641910 1911func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1912  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1913  %1 = fir.load %arg0 : !fir.ref<f32>1914  %2 = fir.call @sinhf(%1) : (f32) -> f321915  fir.store %2 to %0 : !fir.ref<f32>1916  %3 = fir.load %0 : !fir.ref<f32>1917  return %3 : f321918}1919func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1920  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1921  %1 = fir.load %arg0 : !fir.ref<f64>1922  %2 = fir.call @sinh(%1) : (f64) -> f641923  fir.store %2 to %0 : !fir.ref<f64>1924  %3 = fir.load %0 : !fir.ref<f64>1925  return %3 : f641926}1927func.func private @sinhf(f32) -> f321928func.func private @sinh(f64) -> f641929 1930//--- sinh_precise.fir1931// RUN: fir-opt %t/sinh_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sinh_precise.fir1932// CHECK: @_QPtest_real41933// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinhf({{%[A-Za-z0-9._]+}}) : (f32) -> f321934 1935// CHECK: @_QPtest_real81936// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinh({{%[A-Za-z0-9._]+}}) : (f64) -> f641937 1938func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1939  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1940  %1 = fir.load %arg0 : !fir.ref<f32>1941  %2 = fir.call @sinhf(%1) : (f32) -> f321942  fir.store %2 to %0 : !fir.ref<f32>1943  %3 = fir.load %0 : !fir.ref<f32>1944  return %3 : f321945}1946func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1947  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1948  %1 = fir.load %arg0 : !fir.ref<f64>1949  %2 = fir.call @sinh(%1) : (f64) -> f641950  fir.store %2 to %0 : !fir.ref<f64>1951  %3 = fir.load %0 : !fir.ref<f64>1952  return %3 : f641953}1954func.func private @sinhf(f32) -> f321955func.func private @sinh(f64) -> f641956 1957//--- tanh_fast.fir1958// RUN: fir-opt %t/tanh_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tanh_fast.fir1959// CHECK: @_QPtest_real41960// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.tanh({{%[A-Za-z0-9._]+}}) : (f32) -> f321961 1962// CHECK: @_QPtest_real81963// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.tanh({{%[A-Za-z0-9._]+}}) : (f64) -> f641964 1965func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1966  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1967  %1 = fir.load %arg0 : !fir.ref<f32>1968  %2 = math.tanh %1 : f321969  fir.store %2 to %0 : !fir.ref<f32>1970  %3 = fir.load %0 : !fir.ref<f32>1971  return %3 : f321972}1973func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1974  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}1975  %1 = fir.load %arg0 : !fir.ref<f64>1976  %2 = math.tanh %1 : f641977  fir.store %2 to %0 : !fir.ref<f64>1978  %3 = fir.load %0 : !fir.ref<f64>1979  return %3 : f641980}1981 1982//--- tanh_relaxed.fir1983// RUN: fir-opt %t/tanh_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tanh_relaxed.fir1984// CHECK: @_QPtest_real41985// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.tanh({{%[A-Za-z0-9._]+}}) : (f32) -> f321986 1987// CHECK: @_QPtest_real81988// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.tanh({{%[A-Za-z0-9._]+}}) : (f64) -> f641989 1990func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {1991  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}1992  %1 = fir.load %arg0 : !fir.ref<f32>1993  %2 = math.tanh %1 : f321994  fir.store %2 to %0 : !fir.ref<f32>1995  %3 = fir.load %0 : !fir.ref<f32>1996  return %3 : f321997}1998func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {1999  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}2000  %1 = fir.load %arg0 : !fir.ref<f64>2001  %2 = math.tanh %1 : f642002  fir.store %2 to %0 : !fir.ref<f64>2003  %3 = fir.load %0 : !fir.ref<f64>2004  return %3 : f642005}2006 2007//--- tanh_precise.fir2008// RUN: fir-opt %t/tanh_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tanh_precise.fir2009// CHECK: @_QPtest_real42010// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanhf({{%[A-Za-z0-9._]+}}) : (f32) -> f322011 2012// CHECK: @_QPtest_real82013// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanh({{%[A-Za-z0-9._]+}}) : (f64) -> f642014 2015func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {2016  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}2017  %1 = fir.load %arg0 : !fir.ref<f32>2018  %2 = fir.call @tanhf(%1) : (f32) -> f322019  fir.store %2 to %0 : !fir.ref<f32>2020  %3 = fir.load %0 : !fir.ref<f32>2021  return %3 : f322022}2023func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {2024  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}2025  %1 = fir.load %arg0 : !fir.ref<f64>2026  %2 = fir.call @tanh(%1) : (f64) -> f642027  fir.store %2 to %0 : !fir.ref<f64>2028  %3 = fir.load %0 : !fir.ref<f64>2029  return %3 : f642030}2031func.func private @tanhf(f32) -> f322032func.func private @tanh(f64) -> f642033 2034//--- tan_fast.fir2035// RUN: fir-opt %t/tan_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tan_fast.fir2036// CHECK: @_QPtest_real42037// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.tan({{%[A-Za-z0-9._]+}}) : (f32) -> f322038 2039// CHECK: @_QPtest_real82040// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.tan({{%[A-Za-z0-9._]+}}) : (f64) -> f642041 2042func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {2043  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}2044  %1 = fir.load %arg0 : !fir.ref<f32>2045  %2 = math.tan %1 : f322046  fir.store %2 to %0 : !fir.ref<f32>2047  %3 = fir.load %0 : !fir.ref<f32>2048  return %3 : f322049}2050func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {2051  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}2052  %1 = fir.load %arg0 : !fir.ref<f64>2053  %2 = math.tan %1 : f642054  fir.store %2 to %0 : !fir.ref<f64>2055  %3 = fir.load %0 : !fir.ref<f64>2056  return %3 : f642057}2058 2059//--- tan_relaxed.fir2060// RUN: fir-opt %t/tan_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tan_relaxed.fir2061// CHECK: @_QPtest_real42062// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.tan({{%[A-Za-z0-9._]+}}) : (f32) -> f322063 2064// CHECK: @_QPtest_real82065// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.tan({{%[A-Za-z0-9._]+}}) : (f64) -> f642066 2067func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {2068  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}2069  %1 = fir.load %arg0 : !fir.ref<f32>2070  %2 = math.tan %1 : f322071  fir.store %2 to %0 : !fir.ref<f32>2072  %3 = fir.load %0 : !fir.ref<f32>2073  return %3 : f322074}2075func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {2076  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}2077  %1 = fir.load %arg0 : !fir.ref<f64>2078  %2 = math.tan %1 : f642079  fir.store %2 to %0 : !fir.ref<f64>2080  %3 = fir.load %0 : !fir.ref<f64>2081  return %3 : f642082}2083 2084//--- tan_precise.fir2085// RUN: fir-opt %t/tan_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tan_precise.fir2086// CHECK: @_QPtest_real42087// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanf({{%[A-Za-z0-9._]+}}) : (f32) -> f322088 2089// CHECK: @_QPtest_real82090// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tan({{%[A-Za-z0-9._]+}}) : (f64) -> f642091 2092func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 {2093  %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"}2094  %1 = fir.load %arg0 : !fir.ref<f32>2095  %2 = fir.call @tanf(%1) : (f32) -> f322096  fir.store %2 to %0 : !fir.ref<f32>2097  %3 = fir.load %0 : !fir.ref<f32>2098  return %3 : f322099}2100func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 {2101  %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"}2102  %1 = fir.load %arg0 : !fir.ref<f64>2103  %2 = fir.call @tan(%1) : (f64) -> f642104  fir.store %2 to %0 : !fir.ref<f64>2105  %3 = fir.load %0 : !fir.ref<f64>2106  return %3 : f642107}2108func.func private @tanf(f32) -> f322109func.func private @tan(f64) -> f642110