1// RUN: split-file %s %t 2// TODO: verify that Fast-Math Flags and 'strictfp' are properly set. 3 4//--- abs_fast.fir 5// RUN: fir-opt %t/abs_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/abs_fast.fir 6// CHECK: @_QPtest_real4 7// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f32) -> f32 8 9// CHECK: @_QPtest_real8 10// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f64) -> f64 11 12// CHECK: @_QPtest_real16 13// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f128) -> f128 14 15// CHECK: @_QPtest_complex4 16// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypotf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 17 18// CHECK: @_QPtest_complex8 19// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypot({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 20 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 : f32 25 fir.store %2 to %0 : !fir.ref<f32> 26 %3 = fir.load %0 : !fir.ref<f32> 27 return %3 : f32 28} 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 : f64 33 fir.store %2 to %0 : !fir.ref<f64> 34 %3 = fir.load %0 : !fir.ref<f64> 35 return %3 : f64 36} 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 : f128 41 fir.store %2 to %0 : !fir.ref<f128> 42 %3 = fir.load %0 : !fir.ref<f128> 43 return %3 : f128 44} 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>) -> f32 49 %3 = fir.extract_value %1, [1 : index] : (complex<f32>) -> f32 50 %4 = fir.call @hypotf(%2, %3) : (f32, f32) -> f32 51 %cst = arith.constant 0.000000e+00 : f32 52 %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>) -> f64 63 %3 = fir.extract_value %1, [1 : index] : (complex<f64>) -> f64 64 %4 = fir.call @hypot(%2, %3) : (f64, f64) -> f64 65 %cst = arith.constant 0.000000e+00 : f64 66 %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) -> f32 74func.func private @hypot(f64, f64) -> f64 75 76//--- abs_relaxed.fir 77// RUN: fir-opt %t/abs_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/abs_relaxed.fir 78// CHECK: @_QPtest_real4 79// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f32) -> f32 80 81// CHECK: @_QPtest_real8 82// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f64) -> f64 83 84// CHECK: @_QPtest_real16 85// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.fabs({{%[A-Za-z0-9._]+}}) : (f128) -> f128 86 87// CHECK: @_QPtest_complex4 88// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypotf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 89 90// CHECK: @_QPtest_complex8 91// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypot({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 92 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 : f32 97 fir.store %2 to %0 : !fir.ref<f32> 98 %3 = fir.load %0 : !fir.ref<f32> 99 return %3 : f32 100} 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 : f64 105 fir.store %2 to %0 : !fir.ref<f64> 106 %3 = fir.load %0 : !fir.ref<f64> 107 return %3 : f64 108} 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 : f128 113 fir.store %2 to %0 : !fir.ref<f128> 114 %3 = fir.load %0 : !fir.ref<f128> 115 return %3 : f128 116} 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>) -> f32 121 %3 = fir.extract_value %1, [1 : index] : (complex<f32>) -> f32 122 %4 = fir.call @hypotf(%2, %3) : (f32, f32) -> f32 123 %cst = arith.constant 0.000000e+00 : f32 124 %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>) -> f64 135 %3 = fir.extract_value %1, [1 : index] : (complex<f64>) -> f64 136 %4 = fir.call @hypot(%2, %3) : (f64, f64) -> f64 137 %cst = arith.constant 0.000000e+00 : f64 138 %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) -> f32 146func.func private @hypot(f64, f64) -> f64 147 148//--- abs_precise.fir 149// RUN: fir-opt %t/abs_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/abs_precise.fir 150// CHECK: @_QPtest_real4 151// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @fabsf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 152 153// CHECK: @_QPtest_real8 154// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @fabs({{%[A-Za-z0-9._]+}}) : (f64) -> f64 155 156// CHECK: @_QPtest_real16 157// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.fabs.f128({{%[A-Za-z0-9._]+}}) : (f128) -> f128 158 159// CHECK: @_QPtest_complex4 160// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypotf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 161 162// CHECK: @_QPtest_complex8 163// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @hypot({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 164 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) -> f32 169 fir.store %2 to %0 : !fir.ref<f32> 170 %3 = fir.load %0 : !fir.ref<f32> 171 return %3 : f32 172} 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) -> f64 177 fir.store %2 to %0 : !fir.ref<f64> 178 %3 = fir.load %0 : !fir.ref<f64> 179 return %3 : f64 180} 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) -> f128 185 fir.store %2 to %0 : !fir.ref<f128> 186 %3 = fir.load %0 : !fir.ref<f128> 187 return %3 : f128 188} 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>) -> f32 193 %3 = fir.extract_value %1, [1 : index] : (complex<f32>) -> f32 194 %4 = fir.call @hypotf(%2, %3) : (f32, f32) -> f32 195 %cst = arith.constant 0.000000e+00 : f32 196 %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>) -> f64 207 %3 = fir.extract_value %1, [1 : index] : (complex<f64>) -> f64 208 %4 = fir.call @hypot(%2, %3) : (f64, f64) -> f64 209 %cst = arith.constant 0.000000e+00 : f64 210 %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) -> f32 218func.func private @fabs(f64) -> f64 219func.func private @llvm.fabs.f128(f128) -> f128 220func.func private @hypotf(f32, f32) -> f32 221func.func private @hypot(f64, f64) -> f64 222 223//--- aint_fast.fir 224// RUN: fir-opt %t/aint_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/aint_fast.fir 225// CHECK: @_QPtest_real4 226// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f32({{%[A-Za-z0-9._]+}}) : (f32) -> f32 227 228// CHECK: @_QPtest_real8 229// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f64({{%[A-Za-z0-9._]+}}) : (f64) -> f64 230 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) -> f32 235 fir.store %2 to %0 : !fir.ref<f32> 236 %3 = fir.load %0 : !fir.ref<f32> 237 return %3 : f32 238} 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) -> f64 243 fir.store %2 to %0 : !fir.ref<f64> 244 %3 = fir.load %0 : !fir.ref<f64> 245 return %3 : f64 246} 247func.func private @llvm.trunc.f32(f32) -> f32 248func.func private @llvm.trunc.f64(f64) -> f64 249 250//--- aint_relaxed.fir 251// RUN: fir-opt %t/aint_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/aint_relaxed.fir 252// CHECK: @_QPtest_real4 253// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f32({{%[A-Za-z0-9._]+}}) : (f32) -> f32 254 255// CHECK: @_QPtest_real8 256// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f64({{%[A-Za-z0-9._]+}}) : (f64) -> f64 257 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) -> f32 262 fir.store %2 to %0 : !fir.ref<f32> 263 %3 = fir.load %0 : !fir.ref<f32> 264 return %3 : f32 265} 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) -> f64 270 fir.store %2 to %0 : !fir.ref<f64> 271 %3 = fir.load %0 : !fir.ref<f64> 272 return %3 : f64 273} 274func.func private @llvm.trunc.f32(f32) -> f32 275func.func private @llvm.trunc.f64(f64) -> f64 276 277//--- aint_precise.fir 278// RUN: fir-opt %t/aint_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/aint_precise.fir 279// CHECK: @_QPtest_real4 280// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f32({{%[A-Za-z0-9._]+}}) : (f32) -> f32 281 282// CHECK: @_QPtest_real8 283// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.trunc.f64({{%[A-Za-z0-9._]+}}) : (f64) -> f64 284 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) -> f32 289 fir.store %2 to %0 : !fir.ref<f32> 290 %3 = fir.load %0 : !fir.ref<f32> 291 return %3 : f32 292} 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) -> f64 297 fir.store %2 to %0 : !fir.ref<f64> 298 %3 = fir.load %0 : !fir.ref<f64> 299 return %3 : f64 300} 301func.func private @llvm.trunc.f32(f32) -> f32 302func.func private @llvm.trunc.f64(f64) -> f64 303 304//--- anint_fast.fir 305// RUN: fir-opt %t/anint_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/anint_fast.fir 306// CHECK: @_QPtest_real4 307// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.round({{%[A-Za-z0-9._]+}}) : (f32) -> f32 308 309// CHECK: @_QPtest_real8 310// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.round({{%[A-Za-z0-9._]+}}) : (f64) -> f64 311 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) -> f32 316 fir.store %2 to %0 : !fir.ref<f32> 317 %3 = fir.load %0 : !fir.ref<f32> 318 return %3 : f32 319} 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) -> f64 324 fir.store %2 to %0 : !fir.ref<f64> 325 %3 = fir.load %0 : !fir.ref<f64> 326 return %3 : f64 327} 328 329//--- anint_relaxed.fir 330// RUN: fir-opt %t/anint_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/anint_relaxed.fir 331// CHECK: @_QPtest_real4 332// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.round({{%[A-Za-z0-9._]+}}) : (f32) -> f32 333 334// CHECK: @_QPtest_real8 335// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.round({{%[A-Za-z0-9._]+}}) : (f64) -> f64 336 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) -> f32 341 fir.store %2 to %0 : !fir.ref<f32> 342 %3 = fir.load %0 : !fir.ref<f32> 343 return %3 : f32 344} 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) -> f64 349 fir.store %2 to %0 : !fir.ref<f64> 350 %3 = fir.load %0 : !fir.ref<f64> 351 return %3 : f64 352} 353 354//--- anint_precise.fir 355// RUN: fir-opt %t/anint_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/anint_precise.fir 356// CHECK: @_QPtest_real4 357// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.round.f32({{%[A-Za-z0-9._]+}}) : (f32) -> f32 358 359// CHECK: @_QPtest_real8 360// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.round.f64({{%[A-Za-z0-9._]+}}) : (f64) -> f64 361 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) -> f32 366 fir.store %2 to %0 : !fir.ref<f32> 367 %3 = fir.load %0 : !fir.ref<f32> 368 return %3 : f32 369} 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) -> f64 374 fir.store %2 to %0 : !fir.ref<f64> 375 %3 = fir.load %0 : !fir.ref<f64> 376 return %3 : f64 377} 378func.func private @llvm.round.f32(f32) -> f32 379func.func private @llvm.round.f64(f64) -> f64 380 381//--- atan_fast.fir 382// RUN: fir-opt %t/atan_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan_fast.fir 383// CHECK: @_QPtest_real4 384// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atanf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 385 386// CHECK: @_QPtest_real8 387// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan({{%[A-Za-z0-9._]+}}) : (f64) -> f64 388 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.atan %1 : f32 393 fir.store %2 to %0 : !fir.ref<f32> 394 %3 = fir.load %0 : !fir.ref<f32> 395 return %3 : f32 396} 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.atan %1 : f64 401 fir.store %2 to %0 : !fir.ref<f64> 402 %3 = fir.load %0 : !fir.ref<f64> 403 return %3 : f64 404} 405 406//--- atan_relaxed.fir 407// RUN: fir-opt %t/atan_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan_relaxed.fir 408// CHECK: @_QPtest_real4 409// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atanf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 410 411// CHECK: @_QPtest_real8 412// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan({{%[A-Za-z0-9._]+}}) : (f64) -> f64 413 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.atan %1 : f32 418 fir.store %2 to %0 : !fir.ref<f32> 419 %3 = fir.load %0 : !fir.ref<f32> 420 return %3 : f32 421} 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.atan %1 : f64 426 fir.store %2 to %0 : !fir.ref<f64> 427 %3 = fir.load %0 : !fir.ref<f64> 428 return %3 : f64 429} 430 431//--- atan_precise.fir 432// RUN: fir-opt %t/atan_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan_precise.fir 433// CHECK: @_QPtest_real4 434// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atanf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 435 436// CHECK: @_QPtest_real8 437// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan({{%[A-Za-z0-9._]+}}) : (f64) -> f64 438 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 @atanf(%1) : (f32) -> f32 443 fir.store %2 to %0 : !fir.ref<f32> 444 %3 = fir.load %0 : !fir.ref<f32> 445 return %3 : f32 446} 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 @atan(%1) : (f64) -> f64 451 fir.store %2 to %0 : !fir.ref<f64> 452 %3 = fir.load %0 : !fir.ref<f64> 453 return %3 : f64 454} 455func.func private @atanf(f32) -> f32 456func.func private @atan(f64) -> f64 457 458//--- atan2_fast.fir 459// RUN: fir-opt %t/atan2_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan2_fast.fir 460// CHECK: @_QPtest_real4 461// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan2f({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 462 463// CHECK: @_QPtest_real8 464// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan2({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 465 466func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> 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 = fir.load %arg1 : !fir.ref<f32> 470 %3 = math.atan2 %1, %2 : f32 471 fir.store %3 to %0 : !fir.ref<f32> 472 %4 = fir.load %0 : !fir.ref<f32> 473 return %4 : f32 474} 475func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 { 476 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 477 %1 = fir.load %arg0 : !fir.ref<f64> 478 %2 = fir.load %arg1 : !fir.ref<f64> 479 %3 = math.atan2 %1, %2 : f64 480 fir.store %3 to %0 : !fir.ref<f64> 481 %4 = fir.load %0 : !fir.ref<f64> 482 return %4 : f64 483} 484 485//--- atan2_relaxed.fir 486// RUN: fir-opt %t/atan2_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan2_relaxed.fir 487// CHECK: @_QPtest_real4 488// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan2f({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 489 490// CHECK: @_QPtest_real8 491// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan2({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 492 493func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 { 494 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 495 %1 = fir.load %arg0 : !fir.ref<f32> 496 %2 = fir.load %arg1 : !fir.ref<f32> 497 %3 = math.atan2 %1, %2 : f32 498 fir.store %3 to %0 : !fir.ref<f32> 499 %4 = fir.load %0 : !fir.ref<f32> 500 return %4 : f32 501} 502func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 { 503 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 504 %1 = fir.load %arg0 : !fir.ref<f64> 505 %2 = fir.load %arg1 : !fir.ref<f64> 506 %3 = math.atan2 %1, %2 : f64 507 fir.store %3 to %0 : !fir.ref<f64> 508 %4 = fir.load %0 : !fir.ref<f64> 509 return %4 : f64 510} 511 512//--- atan2_precise.fir 513// RUN: fir-opt %t/atan2_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/atan2_precise.fir 514// CHECK: @_QPtest_real4 515// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan2f({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 516 517// CHECK: @_QPtest_real8 518// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @atan2({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 519 520func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 { 521 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 522 %1 = fir.load %arg0 : !fir.ref<f32> 523 %2 = fir.load %arg1 : !fir.ref<f32> 524 %3 = fir.call @atan2f(%1, %2) : (f32, f32) -> f32 525 fir.store %3 to %0 : !fir.ref<f32> 526 %4 = fir.load %0 : !fir.ref<f32> 527 return %4 : f32 528} 529func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 { 530 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 531 %1 = fir.load %arg0 : !fir.ref<f64> 532 %2 = fir.load %arg1 : !fir.ref<f64> 533 %3 = fir.call @atan2(%1, %2) : (f64, f64) -> f64 534 fir.store %3 to %0 : !fir.ref<f64> 535 %4 = fir.load %0 : !fir.ref<f64> 536 return %4 : f64 537} 538func.func private @atan2f(f32, f32) -> f32 539func.func private @atan2(f64, f64) -> f64 540 541//--- ceiling_fast.fir 542// RUN: fir-opt %t/ceiling_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/ceiling_fast.fir 543// CHECK: @_QPtest_real4 544// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.ceil({{%[A-Za-z0-9._]+}}) : (f32) -> f32 545 546// CHECK: @_QPtest_real8 547// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.ceil({{%[A-Za-z0-9._]+}}) : (f64) -> f64 548 549func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 550 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 551 %1 = fir.load %arg0 : !fir.ref<f32> 552 %2 = math.ceil %1 : f32 553 %3 = fir.convert %2 : (f32) -> i32 554 %4 = fir.convert %3 : (i32) -> f32 555 fir.store %4 to %0 : !fir.ref<f32> 556 %5 = fir.load %0 : !fir.ref<f32> 557 return %5 : f32 558} 559func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 560 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 561 %1 = fir.load %arg0 : !fir.ref<f64> 562 %2 = math.ceil %1 : f64 563 %3 = fir.convert %2 : (f64) -> i32 564 %4 = fir.convert %3 : (i32) -> f64 565 fir.store %4 to %0 : !fir.ref<f64> 566 %5 = fir.load %0 : !fir.ref<f64> 567 return %5 : f64 568} 569 570//--- ceiling_relaxed.fir 571// RUN: fir-opt %t/ceiling_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/ceiling_relaxed.fir 572// CHECK: @_QPtest_real4 573// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.ceil({{%[A-Za-z0-9._]+}}) : (f32) -> f32 574 575// CHECK: @_QPtest_real8 576// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.ceil({{%[A-Za-z0-9._]+}}) : (f64) -> f64 577 578func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 579 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 580 %1 = fir.load %arg0 : !fir.ref<f32> 581 %2 = math.ceil %1 : f32 582 %3 = fir.convert %2 : (f32) -> i32 583 %4 = fir.convert %3 : (i32) -> f32 584 fir.store %4 to %0 : !fir.ref<f32> 585 %5 = fir.load %0 : !fir.ref<f32> 586 return %5 : f32 587} 588func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 589 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 590 %1 = fir.load %arg0 : !fir.ref<f64> 591 %2 = math.ceil %1 : f64 592 %3 = fir.convert %2 : (f64) -> i32 593 %4 = fir.convert %3 : (i32) -> f64 594 fir.store %4 to %0 : !fir.ref<f64> 595 %5 = fir.load %0 : !fir.ref<f64> 596 return %5 : f64 597} 598 599//--- ceiling_precise.fir 600// RUN: fir-opt %t/ceiling_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/ceiling_precise.fir 601// CHECK: @_QPtest_real4 602// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @ceilf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 603 604// CHECK: @_QPtest_real8 605// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @ceil({{%[A-Za-z0-9._]+}}) : (f64) -> f64 606 607func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 608 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 609 %1 = fir.load %arg0 : !fir.ref<f32> 610 %2 = fir.call @ceilf(%1) : (f32) -> f32 611 %3 = fir.convert %2 : (f32) -> i32 612 %4 = fir.convert %3 : (i32) -> f32 613 fir.store %4 to %0 : !fir.ref<f32> 614 %5 = fir.load %0 : !fir.ref<f32> 615 return %5 : f32 616} 617func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 618 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 619 %1 = fir.load %arg0 : !fir.ref<f64> 620 %2 = fir.call @ceil(%1) : (f64) -> f64 621 %3 = fir.convert %2 : (f64) -> i32 622 %4 = fir.convert %3 : (i32) -> f64 623 fir.store %4 to %0 : !fir.ref<f64> 624 %5 = fir.load %0 : !fir.ref<f64> 625 return %5 : f64 626} 627func.func private @ceilf(f32) -> f32 628func.func private @ceil(f64) -> f64 629 630//--- cos_fast.fir 631// RUN: fir-opt %t/cos_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cos_fast.fir 632// CHECK: @_QPtest_real4 633// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.cos({{%[A-Za-z0-9._]+}}) : (f32) -> f32 634 635// CHECK: @_QPtest_real8 636// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.cos({{%[A-Za-z0-9._]+}}) : (f64) -> f64 637 638func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 639 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 640 %1 = fir.load %arg0 : !fir.ref<f32> 641 %2 = math.cos %1 : f32 642 fir.store %2 to %0 : !fir.ref<f32> 643 %3 = fir.load %0 : !fir.ref<f32> 644 return %3 : f32 645} 646func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 647 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 648 %1 = fir.load %arg0 : !fir.ref<f64> 649 %2 = math.cos %1 : f64 650 fir.store %2 to %0 : !fir.ref<f64> 651 %3 = fir.load %0 : !fir.ref<f64> 652 return %3 : f64 653} 654 655//--- cos_relaxed.fir 656// RUN: fir-opt %t/cos_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cos_relaxed.fir 657// CHECK: @_QPtest_real4 658// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.cos({{%[A-Za-z0-9._]+}}) : (f32) -> f32 659 660// CHECK: @_QPtest_real8 661// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.cos({{%[A-Za-z0-9._]+}}) : (f64) -> f64 662 663func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 664 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 665 %1 = fir.load %arg0 : !fir.ref<f32> 666 %2 = math.cos %1 : f32 667 fir.store %2 to %0 : !fir.ref<f32> 668 %3 = fir.load %0 : !fir.ref<f32> 669 return %3 : f32 670} 671func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 672 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 673 %1 = fir.load %arg0 : !fir.ref<f64> 674 %2 = math.cos %1 : f64 675 fir.store %2 to %0 : !fir.ref<f64> 676 %3 = fir.load %0 : !fir.ref<f64> 677 return %3 : f64 678} 679 680//--- cos_precise.fir 681// RUN: fir-opt %t/cos_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cos_precise.fir 682// CHECK: @_QPtest_real4 683// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @cosf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 684 685// CHECK: @_QPtest_real8 686// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @cos({{%[A-Za-z0-9._]+}}) : (f64) -> f64 687 688func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 689 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 690 %1 = fir.load %arg0 : !fir.ref<f32> 691 %2 = fir.call @cosf(%1) : (f32) -> f32 692 fir.store %2 to %0 : !fir.ref<f32> 693 %3 = fir.load %0 : !fir.ref<f32> 694 return %3 : f32 695} 696func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 697 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 698 %1 = fir.load %arg0 : !fir.ref<f64> 699 %2 = fir.call @cos(%1) : (f64) -> f64 700 fir.store %2 to %0 : !fir.ref<f64> 701 %3 = fir.load %0 : !fir.ref<f64> 702 return %3 : f64 703} 704func.func private @cosf(f32) -> f32 705func.func private @cos(f64) -> f64 706 707//--- cosh_fast.fir 708// RUN: fir-opt %t/cosh_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cosh_fast.fir 709// CHECK: @_QPtest_real4 710// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @coshf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 711 712// CHECK: @_QPtest_real8 713// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @cosh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 714 715func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 716 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 717 %1 = fir.load %arg0 : !fir.ref<f32> 718 %2 = fir.call @coshf(%1) : (f32) -> f32 719 fir.store %2 to %0 : !fir.ref<f32> 720 %3 = fir.load %0 : !fir.ref<f32> 721 return %3 : f32 722} 723func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 724 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 725 %1 = fir.load %arg0 : !fir.ref<f64> 726 %2 = fir.call @cosh(%1) : (f64) -> f64 727 fir.store %2 to %0 : !fir.ref<f64> 728 %3 = fir.load %0 : !fir.ref<f64> 729 return %3 : f64 730} 731func.func private @coshf(f32) -> f32 732func.func private @cosh(f64) -> f64 733 734//--- cosh_relaxed.fir 735// RUN: fir-opt %t/cosh_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cosh_relaxed.fir 736// CHECK: @_QPtest_real4 737// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @coshf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 738 739// CHECK: @_QPtest_real8 740// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @cosh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 741 742func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 743 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 744 %1 = fir.load %arg0 : !fir.ref<f32> 745 %2 = fir.call @coshf(%1) : (f32) -> f32 746 fir.store %2 to %0 : !fir.ref<f32> 747 %3 = fir.load %0 : !fir.ref<f32> 748 return %3 : f32 749} 750func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 751 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 752 %1 = fir.load %arg0 : !fir.ref<f64> 753 %2 = fir.call @cosh(%1) : (f64) -> f64 754 fir.store %2 to %0 : !fir.ref<f64> 755 %3 = fir.load %0 : !fir.ref<f64> 756 return %3 : f64 757} 758func.func private @coshf(f32) -> f32 759func.func private @cosh(f64) -> f64 760 761//--- cosh_precise.fir 762// RUN: fir-opt %t/cosh_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/cosh_precise.fir 763// CHECK: @_QPtest_real4 764// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @coshf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 765 766// CHECK: @_QPtest_real8 767// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @cosh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 768 769func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 770 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 771 %1 = fir.load %arg0 : !fir.ref<f32> 772 %2 = fir.call @coshf(%1) : (f32) -> f32 773 fir.store %2 to %0 : !fir.ref<f32> 774 %3 = fir.load %0 : !fir.ref<f32> 775 return %3 : f32 776} 777func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 778 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 779 %1 = fir.load %arg0 : !fir.ref<f64> 780 %2 = fir.call @cosh(%1) : (f64) -> f64 781 fir.store %2 to %0 : !fir.ref<f64> 782 %3 = fir.load %0 : !fir.ref<f64> 783 return %3 : f64 784} 785func.func private @coshf(f32) -> f32 786func.func private @cosh(f64) -> f64 787 788//--- erf_fast.fir 789// RUN: fir-opt %t/erf_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/erf_fast.fir 790// CHECK: @_QPtest_real4 791// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erff({{%[A-Za-z0-9._]+}}) : (f32) -> f32 792 793// CHECK: @_QPtest_real8 794// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erf({{%[A-Za-z0-9._]+}}) : (f64) -> f64 795 796func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 797 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 798 %1 = fir.load %arg0 : !fir.ref<f32> 799 %2 = math.erf %1 : f32 800 fir.store %2 to %0 : !fir.ref<f32> 801 %3 = fir.load %0 : !fir.ref<f32> 802 return %3 : f32 803} 804func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 805 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 806 %1 = fir.load %arg0 : !fir.ref<f64> 807 %2 = math.erf %1 : f64 808 fir.store %2 to %0 : !fir.ref<f64> 809 %3 = fir.load %0 : !fir.ref<f64> 810 return %3 : f64 811} 812 813//--- erf_relaxed.fir 814// RUN: fir-opt %t/erf_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/erf_relaxed.fir 815// CHECK: @_QPtest_real4 816// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erff({{%[A-Za-z0-9._]+}}) : (f32) -> f32 817 818// CHECK: @_QPtest_real8 819// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erf({{%[A-Za-z0-9._]+}}) : (f64) -> f64 820 821func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 822 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 823 %1 = fir.load %arg0 : !fir.ref<f32> 824 %2 = math.erf %1 : f32 825 fir.store %2 to %0 : !fir.ref<f32> 826 %3 = fir.load %0 : !fir.ref<f32> 827 return %3 : f32 828} 829func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 830 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 831 %1 = fir.load %arg0 : !fir.ref<f64> 832 %2 = math.erf %1 : f64 833 fir.store %2 to %0 : !fir.ref<f64> 834 %3 = fir.load %0 : !fir.ref<f64> 835 return %3 : f64 836} 837 838//--- erf_precise.fir 839// RUN: fir-opt %t/erf_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/erf_precise.fir 840// CHECK: @_QPtest_real4 841// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erff({{%[A-Za-z0-9._]+}}) : (f32) -> f32 842 843// CHECK: @_QPtest_real8 844// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @erf({{%[A-Za-z0-9._]+}}) : (f64) -> f64 845 846func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 847 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 848 %1 = fir.load %arg0 : !fir.ref<f32> 849 %2 = fir.call @erff(%1) : (f32) -> f32 850 fir.store %2 to %0 : !fir.ref<f32> 851 %3 = fir.load %0 : !fir.ref<f32> 852 return %3 : f32 853} 854func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 855 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 856 %1 = fir.load %arg0 : !fir.ref<f64> 857 %2 = fir.call @erf(%1) : (f64) -> f64 858 fir.store %2 to %0 : !fir.ref<f64> 859 %3 = fir.load %0 : !fir.ref<f64> 860 return %3 : f64 861} 862func.func private @erff(f32) -> f32 863func.func private @erf(f64) -> f64 864 865//--- exp_fast.fir 866// RUN: fir-opt %t/exp_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exp_fast.fir 867// CHECK: @_QPtest_real4 868// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.exp({{%[A-Za-z0-9._]+}}) : (f32) -> f32 869 870// CHECK: @_QPtest_real8 871// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.exp({{%[A-Za-z0-9._]+}}) : (f64) -> f64 872 873func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 874 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 875 %1 = fir.load %arg0 : !fir.ref<f32> 876 %2 = math.exp %1 : f32 877 fir.store %2 to %0 : !fir.ref<f32> 878 %3 = fir.load %0 : !fir.ref<f32> 879 return %3 : f32 880} 881func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 882 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 883 %1 = fir.load %arg0 : !fir.ref<f64> 884 %2 = math.exp %1 : f64 885 fir.store %2 to %0 : !fir.ref<f64> 886 %3 = fir.load %0 : !fir.ref<f64> 887 return %3 : f64 888} 889 890//--- exp_relaxed.fir 891// RUN: fir-opt %t/exp_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exp_relaxed.fir 892// CHECK: @_QPtest_real4 893// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.exp({{%[A-Za-z0-9._]+}}) : (f32) -> f32 894 895// CHECK: @_QPtest_real8 896// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.exp({{%[A-Za-z0-9._]+}}) : (f64) -> f64 897 898func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 899 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 900 %1 = fir.load %arg0 : !fir.ref<f32> 901 %2 = math.exp %1 : f32 902 fir.store %2 to %0 : !fir.ref<f32> 903 %3 = fir.load %0 : !fir.ref<f32> 904 return %3 : f32 905} 906func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 907 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 908 %1 = fir.load %arg0 : !fir.ref<f64> 909 %2 = math.exp %1 : f64 910 fir.store %2 to %0 : !fir.ref<f64> 911 %3 = fir.load %0 : !fir.ref<f64> 912 return %3 : f64 913} 914 915//--- exp_precise.fir 916// RUN: fir-opt %t/exp_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exp_precise.fir 917// CHECK: @_QPtest_real4 918// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @expf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 919 920// CHECK: @_QPtest_real8 921// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @exp({{%[A-Za-z0-9._]+}}) : (f64) -> f64 922 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 @expf(%1) : (f32) -> f32 927 fir.store %2 to %0 : !fir.ref<f32> 928 %3 = fir.load %0 : !fir.ref<f32> 929 return %3 : f32 930} 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 @exp(%1) : (f64) -> f64 935 fir.store %2 to %0 : !fir.ref<f64> 936 %3 = fir.load %0 : !fir.ref<f64> 937 return %3 : f64 938} 939func.func private @expf(f32) -> f32 940func.func private @exp(f64) -> f64 941 942//--- floor_fast.fir 943// RUN: fir-opt %t/floor_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/floor_fast.fir 944// CHECK: @_QPtest_real4 945// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.floor({{%[A-Za-z0-9._]+}}) : (f32) -> f32 946 947// CHECK: @_QPtest_real8 948// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.floor({{%[A-Za-z0-9._]+}}) : (f64) -> f64 949 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.floor %1 : f32 954 %3 = fir.convert %2 : (f32) -> i32 955 %4 = fir.convert %3 : (i32) -> f32 956 fir.store %4 to %0 : !fir.ref<f32> 957 %5 = fir.load %0 : !fir.ref<f32> 958 return %5 : f32 959} 960func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 961 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 962 %1 = fir.load %arg0 : !fir.ref<f64> 963 %2 = math.floor %1 : f64 964 %3 = fir.convert %2 : (f64) -> i32 965 %4 = fir.convert %3 : (i32) -> f64 966 fir.store %4 to %0 : !fir.ref<f64> 967 %5 = fir.load %0 : !fir.ref<f64> 968 return %5 : f64 969} 970 971//--- floor_relaxed.fir 972// RUN: fir-opt %t/floor_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/floor_relaxed.fir 973// CHECK: @_QPtest_real4 974// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.floor({{%[A-Za-z0-9._]+}}) : (f32) -> f32 975 976// CHECK: @_QPtest_real8 977// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.floor({{%[A-Za-z0-9._]+}}) : (f64) -> f64 978 979func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 980 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 981 %1 = fir.load %arg0 : !fir.ref<f32> 982 %2 = math.floor %1 : f32 983 %3 = fir.convert %2 : (f32) -> i32 984 %4 = fir.convert %3 : (i32) -> f32 985 fir.store %4 to %0 : !fir.ref<f32> 986 %5 = fir.load %0 : !fir.ref<f32> 987 return %5 : f32 988} 989func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 990 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 991 %1 = fir.load %arg0 : !fir.ref<f64> 992 %2 = math.floor %1 : f64 993 %3 = fir.convert %2 : (f64) -> i32 994 %4 = fir.convert %3 : (i32) -> f64 995 fir.store %4 to %0 : !fir.ref<f64> 996 %5 = fir.load %0 : !fir.ref<f64> 997 return %5 : f64 998} 999 1000//--- floor_precise.fir 1001// RUN: fir-opt %t/floor_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/floor_precise.fir 1002// CHECK: @_QPtest_real4 1003// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @floorf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1004 1005// CHECK: @_QPtest_real8 1006// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @floor({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1007 1008func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1009 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1010 %1 = fir.load %arg0 : !fir.ref<f32> 1011 %2 = fir.call @floorf(%1) : (f32) -> f32 1012 %3 = fir.convert %2 : (f32) -> i32 1013 %4 = fir.convert %3 : (i32) -> f32 1014 fir.store %4 to %0 : !fir.ref<f32> 1015 %5 = fir.load %0 : !fir.ref<f32> 1016 return %5 : f32 1017} 1018func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1019 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1020 %1 = fir.load %arg0 : !fir.ref<f64> 1021 %2 = fir.call @floor(%1) : (f64) -> f64 1022 %3 = fir.convert %2 : (f64) -> i32 1023 %4 = fir.convert %3 : (i32) -> f64 1024 fir.store %4 to %0 : !fir.ref<f64> 1025 %5 = fir.load %0 : !fir.ref<f64> 1026 return %5 : f64 1027} 1028func.func private @floorf(f32) -> f32 1029func.func private @floor(f64) -> f64 1030 1031//--- log_fast.fir 1032// RUN: fir-opt %t/log_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log_fast.fir 1033// CHECK: @_QPtest_real4 1034// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1035 1036// CHECK: @_QPtest_real8 1037// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1038 1039func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1040 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1041 %1 = fir.load %arg0 : !fir.ref<f32> 1042 %2 = math.log %1 : f32 1043 fir.store %2 to %0 : !fir.ref<f32> 1044 %3 = fir.load %0 : !fir.ref<f32> 1045 return %3 : f32 1046} 1047func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1048 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1049 %1 = fir.load %arg0 : !fir.ref<f64> 1050 %2 = math.log %1 : f64 1051 fir.store %2 to %0 : !fir.ref<f64> 1052 %3 = fir.load %0 : !fir.ref<f64> 1053 return %3 : f64 1054} 1055 1056//--- log_relaxed.fir 1057// RUN: fir-opt %t/log_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log_relaxed.fir 1058// CHECK: @_QPtest_real4 1059// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1060 1061// CHECK: @_QPtest_real8 1062// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1063 1064func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1065 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1066 %1 = fir.load %arg0 : !fir.ref<f32> 1067 %2 = math.log %1 : f32 1068 fir.store %2 to %0 : !fir.ref<f32> 1069 %3 = fir.load %0 : !fir.ref<f32> 1070 return %3 : f32 1071} 1072func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1073 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1074 %1 = fir.load %arg0 : !fir.ref<f64> 1075 %2 = math.log %1 : f64 1076 fir.store %2 to %0 : !fir.ref<f64> 1077 %3 = fir.load %0 : !fir.ref<f64> 1078 return %3 : f64 1079} 1080 1081//--- log_precise.fir 1082// RUN: fir-opt %t/log_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log_precise.fir 1083// CHECK: @_QPtest_real4 1084// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @logf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1085 1086// CHECK: @_QPtest_real8 1087// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @log({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1088 1089func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1090 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1091 %1 = fir.load %arg0 : !fir.ref<f32> 1092 %2 = fir.call @logf(%1) : (f32) -> f32 1093 fir.store %2 to %0 : !fir.ref<f32> 1094 %3 = fir.load %0 : !fir.ref<f32> 1095 return %3 : f32 1096} 1097func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1098 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1099 %1 = fir.load %arg0 : !fir.ref<f64> 1100 %2 = fir.call @log(%1) : (f64) -> f64 1101 fir.store %2 to %0 : !fir.ref<f64> 1102 %3 = fir.load %0 : !fir.ref<f64> 1103 return %3 : f64 1104} 1105func.func private @logf(f32) -> f32 1106func.func private @log(f64) -> f64 1107 1108//--- log10_fast.fir 1109// RUN: fir-opt %t/log10_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log10_fast.fir 1110// CHECK: @_QPtest_real4 1111// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log10({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1112 1113// CHECK: @_QPtest_real8 1114// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log10({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1115 1116func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1117 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1118 %1 = fir.load %arg0 : !fir.ref<f32> 1119 %2 = math.log10 %1 : f32 1120 fir.store %2 to %0 : !fir.ref<f32> 1121 %3 = fir.load %0 : !fir.ref<f32> 1122 return %3 : f32 1123} 1124func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1125 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1126 %1 = fir.load %arg0 : !fir.ref<f64> 1127 %2 = math.log10 %1 : f64 1128 fir.store %2 to %0 : !fir.ref<f64> 1129 %3 = fir.load %0 : !fir.ref<f64> 1130 return %3 : f64 1131} 1132 1133//--- log10_relaxed.fir 1134// RUN: fir-opt %t/log10_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log10_relaxed.fir 1135// CHECK: @_QPtest_real4 1136// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log10({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1137 1138// CHECK: @_QPtest_real8 1139// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.log10({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1140 1141func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1142 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1143 %1 = fir.load %arg0 : !fir.ref<f32> 1144 %2 = math.log10 %1 : f32 1145 fir.store %2 to %0 : !fir.ref<f32> 1146 %3 = fir.load %0 : !fir.ref<f32> 1147 return %3 : f32 1148} 1149func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1150 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1151 %1 = fir.load %arg0 : !fir.ref<f64> 1152 %2 = math.log10 %1 : f64 1153 fir.store %2 to %0 : !fir.ref<f64> 1154 %3 = fir.load %0 : !fir.ref<f64> 1155 return %3 : f64 1156} 1157 1158//--- log10_precise.fir 1159// RUN: fir-opt %t/log10_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/log10_precise.fir 1160// CHECK: @_QPtest_real4 1161// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @log10f({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1162 1163// CHECK: @_QPtest_real8 1164// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @log10({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1165 1166func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1167 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1168 %1 = fir.load %arg0 : !fir.ref<f32> 1169 %2 = fir.call @log10f(%1) : (f32) -> f32 1170 fir.store %2 to %0 : !fir.ref<f32> 1171 %3 = fir.load %0 : !fir.ref<f32> 1172 return %3 : f32 1173} 1174func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1175 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1176 %1 = fir.load %arg0 : !fir.ref<f64> 1177 %2 = fir.call @log10(%1) : (f64) -> f64 1178 fir.store %2 to %0 : !fir.ref<f64> 1179 %3 = fir.load %0 : !fir.ref<f64> 1180 return %3 : f64 1181} 1182func.func private @log10f(f32) -> f32 1183func.func private @log10(f64) -> f64 1184 1185//--- nint_fast.fir 1186// RUN: fir-opt %t/nint_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/nint_fast.fir 1187// CHECK: @_QPtest_real4 1188// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i32 1189// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i64 1190 1191// CHECK: @_QPtest_real8 1192// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i32 1193// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i64 1194 1195func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1196 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1197 %1 = fir.load %arg0 : !fir.ref<f32> 1198 %2 = fir.call @llvm.lround.i32.f32(%1) : (f32) -> i32 1199 %3 = fir.convert %2 : (i32) -> i64 1200 %4 = fir.load %arg0 : !fir.ref<f32> 1201 %5 = fir.call @llvm.lround.i64.f32(%4) : (f32) -> i64 1202 %6 = arith.addi %3, %5 : i64 1203 %7 = fir.convert %6 : (i64) -> f32 1204 fir.store %7 to %0 : !fir.ref<f32> 1205 %8 = fir.load %0 : !fir.ref<f32> 1206 return %8 : f32 1207} 1208func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1209 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1210 %1 = fir.load %arg0 : !fir.ref<f64> 1211 %2 = fir.call @llvm.lround.i32.f64(%1) : (f64) -> i32 1212 %3 = fir.convert %2 : (i32) -> i64 1213 %4 = fir.load %arg0 : !fir.ref<f64> 1214 %5 = fir.call @llvm.lround.i64.f64(%4) : (f64) -> i64 1215 %6 = arith.addi %3, %5 : i64 1216 %7 = fir.convert %6 : (i64) -> f64 1217 fir.store %7 to %0 : !fir.ref<f64> 1218 %8 = fir.load %0 : !fir.ref<f64> 1219 return %8 : f64 1220} 1221func.func private @llvm.lround.i32.f32(f32) -> i32 1222func.func private @llvm.lround.i64.f32(f32) -> i64 1223func.func private @llvm.lround.i32.f64(f64) -> i32 1224func.func private @llvm.lround.i64.f64(f64) -> i64 1225 1226//--- nint_relaxed.fir 1227// RUN: fir-opt %t/nint_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/nint_relaxed.fir 1228// CHECK: @_QPtest_real4 1229// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i32 1230// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i64 1231 1232// CHECK: @_QPtest_real8 1233// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i32 1234// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i64 1235 1236func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1237 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1238 %1 = fir.load %arg0 : !fir.ref<f32> 1239 %2 = fir.call @llvm.lround.i32.f32(%1) : (f32) -> i32 1240 %3 = fir.convert %2 : (i32) -> i64 1241 %4 = fir.load %arg0 : !fir.ref<f32> 1242 %5 = fir.call @llvm.lround.i64.f32(%4) : (f32) -> i64 1243 %6 = arith.addi %3, %5 : i64 1244 %7 = fir.convert %6 : (i64) -> f32 1245 fir.store %7 to %0 : !fir.ref<f32> 1246 %8 = fir.load %0 : !fir.ref<f32> 1247 return %8 : f32 1248} 1249func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1250 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1251 %1 = fir.load %arg0 : !fir.ref<f64> 1252 %2 = fir.call @llvm.lround.i32.f64(%1) : (f64) -> i32 1253 %3 = fir.convert %2 : (i32) -> i64 1254 %4 = fir.load %arg0 : !fir.ref<f64> 1255 %5 = fir.call @llvm.lround.i64.f64(%4) : (f64) -> i64 1256 %6 = arith.addi %3, %5 : i64 1257 %7 = fir.convert %6 : (i64) -> f64 1258 fir.store %7 to %0 : !fir.ref<f64> 1259 %8 = fir.load %0 : !fir.ref<f64> 1260 return %8 : f64 1261} 1262func.func private @llvm.lround.i32.f32(f32) -> i32 1263func.func private @llvm.lround.i64.f32(f32) -> i64 1264func.func private @llvm.lround.i32.f64(f64) -> i32 1265func.func private @llvm.lround.i64.f64(f64) -> i64 1266 1267//--- nint_precise.fir 1268// RUN: fir-opt %t/nint_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/nint_precise.fir 1269// CHECK: @_QPtest_real4 1270// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i32 1271// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f32({{%[A-Za-z0-9._]+}}) : (f32) -> i64 1272 1273// CHECK: @_QPtest_real8 1274// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i32.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i32 1275// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.lround.i64.f64({{%[A-Za-z0-9._]+}}) : (f64) -> i64 1276 1277func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1278 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1279 %1 = fir.load %arg0 : !fir.ref<f32> 1280 %2 = fir.call @llvm.lround.i32.f32(%1) : (f32) -> i32 1281 %3 = fir.convert %2 : (i32) -> i64 1282 %4 = fir.load %arg0 : !fir.ref<f32> 1283 %5 = fir.call @llvm.lround.i64.f32(%4) : (f32) -> i64 1284 %6 = arith.addi %3, %5 : i64 1285 %7 = fir.convert %6 : (i64) -> f32 1286 fir.store %7 to %0 : !fir.ref<f32> 1287 %8 = fir.load %0 : !fir.ref<f32> 1288 return %8 : f32 1289} 1290func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1291 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1292 %1 = fir.load %arg0 : !fir.ref<f64> 1293 %2 = fir.call @llvm.lround.i32.f64(%1) : (f64) -> i32 1294 %3 = fir.convert %2 : (i32) -> i64 1295 %4 = fir.load %arg0 : !fir.ref<f64> 1296 %5 = fir.call @llvm.lround.i64.f64(%4) : (f64) -> i64 1297 %6 = arith.addi %3, %5 : i64 1298 %7 = fir.convert %6 : (i64) -> f64 1299 fir.store %7 to %0 : !fir.ref<f64> 1300 %8 = fir.load %0 : !fir.ref<f64> 1301 return %8 : f64 1302} 1303func.func private @llvm.lround.i32.f32(f32) -> i32 1304func.func private @llvm.lround.i64.f32(f32) -> i64 1305func.func private @llvm.lround.i32.f64(f64) -> i32 1306func.func private @llvm.lround.i64.f64(f64) -> i64 1307 1308//--- exponentiation_fast.fir 1309// RUN: fir-opt %t/exponentiation_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exponentiation_fast.fir 1310// CHECK: @_QPtest_real4 1311// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i32 1312// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f32, i32) -> f32 1313// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.pow({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 1314// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, i32) -> f32 1315 1316// CHECK: @_QPtest_real8 1317// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i32 1318// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f64, i32) -> f64 1319// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.pow({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 1320// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, i32) -> f64 1321 1322func.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 { 1323 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1324 %1 = fir.load %arg0 : !fir.ref<f32> 1325 %2 = fir.load %arg2 : !fir.ref<i16> 1326 %3 = fir.convert %2 : (i16) -> i32 1327 %4 = fir.call @llvm.powi.f32.i32(%1, %3) : (f32, i32) -> f32 1328 %5 = fir.load %arg0 : !fir.ref<f32> 1329 %6 = fir.load %arg1 : !fir.ref<f32> 1330 %7 = math.powf %5, %6 : f32 1331 %8 = arith.addf %4, %7 : f32 1332 %9 = fir.load %arg0 : !fir.ref<f32> 1333 %10 = fir.load %arg3 : !fir.ref<i32> 1334 %11 = fir.call @llvm.powi.f32.i32(%9, %10) : (f32, i32) -> f32 1335 %12 = arith.addf %8, %11 : f32 1336 fir.store %12 to %0 : !fir.ref<f32> 1337 %13 = fir.load %0 : !fir.ref<f32> 1338 return %13 : f32 1339} 1340func.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 { 1341 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1342 %1 = fir.load %arg0 : !fir.ref<f64> 1343 %2 = fir.load %arg2 : !fir.ref<i16> 1344 %3 = fir.convert %2 : (i16) -> i32 1345 %4 = fir.call @llvm.powi.f64.i32(%1, %3) : (f64, i32) -> f64 1346 %5 = fir.load %arg0 : !fir.ref<f64> 1347 %6 = fir.load %arg1 : !fir.ref<f64> 1348 %7 = math.powf %5, %6 : f64 1349 %8 = arith.addf %4, %7 : f64 1350 %9 = fir.load %arg0 : !fir.ref<f64> 1351 %10 = fir.load %arg3 : !fir.ref<i32> 1352 %11 = fir.call @llvm.powi.f64.i32(%9, %10) : (f64, i32) -> f64 1353 %12 = arith.addf %8, %11 : f64 1354 fir.store %12 to %0 : !fir.ref<f64> 1355 %13 = fir.load %0 : !fir.ref<f64> 1356 return %13 : f64 1357} 1358func.func private @llvm.powi.f32.i32(f32, i32) -> f32 1359func.func private @llvm.powi.f64.i32(f64, i32) -> f64 1360 1361//--- exponentiation_relaxed.fir 1362// RUN: fir-opt %t/exponentiation_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exponentiation_relaxed.fir 1363// CHECK: @_QPtest_real4 1364// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i32 1365// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f32, i32) -> f32 1366// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.pow({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 1367// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, i32) -> f32 1368 1369// CHECK: @_QPtest_real8 1370// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i32 1371// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f64, i32) -> f64 1372// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.pow({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 1373// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, i32) -> f64 1374 1375func.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 { 1376 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1377 %1 = fir.load %arg0 : !fir.ref<f32> 1378 %2 = fir.load %arg2 : !fir.ref<i16> 1379 %3 = fir.convert %2 : (i16) -> i32 1380 %4 = fir.call @llvm.powi.f32.i32(%1, %3) : (f32, i32) -> f32 1381 %5 = fir.load %arg0 : !fir.ref<f32> 1382 %6 = fir.load %arg1 : !fir.ref<f32> 1383 %7 = math.powf %5, %6 : f32 1384 %8 = arith.addf %4, %7 : f32 1385 %9 = fir.load %arg0 : !fir.ref<f32> 1386 %10 = fir.load %arg3 : !fir.ref<i32> 1387 %11 = fir.call @llvm.powi.f32.i32(%9, %10) : (f32, i32) -> f32 1388 %12 = arith.addf %8, %11 : f32 1389 fir.store %12 to %0 : !fir.ref<f32> 1390 %13 = fir.load %0 : !fir.ref<f32> 1391 return %13 : f32 1392} 1393func.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 { 1394 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1395 %1 = fir.load %arg0 : !fir.ref<f64> 1396 %2 = fir.load %arg2 : !fir.ref<i16> 1397 %3 = fir.convert %2 : (i16) -> i32 1398 %4 = fir.call @llvm.powi.f64.i32(%1, %3) : (f64, i32) -> f64 1399 %5 = fir.load %arg0 : !fir.ref<f64> 1400 %6 = fir.load %arg1 : !fir.ref<f64> 1401 %7 = math.powf %5, %6 : f64 1402 %8 = arith.addf %4, %7 : f64 1403 %9 = fir.load %arg0 : !fir.ref<f64> 1404 %10 = fir.load %arg3 : !fir.ref<i32> 1405 %11 = fir.call @llvm.powi.f64.i32(%9, %10) : (f64, i32) -> f64 1406 %12 = arith.addf %8, %11 : f64 1407 fir.store %12 to %0 : !fir.ref<f64> 1408 %13 = fir.load %0 : !fir.ref<f64> 1409 return %13 : f64 1410} 1411func.func private @llvm.powi.f32.i32(f32, i32) -> f32 1412func.func private @llvm.powi.f64.i32(f64, i32) -> f64 1413 1414//--- exponentiation_precise.fir 1415// RUN: fir-opt %t/exponentiation_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/exponentiation_precise.fir 1416// CHECK: @_QPtest_real4 1417// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i32 1418// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f32, i32) -> f32 1419// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @powf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 1420// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f32.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, i32) -> f32 1421 1422// CHECK: @_QPtest_real8 1423// CHECK: [[STOI:%[A-Za-z0-9._]+]] = llvm.sext {{%[A-Za-z0-9._]+}} : i16 to i32 1424// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, [[STOI]]) : (f64, i32) -> f64 1425// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @pow({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 1426// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.powi.f64.i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, i32) -> f64 1427 1428func.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 { 1429 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1430 %1 = fir.load %arg0 : !fir.ref<f32> 1431 %2 = fir.load %arg2 : !fir.ref<i16> 1432 %3 = fir.convert %2 : (i16) -> i32 1433 %4 = fir.call @llvm.powi.f32.i32(%1, %3) : (f32, i32) -> f32 1434 %5 = fir.load %arg0 : !fir.ref<f32> 1435 %6 = fir.load %arg1 : !fir.ref<f32> 1436 %7 = fir.call @powf(%5, %6) : (f32, f32) -> f32 1437 %8 = arith.addf %4, %7 : f32 1438 %9 = fir.load %arg0 : !fir.ref<f32> 1439 %10 = fir.load %arg3 : !fir.ref<i32> 1440 %11 = fir.call @llvm.powi.f32.i32(%9, %10) : (f32, i32) -> f32 1441 %12 = arith.addf %8, %11 : f32 1442 fir.store %12 to %0 : !fir.ref<f32> 1443 %13 = fir.load %0 : !fir.ref<f32> 1444 return %13 : f32 1445} 1446func.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 { 1447 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1448 %1 = fir.load %arg0 : !fir.ref<f64> 1449 %2 = fir.load %arg2 : !fir.ref<i16> 1450 %3 = fir.convert %2 : (i16) -> i32 1451 %4 = fir.call @llvm.powi.f64.i32(%1, %3) : (f64, i32) -> f64 1452 %5 = fir.load %arg0 : !fir.ref<f64> 1453 %6 = fir.load %arg1 : !fir.ref<f64> 1454 %7 = fir.call @pow(%5, %6) : (f64, f64) -> f64 1455 %8 = arith.addf %4, %7 : f64 1456 %9 = fir.load %arg0 : !fir.ref<f64> 1457 %10 = fir.load %arg3 : !fir.ref<i32> 1458 %11 = fir.call @llvm.powi.f64.i32(%9, %10) : (f64, i32) -> f64 1459 %12 = arith.addf %8, %11 : f64 1460 fir.store %12 to %0 : !fir.ref<f64> 1461 %13 = fir.load %0 : !fir.ref<f64> 1462 return %13 : f64 1463} 1464func.func private @llvm.powi.f32.i32(f32, i32) -> f32 1465func.func private @powf(f32, f32) -> f32 1466func.func private @llvm.powi.f64.i32(f64, i32) -> f64 1467func.func private @pow(f64, f64) -> f64 1468 1469//--- exponentiation_integer.fir 1470// 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" 1471// 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" 1472// 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" 1473// CHECK-COMDAT: llvm.comdat_selector @__mlir_math_ipowi_i32 any 1474// CHECK-NOCOMDAT-NOT: llvm.comdat_selector @__mlir_math_ipowi_i32 any 1475// CHECK: @_QPtest_int4 1476// CHECK: llvm.call @__mlir_math_ipowi_i32({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (i32, i32) -> i32 1477// CHECK-COMDAT: llvm.func linkonce_odr @__mlir_math_ipowi_i32(%arg0: i32, %arg1: i32) -> i32 comdat(@__llvm_comdat::@__mlir_math_ipowi_i32) 1478// CHECK-NOCOMDAT: llvm.func linkonce_odr @__mlir_math_ipowi_i32(%arg0: i32, %arg1: i32) -> i32 1479 1480func.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"}) { 1481 %0 = fir.load %arg0 : !fir.ref<i32> 1482 %1 = fir.load %arg1 : !fir.ref<i32> 1483 %2 = math.ipowi %0, %1 : i32 1484 fir.store %2 to %arg2 : !fir.ref<i32> 1485 return 1486} 1487 1488//--- sign_fast.fir 1489// RUN: fir-opt %t/sign_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sign_fast.fir 1490// CHECK: @_QPtest_real4 1491// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 1492 1493// CHECK: @_QPtest_real8 1494// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 1495 1496// CHECK: @_QPtest_real10 1497// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f80, f80) -> f80 1498 1499// CHECK: @_QPtest_real16 1500// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f128, f128) -> f128 1501 1502func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 { 1503 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1504 %1 = fir.load %arg0 : !fir.ref<f32> 1505 %2 = fir.load %arg1 : !fir.ref<f32> 1506 %3 = math.copysign %1, %2 : f32 1507 fir.store %3 to %0 : !fir.ref<f32> 1508 %4 = fir.load %0 : !fir.ref<f32> 1509 return %4 : f32 1510} 1511func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 { 1512 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1513 %1 = fir.load %arg0 : !fir.ref<f64> 1514 %2 = fir.load %arg1 : !fir.ref<f64> 1515 %3 = math.copysign %1, %2 : f64 1516 fir.store %3 to %0 : !fir.ref<f64> 1517 %4 = fir.load %0 : !fir.ref<f64> 1518 return %4 : f64 1519} 1520func.func @_QPtest_real10(%arg0: !fir.ref<f80> {fir.bindc_name = "x"}, %arg1: !fir.ref<f80> {fir.bindc_name = "y"}) -> f80 { 1521 %0 = fir.alloca f80 {bindc_name = "test_real10", uniq_name = "_QFtest_real10Etest_real10"} 1522 %1 = fir.load %arg0 : !fir.ref<f80> 1523 %2 = fir.load %arg1 : !fir.ref<f80> 1524 %3 = math.copysign %1, %2 : f80 1525 fir.store %3 to %0 : !fir.ref<f80> 1526 %4 = fir.load %0 : !fir.ref<f80> 1527 return %4 : f80 1528} 1529func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}, %arg1: !fir.ref<f128> {fir.bindc_name = "y"}) -> f128 { 1530 %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"} 1531 %1 = fir.load %arg0 : !fir.ref<f128> 1532 %2 = fir.load %arg1 : !fir.ref<f128> 1533 %3 = math.copysign %1, %2 : f128 1534 fir.store %3 to %0 : !fir.ref<f128> 1535 %4 = fir.load %0 : !fir.ref<f128> 1536 return %4 : f128 1537} 1538 1539//--- sign_relaxed.fir 1540// RUN: fir-opt %t/sign_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sign_relaxed.fir 1541// CHECK: @_QPtest_real4 1542// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 1543 1544// CHECK: @_QPtest_real8 1545// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 1546 1547// CHECK: @_QPtest_real10 1548// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f80, f80) -> f80 1549 1550// CHECK: @_QPtest_real16 1551// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f128, f128) -> f128 1552 1553func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 { 1554 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1555 %1 = fir.load %arg0 : !fir.ref<f32> 1556 %2 = fir.load %arg1 : !fir.ref<f32> 1557 %3 = math.copysign %1, %2 : f32 1558 fir.store %3 to %0 : !fir.ref<f32> 1559 %4 = fir.load %0 : !fir.ref<f32> 1560 return %4 : f32 1561} 1562func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 { 1563 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1564 %1 = fir.load %arg0 : !fir.ref<f64> 1565 %2 = fir.load %arg1 : !fir.ref<f64> 1566 %3 = math.copysign %1, %2 : f64 1567 fir.store %3 to %0 : !fir.ref<f64> 1568 %4 = fir.load %0 : !fir.ref<f64> 1569 return %4 : f64 1570} 1571func.func @_QPtest_real10(%arg0: !fir.ref<f80> {fir.bindc_name = "x"}, %arg1: !fir.ref<f80> {fir.bindc_name = "y"}) -> f80 { 1572 %0 = fir.alloca f80 {bindc_name = "test_real10", uniq_name = "_QFtest_real10Etest_real10"} 1573 %1 = fir.load %arg0 : !fir.ref<f80> 1574 %2 = fir.load %arg1 : !fir.ref<f80> 1575 %3 = math.copysign %1, %2 : f80 1576 fir.store %3 to %0 : !fir.ref<f80> 1577 %4 = fir.load %0 : !fir.ref<f80> 1578 return %4 : f80 1579} 1580func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}, %arg1: !fir.ref<f128> {fir.bindc_name = "y"}) -> f128 { 1581 %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"} 1582 %1 = fir.load %arg0 : !fir.ref<f128> 1583 %2 = fir.load %arg1 : !fir.ref<f128> 1584 %3 = math.copysign %1, %2 : f128 1585 fir.store %3 to %0 : !fir.ref<f128> 1586 %4 = fir.load %0 : !fir.ref<f128> 1587 return %4 : f128 1588} 1589 1590//--- sign_precise.fir 1591// RUN: fir-opt %t/sign_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sign_precise.fir 1592// CHECK: @_QPtest_real4 1593// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @copysignf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 1594 1595// CHECK: @_QPtest_real8 1596// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 1597 1598// CHECK: @_QPtest_real10 1599// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @copysignl({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f80, f80) -> f80 1600 1601// CHECK: @_QPtest_real16 1602// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.copysign.f128({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f128, f128) -> f128 1603 1604func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 { 1605 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1606 %1 = fir.load %arg0 : !fir.ref<f32> 1607 %2 = fir.load %arg1 : !fir.ref<f32> 1608 %3 = fir.call @copysignf(%1, %2) : (f32, f32) -> f32 1609 fir.store %3 to %0 : !fir.ref<f32> 1610 %4 = fir.load %0 : !fir.ref<f32> 1611 return %4 : f32 1612} 1613func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 { 1614 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1615 %1 = fir.load %arg0 : !fir.ref<f64> 1616 %2 = fir.load %arg1 : !fir.ref<f64> 1617 %3 = fir.call @copysign(%1, %2) : (f64, f64) -> f64 1618 fir.store %3 to %0 : !fir.ref<f64> 1619 %4 = fir.load %0 : !fir.ref<f64> 1620 return %4 : f64 1621} 1622func.func @_QPtest_real10(%arg0: !fir.ref<f80> {fir.bindc_name = "x"}, %arg1: !fir.ref<f80> {fir.bindc_name = "y"}) -> f80 { 1623 %0 = fir.alloca f80 {bindc_name = "test_real10", uniq_name = "_QFtest_real10Etest_real10"} 1624 %1 = fir.load %arg0 : !fir.ref<f80> 1625 %2 = fir.load %arg1 : !fir.ref<f80> 1626 %3 = fir.call @copysignl(%1, %2) : (f80, f80) -> f80 1627 fir.store %3 to %0 : !fir.ref<f80> 1628 %4 = fir.load %0 : !fir.ref<f80> 1629 return %4 : f80 1630} 1631func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}, %arg1: !fir.ref<f128> {fir.bindc_name = "y"}) -> f128 { 1632 %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"} 1633 %1 = fir.load %arg0 : !fir.ref<f128> 1634 %2 = fir.load %arg1 : !fir.ref<f128> 1635 %3 = fir.call @llvm.copysign.f128(%1, %2) : (f128, f128) -> f128 1636 fir.store %3 to %0 : !fir.ref<f128> 1637 %4 = fir.load %0 : !fir.ref<f128> 1638 return %4 : f128 1639} 1640func.func private @copysignf(f32, f32) -> f32 1641func.func private @copysign(f64, f64) -> f64 1642func.func private @copysignl(f80, f80) -> f80 1643func.func private @llvm.copysign.f128(f128, f128) -> f128 1644 1645//--- sin_fast.fir 1646// RUN: fir-opt %t/sin_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sin_fast.fir 1647// CHECK: @_QPtest_real4 1648// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.sin({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1649 1650// CHECK: @_QPtest_real8 1651// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.sin({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1652 1653func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1654 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1655 %1 = fir.load %arg0 : !fir.ref<f32> 1656 %2 = math.sin %1 : f32 1657 fir.store %2 to %0 : !fir.ref<f32> 1658 %3 = fir.load %0 : !fir.ref<f32> 1659 return %3 : f32 1660} 1661func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1662 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1663 %1 = fir.load %arg0 : !fir.ref<f64> 1664 %2 = math.sin %1 : f64 1665 fir.store %2 to %0 : !fir.ref<f64> 1666 %3 = fir.load %0 : !fir.ref<f64> 1667 return %3 : f64 1668} 1669 1670//--- sin_relaxed.fir 1671// RUN: fir-opt %t/sin_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sin_relaxed.fir 1672// CHECK: @_QPtest_real4 1673// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.sin({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1674 1675// CHECK: @_QPtest_real8 1676// CHECK: {{%[A-Za-z0-9._]+}} = llvm.intr.sin({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1677 1678func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1679 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1680 %1 = fir.load %arg0 : !fir.ref<f32> 1681 %2 = math.sin %1 : f32 1682 fir.store %2 to %0 : !fir.ref<f32> 1683 %3 = fir.load %0 : !fir.ref<f32> 1684 return %3 : f32 1685} 1686func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1687 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1688 %1 = fir.load %arg0 : !fir.ref<f64> 1689 %2 = math.sin %1 : f64 1690 fir.store %2 to %0 : !fir.ref<f64> 1691 %3 = fir.load %0 : !fir.ref<f64> 1692 return %3 : f64 1693} 1694 1695//--- sin_precise.fir 1696// RUN: fir-opt %t/sin_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sin_precise.fir 1697// CHECK: @_QPtest_real4 1698// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1699 1700// CHECK: @_QPtest_real8 1701// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sin({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1702 1703func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1704 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1705 %1 = fir.load %arg0 : !fir.ref<f32> 1706 %2 = fir.call @sinf(%1) : (f32) -> f32 1707 fir.store %2 to %0 : !fir.ref<f32> 1708 %3 = fir.load %0 : !fir.ref<f32> 1709 return %3 : f32 1710} 1711func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1712 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1713 %1 = fir.load %arg0 : !fir.ref<f64> 1714 %2 = fir.call @sin(%1) : (f64) -> f64 1715 fir.store %2 to %0 : !fir.ref<f64> 1716 %3 = fir.load %0 : !fir.ref<f64> 1717 return %3 : f64 1718} 1719func.func private @sinf(f32) -> f32 1720func.func private @sin(f64) -> f64 1721 1722//--- sinh_fast.fir 1723// RUN: fir-opt %t/sinh_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sinh_fast.fir 1724// CHECK: @_QPtest_real4 1725// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1726 1727// CHECK: @_QPtest_real8 1728// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1729 1730func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1731 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1732 %1 = fir.load %arg0 : !fir.ref<f32> 1733 %2 = fir.call @sinhf(%1) : (f32) -> f32 1734 fir.store %2 to %0 : !fir.ref<f32> 1735 %3 = fir.load %0 : !fir.ref<f32> 1736 return %3 : f32 1737} 1738func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1739 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1740 %1 = fir.load %arg0 : !fir.ref<f64> 1741 %2 = fir.call @sinh(%1) : (f64) -> f64 1742 fir.store %2 to %0 : !fir.ref<f64> 1743 %3 = fir.load %0 : !fir.ref<f64> 1744 return %3 : f64 1745} 1746func.func private @sinhf(f32) -> f32 1747func.func private @sinh(f64) -> f64 1748 1749//--- sinh_relaxed.fir 1750// RUN: fir-opt %t/sinh_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sinh_relaxed.fir 1751// CHECK: @_QPtest_real4 1752// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1753 1754// CHECK: @_QPtest_real8 1755// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1756 1757func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1758 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1759 %1 = fir.load %arg0 : !fir.ref<f32> 1760 %2 = fir.call @sinhf(%1) : (f32) -> f32 1761 fir.store %2 to %0 : !fir.ref<f32> 1762 %3 = fir.load %0 : !fir.ref<f32> 1763 return %3 : f32 1764} 1765func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1766 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1767 %1 = fir.load %arg0 : !fir.ref<f64> 1768 %2 = fir.call @sinh(%1) : (f64) -> f64 1769 fir.store %2 to %0 : !fir.ref<f64> 1770 %3 = fir.load %0 : !fir.ref<f64> 1771 return %3 : f64 1772} 1773func.func private @sinhf(f32) -> f32 1774func.func private @sinh(f64) -> f64 1775 1776//--- sinh_precise.fir 1777// RUN: fir-opt %t/sinh_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sinh_precise.fir 1778// CHECK: @_QPtest_real4 1779// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1780 1781// CHECK: @_QPtest_real8 1782// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1783 1784func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1785 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1786 %1 = fir.load %arg0 : !fir.ref<f32> 1787 %2 = fir.call @sinhf(%1) : (f32) -> f32 1788 fir.store %2 to %0 : !fir.ref<f32> 1789 %3 = fir.load %0 : !fir.ref<f32> 1790 return %3 : f32 1791} 1792func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1793 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1794 %1 = fir.load %arg0 : !fir.ref<f64> 1795 %2 = fir.call @sinh(%1) : (f64) -> f64 1796 fir.store %2 to %0 : !fir.ref<f64> 1797 %3 = fir.load %0 : !fir.ref<f64> 1798 return %3 : f64 1799} 1800func.func private @sinhf(f32) -> f32 1801func.func private @sinh(f64) -> f64 1802 1803//--- tanh_fast.fir 1804// RUN: fir-opt %t/tanh_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tanh_fast.fir 1805// CHECK: @_QPtest_real4 1806// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1807 1808// CHECK: @_QPtest_real8 1809// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1810 1811func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1812 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1813 %1 = fir.load %arg0 : !fir.ref<f32> 1814 %2 = math.tanh %1 : f32 1815 fir.store %2 to %0 : !fir.ref<f32> 1816 %3 = fir.load %0 : !fir.ref<f32> 1817 return %3 : f32 1818} 1819func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1820 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1821 %1 = fir.load %arg0 : !fir.ref<f64> 1822 %2 = math.tanh %1 : f64 1823 fir.store %2 to %0 : !fir.ref<f64> 1824 %3 = fir.load %0 : !fir.ref<f64> 1825 return %3 : f64 1826} 1827 1828//--- tanh_relaxed.fir 1829// RUN: fir-opt %t/tanh_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tanh_relaxed.fir 1830// CHECK: @_QPtest_real4 1831// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1832 1833// CHECK: @_QPtest_real8 1834// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1835 1836func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1837 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1838 %1 = fir.load %arg0 : !fir.ref<f32> 1839 %2 = math.tanh %1 : f32 1840 fir.store %2 to %0 : !fir.ref<f32> 1841 %3 = fir.load %0 : !fir.ref<f32> 1842 return %3 : f32 1843} 1844func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1845 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1846 %1 = fir.load %arg0 : !fir.ref<f64> 1847 %2 = math.tanh %1 : f64 1848 fir.store %2 to %0 : !fir.ref<f64> 1849 %3 = fir.load %0 : !fir.ref<f64> 1850 return %3 : f64 1851} 1852 1853//--- tanh_precise.fir 1854// RUN: fir-opt %t/tanh_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tanh_precise.fir 1855// CHECK: @_QPtest_real4 1856// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1857 1858// CHECK: @_QPtest_real8 1859// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1860 1861func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1862 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1863 %1 = fir.load %arg0 : !fir.ref<f32> 1864 %2 = fir.call @tanhf(%1) : (f32) -> f32 1865 fir.store %2 to %0 : !fir.ref<f32> 1866 %3 = fir.load %0 : !fir.ref<f32> 1867 return %3 : f32 1868} 1869func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1870 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1871 %1 = fir.load %arg0 : !fir.ref<f64> 1872 %2 = fir.call @tanh(%1) : (f64) -> f64 1873 fir.store %2 to %0 : !fir.ref<f64> 1874 %3 = fir.load %0 : !fir.ref<f64> 1875 return %3 : f64 1876} 1877func.func private @tanhf(f32) -> f32 1878func.func private @tanh(f64) -> f64 1879 1880//--- tan_fast.fir 1881// RUN: fir-opt %t/tan_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tan_fast.fir 1882// CHECK: @_QPtest_real4 1883// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1884 1885// CHECK: @_QPtest_real8 1886// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tan({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1887 1888func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1889 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1890 %1 = fir.load %arg0 : !fir.ref<f32> 1891 %2 = math.tan %1 : f32 1892 fir.store %2 to %0 : !fir.ref<f32> 1893 %3 = fir.load %0 : !fir.ref<f32> 1894 return %3 : f32 1895} 1896func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1897 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1898 %1 = fir.load %arg0 : !fir.ref<f64> 1899 %2 = math.tan %1 : f64 1900 fir.store %2 to %0 : !fir.ref<f64> 1901 %3 = fir.load %0 : !fir.ref<f64> 1902 return %3 : f64 1903} 1904 1905//--- tan_relaxed.fir 1906// RUN: fir-opt %t/tan_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tan_relaxed.fir 1907// CHECK: @_QPtest_real4 1908// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1909 1910// CHECK: @_QPtest_real8 1911// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tan({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1912 1913func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1914 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1915 %1 = fir.load %arg0 : !fir.ref<f32> 1916 %2 = math.tan %1 : f32 1917 fir.store %2 to %0 : !fir.ref<f32> 1918 %3 = fir.load %0 : !fir.ref<f32> 1919 return %3 : f32 1920} 1921func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1922 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1923 %1 = fir.load %arg0 : !fir.ref<f64> 1924 %2 = math.tan %1 : f64 1925 fir.store %2 to %0 : !fir.ref<f64> 1926 %3 = fir.load %0 : !fir.ref<f64> 1927 return %3 : f64 1928} 1929 1930//--- tan_precise.fir 1931// RUN: fir-opt %t/tan_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tan_precise.fir 1932// CHECK: @_QPtest_real4 1933// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1934 1935// CHECK: @_QPtest_real8 1936// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tan({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1937 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 @tanf(%1) : (f32) -> f32 1942 fir.store %2 to %0 : !fir.ref<f32> 1943 %3 = fir.load %0 : !fir.ref<f32> 1944 return %3 : f32 1945} 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 @tan(%1) : (f64) -> f64 1950 fir.store %2 to %0 : !fir.ref<f64> 1951 %3 = fir.load %0 : !fir.ref<f64> 1952 return %3 : f64 1953} 1954func.func private @tanf(f32) -> f32 1955func.func private @tan(f64) -> f64 1956