1 ! RUN: bbc -emit-fir %s -o - | FileCheck %s --check-prefixes="CHECK,PRECISE"
2 ! RUN: bbc --math-runtime=precise -emit-fir %s -o - | FileCheck %s --check-prefixes="PRECISE"
3 ! RUN: bbc --force-mlir-complex -emit-fir %s -o - | FileCheck %s --check-prefixes="FAST"
4 ! RUN: %flang_fc1 -emit-fir %s -o - | FileCheck %s --check-prefixes="CHECK,PRECISE"
5 ! RUN: %flang_fc1 -fapprox-func -emit-fir %s -o - | FileCheck %s --check-prefixes="CHECK,FAST"
6 ! RUN: %flang_fc1 -emit-fir -mllvm --math-runtime=precise %s -o - | FileCheck %s --check-prefixes="PRECISE"
7 ! RUN: %flang_fc1 -emit-fir -mllvm --force-mlir-complex %s -o - | FileCheck %s --check-prefixes="FAST"
9 ! Test power operation lowering
11 ! CHECK-LABEL: pow_r4_i4
12 subroutine pow_r4_i4(x
, y
, z
)
16 ! CHECK: math.fpowi {{.*}} : f32, i32
19 ! CHECK-LABEL: pow_r4_r4
20 subroutine pow_r4_r4(x
, y
, z
)
23 ! CHECK: math.powf %{{.*}}, %{{.*}} : f32
26 ! CHECK-LABEL: pow_r4_i8
27 subroutine pow_r4_i8(x
, y
, z
)
31 ! CHECK: math.fpowi {{.*}} : f32, i64
34 ! CHECK-LABEL: pow_r8_i4
35 subroutine pow_r8_i4(x
, y
, z
)
39 ! CHECK: math.fpowi {{.*}} : f64, i32
42 ! CHECK-LABEL: pow_r8_i8
43 subroutine pow_r8_i8(x
, y
, z
)
47 ! CHECK: math.fpowi {{.*}} : f64, i64
50 ! CHECK-LABEL: pow_r8_r8
51 subroutine pow_r8_r8(x
, y
, z
)
54 ! CHECK: math.powf %{{.*}}, %{{.*}} : f64
57 ! CHECK-LABEL: pow_r4_r8
58 subroutine pow_r4_r8(x
, y
, z
)
62 ! CHECK: %{{.*}} = fir.convert %{{.*}} : (f32) -> f64
63 ! CHECK: math.powf %{{.*}}, %{{.*}} : f64
66 ! CHECK-LABEL: pow_i1_i1
67 subroutine pow_i1_i1(x
, y
, z
)
70 ! CHECK: math.ipowi %{{.*}}, %{{.*}} : i8
73 ! CHECK-LABEL: pow_i2_i2
74 subroutine pow_i2_i2(x
, y
, z
)
77 ! CHECK: math.ipowi %{{.*}}, %{{.*}} : i16
80 ! CHECK-LABEL: pow_i4_i4
81 subroutine pow_i4_i4(x
, y
, z
)
84 ! CHECK: math.ipowi %{{.*}}, %{{.*}} : i32
87 ! CHECK-LABEL: pow_i8_i8
88 subroutine pow_i8_i8(x
, y
, z
)
91 ! CHECK: math.ipowi %{{.*}}, %{{.*}} : i64
94 ! CHECK-LABEL: pow_c4_i4
95 subroutine pow_c4_i4(x
, y
, z
)
99 ! CHECK: call @_FortranAcpowi
102 ! CHECK-LABEL: pow_c4_i8
103 subroutine pow_c4_i8(x
, y
, z
)
107 ! CHECK: call @_FortranAcpowk
110 ! CHECK-LABEL: pow_c8_i4
111 subroutine pow_c8_i4(x
, y
, z
)
115 ! CHECK: call @_FortranAzpowi
118 ! CHECK-LABEL: pow_c8_i8
119 subroutine pow_c8_i8(x
, y
, z
)
123 ! CHECK: call @_FortranAzpowk
126 ! CHECK-LABEL: pow_c4_c4
127 subroutine pow_c4_c4(x
, y
, z
)
130 ! FAST: complex.pow %{{.*}}, %{{.*}} : complex<f32>
131 ! PRECISE: call @cpowf
134 ! CHECK-LABEL: pow_c8_c8
135 subroutine pow_c8_c8(x
, y
, z
)
136 complex(8) :: x
, y
, z
138 ! FAST: complex.pow %{{.*}}, %{{.*}} : complex<f64>
139 ! PRECISE: call @cpow