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.abs %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.abs %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.abs %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<!fir.complex<4>> {fir.bindc_name = "c"}) -> !fir.complex<4> { 46 %0 = fir.alloca !fir.complex<4> {bindc_name = "test_complex4", uniq_name = "_QFtest_complex4Etest_complex4"} 47 %1 = fir.load %arg0 : !fir.ref<!fir.complex<4>> 48 %2 = fir.extract_value %1, [0 : index] : (!fir.complex<4>) -> f32 49 %3 = fir.extract_value %1, [1 : index] : (!fir.complex<4>) -> f32 50 %4 = fir.call @hypotf(%2, %3) : (f32, f32) -> f32 51 %cst = arith.constant 0.000000e+00 : f32 52 %5 = fir.undefined !fir.complex<4> 53 %6 = fir.insert_value %5, %4, [0 : index] : (!fir.complex<4>, f32) -> !fir.complex<4> 54 %7 = fir.insert_value %6, %cst, [1 : index] : (!fir.complex<4>, f32) -> !fir.complex<4> 55 fir.store %7 to %0 : !fir.ref<!fir.complex<4>> 56 %8 = fir.load %0 : !fir.ref<!fir.complex<4>> 57 return %8 : !fir.complex<4> 58} 59func.func @_QPtest_complex8(%arg0: !fir.ref<!fir.complex<8>> {fir.bindc_name = "c"}) -> !fir.complex<8> { 60 %0 = fir.alloca !fir.complex<8> {bindc_name = "test_complex8", uniq_name = "_QFtest_complex8Etest_complex8"} 61 %1 = fir.load %arg0 : !fir.ref<!fir.complex<8>> 62 %2 = fir.extract_value %1, [0 : index] : (!fir.complex<8>) -> f64 63 %3 = fir.extract_value %1, [1 : index] : (!fir.complex<8>) -> f64 64 %4 = fir.call @hypot(%2, %3) : (f64, f64) -> f64 65 %cst = arith.constant 0.000000e+00 : f64 66 %5 = fir.undefined !fir.complex<8> 67 %6 = fir.insert_value %5, %4, [0 : index] : (!fir.complex<8>, f64) -> !fir.complex<8> 68 %7 = fir.insert_value %6, %cst, [1 : index] : (!fir.complex<8>, f64) -> !fir.complex<8> 69 fir.store %7 to %0 : !fir.ref<!fir.complex<8>> 70 %8 = fir.load %0 : !fir.ref<!fir.complex<8>> 71 return %8 : !fir.complex<8> 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.abs %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.abs %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.abs %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<!fir.complex<4>> {fir.bindc_name = "c"}) -> !fir.complex<4> { 118 %0 = fir.alloca !fir.complex<4> {bindc_name = "test_complex4", uniq_name = "_QFtest_complex4Etest_complex4"} 119 %1 = fir.load %arg0 : !fir.ref<!fir.complex<4>> 120 %2 = fir.extract_value %1, [0 : index] : (!fir.complex<4>) -> f32 121 %3 = fir.extract_value %1, [1 : index] : (!fir.complex<4>) -> f32 122 %4 = fir.call @hypotf(%2, %3) : (f32, f32) -> f32 123 %cst = arith.constant 0.000000e+00 : f32 124 %5 = fir.undefined !fir.complex<4> 125 %6 = fir.insert_value %5, %4, [0 : index] : (!fir.complex<4>, f32) -> !fir.complex<4> 126 %7 = fir.insert_value %6, %cst, [1 : index] : (!fir.complex<4>, f32) -> !fir.complex<4> 127 fir.store %7 to %0 : !fir.ref<!fir.complex<4>> 128 %8 = fir.load %0 : !fir.ref<!fir.complex<4>> 129 return %8 : !fir.complex<4> 130} 131func.func @_QPtest_complex8(%arg0: !fir.ref<!fir.complex<8>> {fir.bindc_name = "c"}) -> !fir.complex<8> { 132 %0 = fir.alloca !fir.complex<8> {bindc_name = "test_complex8", uniq_name = "_QFtest_complex8Etest_complex8"} 133 %1 = fir.load %arg0 : !fir.ref<!fir.complex<8>> 134 %2 = fir.extract_value %1, [0 : index] : (!fir.complex<8>) -> f64 135 %3 = fir.extract_value %1, [1 : index] : (!fir.complex<8>) -> f64 136 %4 = fir.call @hypot(%2, %3) : (f64, f64) -> f64 137 %cst = arith.constant 0.000000e+00 : f64 138 %5 = fir.undefined !fir.complex<8> 139 %6 = fir.insert_value %5, %4, [0 : index] : (!fir.complex<8>, f64) -> !fir.complex<8> 140 %7 = fir.insert_value %6, %cst, [1 : index] : (!fir.complex<8>, f64) -> !fir.complex<8> 141 fir.store %7 to %0 : !fir.ref<!fir.complex<8>> 142 %8 = fir.load %0 : !fir.ref<!fir.complex<8>> 143 return %8 : !fir.complex<8> 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<!fir.complex<4>> {fir.bindc_name = "c"}) -> !fir.complex<4> { 190 %0 = fir.alloca !fir.complex<4> {bindc_name = "test_complex4", uniq_name = "_QFtest_complex4Etest_complex4"} 191 %1 = fir.load %arg0 : !fir.ref<!fir.complex<4>> 192 %2 = fir.extract_value %1, [0 : index] : (!fir.complex<4>) -> f32 193 %3 = fir.extract_value %1, [1 : index] : (!fir.complex<4>) -> f32 194 %4 = fir.call @hypotf(%2, %3) : (f32, f32) -> f32 195 %cst = arith.constant 0.000000e+00 : f32 196 %5 = fir.undefined !fir.complex<4> 197 %6 = fir.insert_value %5, %4, [0 : index] : (!fir.complex<4>, f32) -> !fir.complex<4> 198 %7 = fir.insert_value %6, %cst, [1 : index] : (!fir.complex<4>, f32) -> !fir.complex<4> 199 fir.store %7 to %0 : !fir.ref<!fir.complex<4>> 200 %8 = fir.load %0 : !fir.ref<!fir.complex<4>> 201 return %8 : !fir.complex<4> 202} 203func.func @_QPtest_complex8(%arg0: !fir.ref<!fir.complex<8>> {fir.bindc_name = "c"}) -> !fir.complex<8> { 204 %0 = fir.alloca !fir.complex<8> {bindc_name = "test_complex8", uniq_name = "_QFtest_complex8Etest_complex8"} 205 %1 = fir.load %arg0 : !fir.ref<!fir.complex<8>> 206 %2 = fir.extract_value %1, [0 : index] : (!fir.complex<8>) -> f64 207 %3 = fir.extract_value %1, [1 : index] : (!fir.complex<8>) -> f64 208 %4 = fir.call @hypot(%2, %3) : (f64, f64) -> f64 209 %cst = arith.constant 0.000000e+00 : f64 210 %5 = fir.undefined !fir.complex<8> 211 %6 = fir.insert_value %5, %4, [0 : index] : (!fir.complex<8>, f64) -> !fir.complex<8> 212 %7 = fir.insert_value %6, %cst, [1 : index] : (!fir.complex<8>, f64) -> !fir.complex<8> 213 fir.store %7 to %0 : !fir.ref<!fir.complex<8>> 214 %8 = fir.load %0 : !fir.ref<!fir.complex<8>> 215 return %8 : !fir.complex<8> 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//--- sign_fast.fir 1470// RUN: fir-opt %t/sign_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sign_fast.fir 1471// CHECK: @_QPtest_real4 1472// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.copysign"({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 1473 1474// CHECK: @_QPtest_real8 1475// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.copysign"({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 1476 1477// CHECK: @_QPtest_real10 1478// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.copysign"({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f80, f80) -> f80 1479 1480// CHECK: @_QPtest_real16 1481// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.copysign"({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f128, f128) -> f128 1482 1483func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 { 1484 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1485 %1 = fir.load %arg0 : !fir.ref<f32> 1486 %2 = fir.load %arg1 : !fir.ref<f32> 1487 %3 = math.copysign %1, %2 : f32 1488 fir.store %3 to %0 : !fir.ref<f32> 1489 %4 = fir.load %0 : !fir.ref<f32> 1490 return %4 : f32 1491} 1492func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 { 1493 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1494 %1 = fir.load %arg0 : !fir.ref<f64> 1495 %2 = fir.load %arg1 : !fir.ref<f64> 1496 %3 = math.copysign %1, %2 : f64 1497 fir.store %3 to %0 : !fir.ref<f64> 1498 %4 = fir.load %0 : !fir.ref<f64> 1499 return %4 : f64 1500} 1501func.func @_QPtest_real10(%arg0: !fir.ref<f80> {fir.bindc_name = "x"}, %arg1: !fir.ref<f80> {fir.bindc_name = "y"}) -> f80 { 1502 %0 = fir.alloca f80 {bindc_name = "test_real10", uniq_name = "_QFtest_real10Etest_real10"} 1503 %1 = fir.load %arg0 : !fir.ref<f80> 1504 %2 = fir.load %arg1 : !fir.ref<f80> 1505 %3 = math.copysign %1, %2 : f80 1506 fir.store %3 to %0 : !fir.ref<f80> 1507 %4 = fir.load %0 : !fir.ref<f80> 1508 return %4 : f80 1509} 1510func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}, %arg1: !fir.ref<f128> {fir.bindc_name = "y"}) -> f128 { 1511 %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"} 1512 %1 = fir.load %arg0 : !fir.ref<f128> 1513 %2 = fir.load %arg1 : !fir.ref<f128> 1514 %3 = math.copysign %1, %2 : f128 1515 fir.store %3 to %0 : !fir.ref<f128> 1516 %4 = fir.load %0 : !fir.ref<f128> 1517 return %4 : f128 1518} 1519 1520//--- sign_relaxed.fir 1521// RUN: fir-opt %t/sign_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sign_relaxed.fir 1522// CHECK: @_QPtest_real4 1523// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.copysign"({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 1524 1525// CHECK: @_QPtest_real8 1526// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.copysign"({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 1527 1528// CHECK: @_QPtest_real10 1529// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.copysign"({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f80, f80) -> f80 1530 1531// CHECK: @_QPtest_real16 1532// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.copysign"({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f128, f128) -> f128 1533 1534func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 { 1535 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1536 %1 = fir.load %arg0 : !fir.ref<f32> 1537 %2 = fir.load %arg1 : !fir.ref<f32> 1538 %3 = math.copysign %1, %2 : f32 1539 fir.store %3 to %0 : !fir.ref<f32> 1540 %4 = fir.load %0 : !fir.ref<f32> 1541 return %4 : f32 1542} 1543func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 { 1544 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1545 %1 = fir.load %arg0 : !fir.ref<f64> 1546 %2 = fir.load %arg1 : !fir.ref<f64> 1547 %3 = math.copysign %1, %2 : f64 1548 fir.store %3 to %0 : !fir.ref<f64> 1549 %4 = fir.load %0 : !fir.ref<f64> 1550 return %4 : f64 1551} 1552func.func @_QPtest_real10(%arg0: !fir.ref<f80> {fir.bindc_name = "x"}, %arg1: !fir.ref<f80> {fir.bindc_name = "y"}) -> f80 { 1553 %0 = fir.alloca f80 {bindc_name = "test_real10", uniq_name = "_QFtest_real10Etest_real10"} 1554 %1 = fir.load %arg0 : !fir.ref<f80> 1555 %2 = fir.load %arg1 : !fir.ref<f80> 1556 %3 = math.copysign %1, %2 : f80 1557 fir.store %3 to %0 : !fir.ref<f80> 1558 %4 = fir.load %0 : !fir.ref<f80> 1559 return %4 : f80 1560} 1561func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}, %arg1: !fir.ref<f128> {fir.bindc_name = "y"}) -> f128 { 1562 %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"} 1563 %1 = fir.load %arg0 : !fir.ref<f128> 1564 %2 = fir.load %arg1 : !fir.ref<f128> 1565 %3 = math.copysign %1, %2 : f128 1566 fir.store %3 to %0 : !fir.ref<f128> 1567 %4 = fir.load %0 : !fir.ref<f128> 1568 return %4 : f128 1569} 1570 1571//--- sign_precise.fir 1572// RUN: fir-opt %t/sign_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sign_precise.fir 1573// CHECK: @_QPtest_real4 1574// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @copysignf({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f32, f32) -> f32 1575 1576// CHECK: @_QPtest_real8 1577// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @copysign({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f64, f64) -> f64 1578 1579// CHECK: @_QPtest_real10 1580// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @copysignl({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f80, f80) -> f80 1581 1582// CHECK: @_QPtest_real16 1583// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @llvm.copysign.f128({{%[A-Za-z0-9._]+}}, {{%[A-Za-z0-9._]+}}) : (f128, f128) -> f128 1584 1585func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}, %arg1: !fir.ref<f32> {fir.bindc_name = "y"}) -> f32 { 1586 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1587 %1 = fir.load %arg0 : !fir.ref<f32> 1588 %2 = fir.load %arg1 : !fir.ref<f32> 1589 %3 = fir.call @copysignf(%1, %2) : (f32, f32) -> f32 1590 fir.store %3 to %0 : !fir.ref<f32> 1591 %4 = fir.load %0 : !fir.ref<f32> 1592 return %4 : f32 1593} 1594func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}, %arg1: !fir.ref<f64> {fir.bindc_name = "y"}) -> f64 { 1595 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1596 %1 = fir.load %arg0 : !fir.ref<f64> 1597 %2 = fir.load %arg1 : !fir.ref<f64> 1598 %3 = fir.call @copysign(%1, %2) : (f64, f64) -> f64 1599 fir.store %3 to %0 : !fir.ref<f64> 1600 %4 = fir.load %0 : !fir.ref<f64> 1601 return %4 : f64 1602} 1603func.func @_QPtest_real10(%arg0: !fir.ref<f80> {fir.bindc_name = "x"}, %arg1: !fir.ref<f80> {fir.bindc_name = "y"}) -> f80 { 1604 %0 = fir.alloca f80 {bindc_name = "test_real10", uniq_name = "_QFtest_real10Etest_real10"} 1605 %1 = fir.load %arg0 : !fir.ref<f80> 1606 %2 = fir.load %arg1 : !fir.ref<f80> 1607 %3 = fir.call @copysignl(%1, %2) : (f80, f80) -> f80 1608 fir.store %3 to %0 : !fir.ref<f80> 1609 %4 = fir.load %0 : !fir.ref<f80> 1610 return %4 : f80 1611} 1612func.func @_QPtest_real16(%arg0: !fir.ref<f128> {fir.bindc_name = "x"}, %arg1: !fir.ref<f128> {fir.bindc_name = "y"}) -> f128 { 1613 %0 = fir.alloca f128 {bindc_name = "test_real16", uniq_name = "_QFtest_real16Etest_real16"} 1614 %1 = fir.load %arg0 : !fir.ref<f128> 1615 %2 = fir.load %arg1 : !fir.ref<f128> 1616 %3 = fir.call @llvm.copysign.f128(%1, %2) : (f128, f128) -> f128 1617 fir.store %3 to %0 : !fir.ref<f128> 1618 %4 = fir.load %0 : !fir.ref<f128> 1619 return %4 : f128 1620} 1621func.func private @copysignf(f32, f32) -> f32 1622func.func private @copysign(f64, f64) -> f64 1623func.func private @copysignl(f80, f80) -> f80 1624func.func private @llvm.copysign.f128(f128, f128) -> f128 1625 1626//--- sin_fast.fir 1627// RUN: fir-opt %t/sin_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sin_fast.fir 1628// CHECK: @_QPtest_real4 1629// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.sin"({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1630 1631// CHECK: @_QPtest_real8 1632// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.sin"({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1633 1634func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1635 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1636 %1 = fir.load %arg0 : !fir.ref<f32> 1637 %2 = math.sin %1 : f32 1638 fir.store %2 to %0 : !fir.ref<f32> 1639 %3 = fir.load %0 : !fir.ref<f32> 1640 return %3 : f32 1641} 1642func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1643 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1644 %1 = fir.load %arg0 : !fir.ref<f64> 1645 %2 = math.sin %1 : f64 1646 fir.store %2 to %0 : !fir.ref<f64> 1647 %3 = fir.load %0 : !fir.ref<f64> 1648 return %3 : f64 1649} 1650 1651//--- sin_relaxed.fir 1652// RUN: fir-opt %t/sin_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sin_relaxed.fir 1653// CHECK: @_QPtest_real4 1654// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.sin"({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1655 1656// CHECK: @_QPtest_real8 1657// CHECK: {{%[A-Za-z0-9._]+}} = "llvm.intr.sin"({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1658 1659func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1660 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1661 %1 = fir.load %arg0 : !fir.ref<f32> 1662 %2 = math.sin %1 : f32 1663 fir.store %2 to %0 : !fir.ref<f32> 1664 %3 = fir.load %0 : !fir.ref<f32> 1665 return %3 : f32 1666} 1667func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1668 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1669 %1 = fir.load %arg0 : !fir.ref<f64> 1670 %2 = math.sin %1 : f64 1671 fir.store %2 to %0 : !fir.ref<f64> 1672 %3 = fir.load %0 : !fir.ref<f64> 1673 return %3 : f64 1674} 1675 1676//--- sin_precise.fir 1677// RUN: fir-opt %t/sin_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sin_precise.fir 1678// CHECK: @_QPtest_real4 1679// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1680 1681// CHECK: @_QPtest_real8 1682// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sin({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1683 1684func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1685 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1686 %1 = fir.load %arg0 : !fir.ref<f32> 1687 %2 = fir.call @sinf(%1) : (f32) -> f32 1688 fir.store %2 to %0 : !fir.ref<f32> 1689 %3 = fir.load %0 : !fir.ref<f32> 1690 return %3 : f32 1691} 1692func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1693 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1694 %1 = fir.load %arg0 : !fir.ref<f64> 1695 %2 = fir.call @sin(%1) : (f64) -> f64 1696 fir.store %2 to %0 : !fir.ref<f64> 1697 %3 = fir.load %0 : !fir.ref<f64> 1698 return %3 : f64 1699} 1700func.func private @sinf(f32) -> f32 1701func.func private @sin(f64) -> f64 1702 1703//--- sinh_fast.fir 1704// RUN: fir-opt %t/sinh_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sinh_fast.fir 1705// CHECK: @_QPtest_real4 1706// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1707 1708// CHECK: @_QPtest_real8 1709// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1710 1711func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1712 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1713 %1 = fir.load %arg0 : !fir.ref<f32> 1714 %2 = fir.call @sinhf(%1) : (f32) -> f32 1715 fir.store %2 to %0 : !fir.ref<f32> 1716 %3 = fir.load %0 : !fir.ref<f32> 1717 return %3 : f32 1718} 1719func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1720 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1721 %1 = fir.load %arg0 : !fir.ref<f64> 1722 %2 = fir.call @sinh(%1) : (f64) -> f64 1723 fir.store %2 to %0 : !fir.ref<f64> 1724 %3 = fir.load %0 : !fir.ref<f64> 1725 return %3 : f64 1726} 1727func.func private @sinhf(f32) -> f32 1728func.func private @sinh(f64) -> f64 1729 1730//--- sinh_relaxed.fir 1731// RUN: fir-opt %t/sinh_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sinh_relaxed.fir 1732// CHECK: @_QPtest_real4 1733// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1734 1735// CHECK: @_QPtest_real8 1736// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1737 1738func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1739 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1740 %1 = fir.load %arg0 : !fir.ref<f32> 1741 %2 = fir.call @sinhf(%1) : (f32) -> f32 1742 fir.store %2 to %0 : !fir.ref<f32> 1743 %3 = fir.load %0 : !fir.ref<f32> 1744 return %3 : f32 1745} 1746func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1747 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1748 %1 = fir.load %arg0 : !fir.ref<f64> 1749 %2 = fir.call @sinh(%1) : (f64) -> f64 1750 fir.store %2 to %0 : !fir.ref<f64> 1751 %3 = fir.load %0 : !fir.ref<f64> 1752 return %3 : f64 1753} 1754func.func private @sinhf(f32) -> f32 1755func.func private @sinh(f64) -> f64 1756 1757//--- sinh_precise.fir 1758// RUN: fir-opt %t/sinh_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/sinh_precise.fir 1759// CHECK: @_QPtest_real4 1760// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1761 1762// CHECK: @_QPtest_real8 1763// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @sinh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1764 1765func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1766 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1767 %1 = fir.load %arg0 : !fir.ref<f32> 1768 %2 = fir.call @sinhf(%1) : (f32) -> f32 1769 fir.store %2 to %0 : !fir.ref<f32> 1770 %3 = fir.load %0 : !fir.ref<f32> 1771 return %3 : f32 1772} 1773func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1774 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1775 %1 = fir.load %arg0 : !fir.ref<f64> 1776 %2 = fir.call @sinh(%1) : (f64) -> f64 1777 fir.store %2 to %0 : !fir.ref<f64> 1778 %3 = fir.load %0 : !fir.ref<f64> 1779 return %3 : f64 1780} 1781func.func private @sinhf(f32) -> f32 1782func.func private @sinh(f64) -> f64 1783 1784//--- tanh_fast.fir 1785// RUN: fir-opt %t/tanh_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tanh_fast.fir 1786// CHECK: @_QPtest_real4 1787// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1788 1789// CHECK: @_QPtest_real8 1790// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1791 1792func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1793 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1794 %1 = fir.load %arg0 : !fir.ref<f32> 1795 %2 = math.tanh %1 : f32 1796 fir.store %2 to %0 : !fir.ref<f32> 1797 %3 = fir.load %0 : !fir.ref<f32> 1798 return %3 : f32 1799} 1800func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1801 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1802 %1 = fir.load %arg0 : !fir.ref<f64> 1803 %2 = math.tanh %1 : f64 1804 fir.store %2 to %0 : !fir.ref<f64> 1805 %3 = fir.load %0 : !fir.ref<f64> 1806 return %3 : f64 1807} 1808 1809//--- tanh_relaxed.fir 1810// RUN: fir-opt %t/tanh_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tanh_relaxed.fir 1811// CHECK: @_QPtest_real4 1812// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1813 1814// CHECK: @_QPtest_real8 1815// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1816 1817func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1818 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1819 %1 = fir.load %arg0 : !fir.ref<f32> 1820 %2 = math.tanh %1 : f32 1821 fir.store %2 to %0 : !fir.ref<f32> 1822 %3 = fir.load %0 : !fir.ref<f32> 1823 return %3 : f32 1824} 1825func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1826 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1827 %1 = fir.load %arg0 : !fir.ref<f64> 1828 %2 = math.tanh %1 : f64 1829 fir.store %2 to %0 : !fir.ref<f64> 1830 %3 = fir.load %0 : !fir.ref<f64> 1831 return %3 : f64 1832} 1833 1834//--- tanh_precise.fir 1835// RUN: fir-opt %t/tanh_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tanh_precise.fir 1836// CHECK: @_QPtest_real4 1837// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanhf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1838 1839// CHECK: @_QPtest_real8 1840// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanh({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1841 1842func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1843 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1844 %1 = fir.load %arg0 : !fir.ref<f32> 1845 %2 = fir.call @tanhf(%1) : (f32) -> f32 1846 fir.store %2 to %0 : !fir.ref<f32> 1847 %3 = fir.load %0 : !fir.ref<f32> 1848 return %3 : f32 1849} 1850func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1851 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1852 %1 = fir.load %arg0 : !fir.ref<f64> 1853 %2 = fir.call @tanh(%1) : (f64) -> f64 1854 fir.store %2 to %0 : !fir.ref<f64> 1855 %3 = fir.load %0 : !fir.ref<f64> 1856 return %3 : f64 1857} 1858func.func private @tanhf(f32) -> f32 1859func.func private @tanh(f64) -> f64 1860 1861//--- tan_fast.fir 1862// RUN: fir-opt %t/tan_fast.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tan_fast.fir 1863// CHECK: @_QPtest_real4 1864// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1865 1866// CHECK: @_QPtest_real8 1867// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tan({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1868 1869func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1870 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1871 %1 = fir.load %arg0 : !fir.ref<f32> 1872 %2 = math.tan %1 : f32 1873 fir.store %2 to %0 : !fir.ref<f32> 1874 %3 = fir.load %0 : !fir.ref<f32> 1875 return %3 : f32 1876} 1877func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1878 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1879 %1 = fir.load %arg0 : !fir.ref<f64> 1880 %2 = math.tan %1 : f64 1881 fir.store %2 to %0 : !fir.ref<f64> 1882 %3 = fir.load %0 : !fir.ref<f64> 1883 return %3 : f64 1884} 1885 1886//--- tan_relaxed.fir 1887// RUN: fir-opt %t/tan_relaxed.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tan_relaxed.fir 1888// CHECK: @_QPtest_real4 1889// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1890 1891// CHECK: @_QPtest_real8 1892// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tan({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1893 1894func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1895 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1896 %1 = fir.load %arg0 : !fir.ref<f32> 1897 %2 = math.tan %1 : f32 1898 fir.store %2 to %0 : !fir.ref<f32> 1899 %3 = fir.load %0 : !fir.ref<f32> 1900 return %3 : f32 1901} 1902func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1903 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1904 %1 = fir.load %arg0 : !fir.ref<f64> 1905 %2 = math.tan %1 : f64 1906 fir.store %2 to %0 : !fir.ref<f64> 1907 %3 = fir.load %0 : !fir.ref<f64> 1908 return %3 : f64 1909} 1910 1911//--- tan_precise.fir 1912// RUN: fir-opt %t/tan_precise.fir --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" | FileCheck %t/tan_precise.fir 1913// CHECK: @_QPtest_real4 1914// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tanf({{%[A-Za-z0-9._]+}}) : (f32) -> f32 1915 1916// CHECK: @_QPtest_real8 1917// CHECK: {{%[A-Za-z0-9._]+}} = llvm.call @tan({{%[A-Za-z0-9._]+}}) : (f64) -> f64 1918 1919func.func @_QPtest_real4(%arg0: !fir.ref<f32> {fir.bindc_name = "x"}) -> f32 { 1920 %0 = fir.alloca f32 {bindc_name = "test_real4", uniq_name = "_QFtest_real4Etest_real4"} 1921 %1 = fir.load %arg0 : !fir.ref<f32> 1922 %2 = fir.call @tanf(%1) : (f32) -> f32 1923 fir.store %2 to %0 : !fir.ref<f32> 1924 %3 = fir.load %0 : !fir.ref<f32> 1925 return %3 : f32 1926} 1927func.func @_QPtest_real8(%arg0: !fir.ref<f64> {fir.bindc_name = "x"}) -> f64 { 1928 %0 = fir.alloca f64 {bindc_name = "test_real8", uniq_name = "_QFtest_real8Etest_real8"} 1929 %1 = fir.load %arg0 : !fir.ref<f64> 1930 %2 = fir.call @tan(%1) : (f64) -> f64 1931 fir.store %2 to %0 : !fir.ref<f64> 1932 %3 = fir.load %0 : !fir.ref<f64> 1933 return %3 : f64 1934} 1935func.func private @tanf(f32) -> f32 1936func.func private @tan(f64) -> f64 1937 1938