2
2
3
3
! RUN: bbc -fopenacc -emit-fir %s -o - | FileCheck %s
4
4
5
+ ! CHECK-LABEL: acc.reduction.recipe @reduction_mul_f32 : f32 reduction_operator <mul> init {
6
+ ! CHECK: ^bb0(%{{.*}}: f32):
7
+ ! CHECK: %[[INIT:.*]] = arith.constant 1.000000e+00 : f32
8
+ ! CHECK: acc.yield %[[INIT]] : f32
9
+ ! CHECK: } combiner {
10
+ ! CHECK: ^bb0(%[[ARG0:.*]]: f32, %[[ARG1:.*]]: f32):
11
+ ! CHECK: %[[COMBINED:.*]] = arith.mulf %[[ARG0]], %[[ARG1]] {{.*}} : f32
12
+ ! CHECK: acc.yield %[[COMBINED]] : f32
13
+ ! CHECK: }
14
+
15
+ ! CHECK-LABEL: acc.reduction.recipe @reduction_mul_i32 : i32 reduction_operator <mul> init {
16
+ ! CHECK: ^bb0(%{{.*}}: i32):
17
+ ! CHECK: %[[INIT:.*]] = arith.constant 1 : i32
18
+ ! CHECK: acc.yield %[[INIT]] : i32
19
+ ! CHECK: } combiner {
20
+ ! CHECK: ^bb0(%[[ARG0:.*]]: i32, %[[ARG1:.*]]: i32):
21
+ ! CHECK: %[[COMBINED:.*]] = arith.muli %[[ARG0]], %[[ARG1]] : i32
22
+ ! CHECK: acc.yield %[[COMBINED]] : i32
23
+ ! CHECK: }
24
+
5
25
! CHECK-LABEL: acc.reduction.recipe @reduction_add_f32 : f32 reduction_operator <add> init {
6
26
! CHECK: ^bb0(%{{.*}}: f32):
7
27
! CHECK: %[[INIT:.*]] = arith.constant 0.000000e+00 : f32
@@ -34,7 +54,7 @@ subroutine acc_reduction_add_int(a, b)
34
54
35
55
! CHECK-LABEL: func.func @_QPacc_reduction_add_int(
36
56
! CHECK-SAME: %{{.*}}: !fir.ref<!fir.array<100xi32>> {fir.bindc_name = "a"}, %[[B:.*]]: !fir.ref<i32> {fir.bindc_name = "b"})
37
- ! CHECK: acc.loop reduction(@reduction_add_i32 -> %[[B]] : !fir.ref<i32>) {
57
+ ! CHECK: acc.loop reduction(@reduction_add_i32 -> %[[B]] : !fir.ref<i32>)
38
58
39
59
subroutine acc_reduction_add_float (a , b )
40
60
real :: a(100 ), b
@@ -49,3 +69,31 @@ subroutine acc_reduction_add_float(a, b)
49
69
! CHECK-LABEL: func.func @_QPacc_reduction_add_float(
50
70
! CHECK-SAME: %{{.*}}: !fir.ref<!fir.array<100xf32>> {fir.bindc_name = "a"}, %[[B:.*]]: !fir.ref<f32> {fir.bindc_name = "b"})
51
71
! CHECK: acc.loop reduction(@reduction_add_f32 -> %[[B]] : !fir.ref<f32>)
72
+
73
+ subroutine acc_reduction_mul_int (a , b )
74
+ integer :: a(100 )
75
+ integer :: i, b
76
+
77
+ ! $acc loop reduction(*:b)
78
+ do i = 1 , 100
79
+ b = b * a(i)
80
+ end do
81
+ end subroutine
82
+
83
+ ! CHECK-LABEL: func.func @_QPacc_reduction_mul_int(
84
+ ! CHECK-SAME: %{{.*}}: !fir.ref<!fir.array<100xi32>> {fir.bindc_name = "a"}, %[[B:.*]]: !fir.ref<i32> {fir.bindc_name = "b"})
85
+ ! CHECK: acc.loop reduction(@reduction_mul_i32 -> %[[B]] : !fir.ref<i32>)
86
+
87
+ subroutine acc_reduction_mul_float (a , b )
88
+ real :: a(100 ), b
89
+ integer :: i
90
+
91
+ ! $acc loop reduction(*:b)
92
+ do i = 1 , 100
93
+ b = b * a(i)
94
+ end do
95
+ end subroutine
96
+
97
+ ! CHECK-LABEL: func.func @_QPacc_reduction_mul_float(
98
+ ! CHECK-SAME: %{{.*}}: !fir.ref<!fir.array<100xf32>> {fir.bindc_name = "a"}, %[[B:.*]]: !fir.ref<f32> {fir.bindc_name = "b"})
99
+ ! CHECK: acc.loop reduction(@reduction_mul_f32 -> %[[B]] : !fir.ref<f32>)
0 commit comments