Skip to content

Commit 185b43f

Browse files
committed
Add all regions test.
1 parent f7837d5 commit 185b43f

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// Tests mapping reductions from fir to OpenMP (all regions).
2+
3+
// RUN: fir-opt --omp-do-concurrent-conversion="map-to=host" %s | FileCheck %s
4+
5+
fir.declare_reduction @add_reduction_i32 : i32 init {
6+
^bb0(%arg0: i32):
7+
fir.yield(%arg0 : i32)
8+
} combiner {
9+
^bb0(%arg0: i32, %arg1: i32):
10+
fir.yield(%arg0 : i32)
11+
} atomic {
12+
^bb0(%arg0: !fir.ref<i32>, %arg1: !fir.ref<i32>):
13+
fir.yield(%arg0 : !fir.ref<i32>)
14+
} cleanup {
15+
^bb0(%arg0: i32):
16+
fir.yield
17+
}
18+
19+
func.func @_QPdo_concurrent_reduce() {
20+
%3 = fir.alloca i32 {bindc_name = "s", uniq_name = "_QFdo_concurrent_reduceEs"}
21+
%4:2 = hlfir.declare %3 {uniq_name = "_QFdo_concurrent_reduceEs"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
22+
%c1 = arith.constant 1 : index
23+
fir.do_concurrent {
24+
%7 = fir.alloca i32 {bindc_name = "i"}
25+
%8:2 = hlfir.declare %7 {uniq_name = "_QFdo_concurrent_reduceEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
26+
fir.do_concurrent.loop (%arg0) = (%c1) to (%c1) step (%c1) reduce(@add_reduction_i32 #fir.reduce_attr<add> %4#0 -> %arg1 : !fir.ref<i32>) {
27+
%9 = fir.convert %arg0 : (index) -> i32
28+
fir.store %9 to %8#0 : !fir.ref<i32>
29+
}
30+
}
31+
return
32+
}
33+
34+
// CHECK-LABEL: omp.declare_reduction @add_reduction_i32.omp : i32 init {
35+
// CHECK: ^bb0(%[[VAL_0:.*]]: i32):
36+
// CHECK: omp.yield(%[[VAL_0]] : i32)
37+
38+
// CHECK-LABEL: } combiner {
39+
// CHECK: ^bb0(%[[VAL_0:.*]]: i32, %[[VAL_1:.*]]: i32):
40+
// CHECK: omp.yield(%[[VAL_0]] : i32)
41+
42+
// CHECK-LABEL: } atomic {
43+
// CHECK: ^bb0(%[[VAL_0:.*]]: !fir.ref<i32>, %[[VAL_1:.*]]: !fir.ref<i32>):
44+
// CHECK: omp.yield(%[[VAL_0]] : !fir.ref<i32>)
45+
46+
// CHECK-LABEL: } cleanup {
47+
// CHECK: ^bb0(%[[VAL_0:.*]]: i32):
48+
// CHECK: omp.yield
49+
// CHECK: }
50+
51+
// CHECK-LABEL: func.func @_QPdo_concurrent_reduce() {
52+
// CHECK: %[[VAL_0:.*]] = fir.alloca i32 {bindc_name = "i"}
53+
// CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] {uniq_name = "_QFdo_concurrent_reduceEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
54+
// CHECK: %[[VAL_2:.*]] = fir.alloca i32 {bindc_name = "s", uniq_name = "_QFdo_concurrent_reduceEs"}
55+
// CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_2]] {uniq_name = "_QFdo_concurrent_reduceEs"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
56+
// CHECK: %[[VAL_4:.*]] = arith.constant 1 : index
57+
// CHECK: omp.parallel {
58+
// CHECK: %[[VAL_5:.*]] = fir.alloca i32 {bindc_name = "i"}
59+
// CHECK: %[[VAL_6:.*]]:2 = hlfir.declare %[[VAL_5]] {uniq_name = "_QFdo_concurrent_reduceEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
60+
// CHECK: omp.wsloop reduction(@add_reduction_i32.omp %[[VAL_3]]#0 -> %[[VAL_7:.*]] : !fir.ref<i32>) {
61+
// CHECK: omp.loop_nest (%[[VAL_8:.*]]) : index = (%[[VAL_4]]) to (%[[VAL_4]]) inclusive step (%[[VAL_4]]) {
62+
// CHECK: %[[VAL_9:.*]] = fir.convert %[[VAL_8]] : (index) -> i32
63+
// CHECK: fir.store %[[VAL_9]] to %[[VAL_6]]#0 : !fir.ref<i32>
64+
// CHECK: omp.yield
65+
// CHECK: }
66+
// CHECK: }
67+
// CHECK: omp.terminator
68+
// CHECK: }
69+
// CHECK: return
70+
// CHECK: }

0 commit comments

Comments
 (0)