2
2
3
3
module {
4
4
func.func @pow_c4_i4(%arg0: complex<f32>, %arg1: i32) -> complex<f32> {
5
- %c0 = arith.constant 0.0 : f32
6
- %0 = fir.convert %arg1 : (i32) -> f32
7
- %1 = complex.create %0, %c0 : complex<f32>
8
- %2 = complex.pow %arg0, %1 : complex<f32>
9
- return %2 : complex<f32>
5
+ %0 = complex.powi %arg0, %arg1 : complex<f32>, i32
6
+ return %0 : complex<f32>
7
+ }
8
+
9
+ func.func @pow_c4_i4_fast(%arg0: complex<f32>, %arg1: i32) -> complex<f32> {
10
+ %0 = complex.powi %arg0, %arg1 fastmath<fast> : complex<f32>, i32
11
+ return %0 : complex<f32>
10
12
}
11
13
12
14
func.func @pow_c4_i8(%arg0: complex<f32>, %arg1: i64) -> complex<f32> {
13
- %c0 = arith.constant 0.0 : f32
14
- %0 = fir.convert %arg1 : (i64) -> f32
15
- %1 = complex.create %0, %c0 : complex<f32>
16
- %2 = complex.pow %arg0, %1 : complex<f32>
17
- return %2 : complex<f32>
15
+ %0 = complex.powi %arg0, %arg1 : complex<f32>, i64
16
+ return %0 : complex<f32>
18
17
}
19
18
20
19
func.func @pow_c8_i4(%arg0: complex<f64>, %arg1: i32) -> complex<f64> {
21
- %c0 = arith.constant 0.0 : f64
22
- %0 = fir.convert %arg1 : (i32) -> f64
23
- %1 = complex.create %0, %c0 : complex<f64>
24
- %2 = complex.pow %arg0, %1 : complex<f64>
25
- return %2 : complex<f64>
20
+ %0 = complex.powi %arg0, %arg1 : complex<f64>, i32
21
+ return %0 : complex<f64>
26
22
}
27
23
28
24
func.func @pow_c8_i8(%arg0: complex<f64>, %arg1: i64) -> complex<f64> {
29
- %c0 = arith.constant 0.0 : f64
30
- %0 = fir.convert %arg1 : (i64) -> f64
31
- %1 = complex.create %0, %c0 : complex<f64>
32
- %2 = complex.pow %arg0, %1 : complex<f64>
33
- return %2 : complex<f64>
25
+ %0 = complex.powi %arg0, %arg1 : complex<f64>, i64
26
+ return %0 : complex<f64>
34
27
}
35
28
36
29
func.func @pow_c16_i4(%arg0: complex<f128>, %arg1: i32) -> complex<f128> {
37
- %c0 = arith.constant 0.0 : f128
38
- %0 = fir.convert %arg1 : (i32) -> f128
39
- %1 = complex.create %0, %c0 : complex<f128>
40
- %2 = complex.pow %arg0, %1 : complex<f128>
41
- return %2 : complex<f128>
30
+ %0 = complex.powi %arg0, %arg1 : complex<f128>, i32
31
+ return %0 : complex<f128>
42
32
}
43
33
44
34
func.func @pow_c16_i8(%arg0: complex<f128>, %arg1: i64) -> complex<f128> {
45
- %c0 = arith.constant 0.0 : f128
46
- %0 = fir.convert %arg1 : (i64) -> f128
47
- %1 = complex.create %0, %c0 : complex<f128>
48
- %2 = complex.pow %arg0, %1 : complex<f128>
49
- return %2 : complex<f128>
35
+ %0 = complex.powi %arg0, %arg1 : complex<f128>, i64
36
+ return %0 : complex<f128>
50
37
}
51
38
52
39
func.func @pow_c4_fast(%arg0: complex<f32>, %arg1: f32) -> complex<f32> {
@@ -74,26 +61,37 @@ module {
74
61
// CHECK-LABEL: func.func @pow_c4_i4(
75
62
// CHECK: fir.call @_FortranAcpowi(%{{.*}}, %{{.*}}) : (complex<f32>, i32) -> complex<f32>
76
63
// CHECK-NOT: complex.pow
64
+ // CHECK-NOT: complex.powi
65
+
66
+ // CHECK-LABEL: func.func @pow_c4_i4_fast(
67
+ // CHECK: fir.call @_FortranAcpowi(%{{.*}}, %{{.*}}) fastmath<fast> : (complex<f32>, i32) -> complex<f32>
68
+ // CHECK-NOT: complex.pow
69
+ // CHECK-NOT: complex.powi
77
70
78
71
// CHECK-LABEL: func.func @pow_c4_i8(
79
72
// CHECK: fir.call @_FortranAcpowk(%{{.*}}, %{{.*}}) : (complex<f32>, i64) -> complex<f32>
80
73
// CHECK-NOT: complex.pow
74
+ // CHECK-NOT: complex.powi
81
75
82
76
// CHECK-LABEL: func.func @pow_c8_i4(
83
77
// CHECK: fir.call @_FortranAzpowi(%{{.*}}, %{{.*}}) : (complex<f64>, i32) -> complex<f64>
84
78
// CHECK-NOT: complex.pow
79
+ // CHECK-NOT: complex.powi
85
80
86
81
// CHECK-LABEL: func.func @pow_c8_i8(
87
82
// CHECK: fir.call @_FortranAzpowk(%{{.*}}, %{{.*}}) : (complex<f64>, i64) -> complex<f64>
88
83
// CHECK-NOT: complex.pow
84
+ // CHECK-NOT: complex.powi
89
85
90
86
// CHECK-LABEL: func.func @pow_c16_i4(
91
87
// CHECK: fir.call @_FortranAcqpowi(%{{.*}}, %{{.*}}) : (complex<f128>, i32) -> complex<f128>
92
88
// CHECK-NOT: complex.pow
89
+ // CHECK-NOT: complex.powi
93
90
94
91
// CHECK-LABEL: func.func @pow_c16_i8(
95
92
// CHECK: fir.call @_FortranAcqpowk(%{{.*}}, %{{.*}}) : (complex<f128>, i64) -> complex<f128>
96
93
// CHECK-NOT: complex.pow
94
+ // CHECK-NOT: complex.powi
97
95
98
96
// CHECK-LABEL: func.func @pow_c4_fast(
99
97
// CHECK: %[[EXP:.*]] = complex.create %{{.*}}, %{{.*}} : complex<f32>
@@ -108,4 +106,4 @@ module {
108
106
// CHECK-LABEL: func.func @pow_c16_complex(
109
107
// CHECK: %[[EXP:.*]] = complex.create %{{.*}}, %{{.*}} : complex<f128>
110
108
// CHECK: fir.call @_FortranACPowF128(%{{.*}}, %[[EXP]]) : (complex<f128>, complex<f128>) -> complex<f128>
111
- // CHECK-NOT: complex.pow
109
+ // CHECK-NOT: complex.pow
0 commit comments