1 ! RUN: bbc -emit-fir %s -o - | FileCheck %s
3 ! Test power operation lowering
5 ! CHECK-LABEL: pow_r4_i4
6 subroutine pow_r4_i4(x, y, z)
10 ! CHECK: call @llvm.powi.f32.i32
13 ! CHECK-LABEL: pow_r4_r4
14 subroutine pow_r4_r4(x, y, z)
17 ! CHECK: math.powf %{{.*}}, %{{.*}} : f32
20 ! CHECK-LABEL: pow_r4_i8
21 subroutine pow_r4_i8(x, y, z)
25 ! CHECK: call @__fs_powk_1
28 ! CHECK-LABEL: pow_r8_i4
29 subroutine pow_r8_i4(x, y, z)
33 ! CHECK: call @llvm.powi.f64.i32
36 ! CHECK-LABEL: pow_r8_i8
37 subroutine pow_r8_i8(x, y, z)
41 ! CHECK: call @__fd_powk_1
44 ! CHECK-LABEL: pow_r8_r8
45 subroutine pow_r8_r8(x, y, z)
48 ! CHECK: math.powf %{{.*}}, %{{.*}} : f64
51 ! CHECK-LABEL: pow_r4_r8
52 subroutine pow_r4_r8(x, y, z)
56 ! CHECK: %{{.*}} = fir.convert %{{.*}} : (f32) -> f64
57 ! CHECK: math.powf %{{.*}}, %{{.*}} : f64
60 ! CHECK-LABEL: pow_i1_i1
61 subroutine pow_i1_i1(x, y, z)
64 ! CHECK: math.ipowi %{{.*}}, %{{.*}} : i8
67 ! CHECK-LABEL: pow_i2_i2
68 subroutine pow_i2_i2(x, y, z)
71 ! CHECK: math.ipowi %{{.*}}, %{{.*}} : i16
74 ! CHECK-LABEL: pow_i4_i4
75 subroutine pow_i4_i4(x, y, z)
78 ! CHECK: math.ipowi %{{.*}}, %{{.*}} : i32
81 ! CHECK-LABEL: pow_i8_i8
82 subroutine pow_i8_i8(x, y, z)
85 ! CHECK: math.ipowi %{{.*}}, %{{.*}} : i64
88 ! CHECK-LABEL: pow_c4_i4
89 subroutine pow_c4_i4(x, y, z)
93 ! CHECK: call @_FortranAcpowi
96 ! CHECK-LABEL: pow_c4_i8
97 subroutine pow_c4_i8(x, y, z)
101 ! CHECK: call @_FortranAcpowk
104 ! CHECK-LABEL: pow_c8_i4
105 subroutine pow_c8_i4(x, y, z)
109 ! CHECK: call @_FortranAzpowi
112 ! CHECK-LABEL: pow_c8_i8
113 subroutine pow_c8_i8(x, y, z)
117 ! CHECK: call @_FortranAzpowk
120 ! CHECK-LABEL: pow_c4_c4
121 subroutine pow_c4_c4(x, y, z)
127 ! CHECK-LABEL: pow_c8_c8
128 subroutine pow_c8_c8(x, y, z)
129 complex(8) :: x, y, z