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