xref: /llvm-project/flang/test/Lower/OpenMP/wsloop-reduction-logical-or.f90 (revision 937cbce14c9aa956342a9c818c26a8a557802843)
15b66987cSKiran Chandramohan! RUN: bbc -emit-hlfir -fopenmp %s -o - | FileCheck %s
25b66987cSKiran Chandramohan! RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
35b66987cSKiran Chandramohan
4be9f8ffdSDavid Truby! NOTE: Assertions have been autogenerated by utils/generate-test-checks.py
5be9f8ffdSDavid Truby
6d84252e0SSergio Afonso! CHECK-LABEL:   omp.declare_reduction @or_reduction : !fir.logical<4> init {
7be9f8ffdSDavid Truby! CHECK:         ^bb0(%[[VAL_0:.*]]: !fir.logical<4>):
8be9f8ffdSDavid Truby! CHECK:           %[[VAL_1:.*]] = arith.constant false
9be9f8ffdSDavid Truby! CHECK:           %[[VAL_2:.*]] = fir.convert %[[VAL_1]] : (i1) -> !fir.logical<4>
10be9f8ffdSDavid Truby! CHECK:           omp.yield(%[[VAL_2]] : !fir.logical<4>)
11be9f8ffdSDavid Truby
12be9f8ffdSDavid Truby! CHECK-LABEL:   } combiner {
13be9f8ffdSDavid Truby! CHECK:         ^bb0(%[[VAL_0:.*]]: !fir.logical<4>, %[[VAL_1:.*]]: !fir.logical<4>):
14be9f8ffdSDavid Truby! CHECK:           %[[VAL_2:.*]] = fir.convert %[[VAL_0]] : (!fir.logical<4>) -> i1
15be9f8ffdSDavid Truby! CHECK:           %[[VAL_3:.*]] = fir.convert %[[VAL_1]] : (!fir.logical<4>) -> i1
16be9f8ffdSDavid Truby! CHECK:           %[[VAL_4:.*]] = arith.ori %[[VAL_2]], %[[VAL_3]] : i1
17be9f8ffdSDavid Truby! CHECK:           %[[VAL_5:.*]] = fir.convert %[[VAL_4]] : (i1) -> !fir.logical<4>
18be9f8ffdSDavid Truby! CHECK:           omp.yield(%[[VAL_5]] : !fir.logical<4>)
195b66987cSKiran Chandramohan! CHECK:         }
205b66987cSKiran Chandramohan
215b66987cSKiran Chandramohan! CHECK-LABEL:   func.func @_QPsimple_reduction(
22be9f8ffdSDavid Truby! CHECK-SAME:                                   %[[VAL_0:.*]]: !fir.ref<!fir.array<100x!fir.logical<4>>> {fir.bindc_name = "y"}) {
23be9f8ffdSDavid Truby! CHECK:           %[[VAL_1:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFsimple_reductionEi"}
24be9f8ffdSDavid Truby! CHECK:           %[[VAL_2:.*]]:2 = hlfir.declare %[[VAL_1]] {uniq_name = "_QFsimple_reductionEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
25be9f8ffdSDavid Truby! CHECK:           %[[VAL_3:.*]] = fir.alloca !fir.logical<4> {bindc_name = "x", uniq_name = "_QFsimple_reductionEx"}
26be9f8ffdSDavid Truby! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_3]] {uniq_name = "_QFsimple_reductionEx"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
27be9f8ffdSDavid Truby! CHECK:           %[[VAL_5:.*]] = arith.constant 100 : index
28be9f8ffdSDavid Truby! CHECK:           %[[VAL_6:.*]] = fir.shape %[[VAL_5]] : (index) -> !fir.shape<1>
291710c8cfSSlava Zakharin! CHECK:           %[[VAL_7:.*]]:2 = hlfir.declare %[[VAL_0]](%[[VAL_6]]) dummy_scope %{{[0-9]+}} {uniq_name = "_QFsimple_reductionEy"} : (!fir.ref<!fir.array<100x!fir.logical<4>>>, !fir.shape<1>, !fir.dscope) -> (!fir.ref<!fir.array<100x!fir.logical<4>>>, !fir.ref<!fir.array<100x!fir.logical<4>>>)
30be9f8ffdSDavid Truby! CHECK:           %[[VAL_8:.*]] = arith.constant true
31be9f8ffdSDavid Truby! CHECK:           %[[VAL_9:.*]] = fir.convert %[[VAL_8]] : (i1) -> !fir.logical<4>
32be9f8ffdSDavid Truby! CHECK:           hlfir.assign %[[VAL_9]] to %[[VAL_4]]#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>
33be9f8ffdSDavid Truby! CHECK:           omp.parallel {
34*937cbce1SKareem Ergawy! CHECK:             %[[VAL_10:.*]] = fir.alloca i32 {bindc_name = "i", pinned, {{.*}}}
35*937cbce1SKareem Ergawy! CHECK:             %[[VAL_11:.*]]:2 = hlfir.declare %[[VAL_10]] {uniq_name = "_QFsimple_reductionEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
36be9f8ffdSDavid Truby! CHECK:             %[[VAL_12:.*]] = arith.constant 1 : i32
37be9f8ffdSDavid Truby! CHECK:             %[[VAL_13:.*]] = arith.constant 100 : i32
38be9f8ffdSDavid Truby! CHECK:             %[[VAL_14:.*]] = arith.constant 1 : i32
39*937cbce1SKareem Ergawy! CHECK:             omp.wsloop reduction(@or_reduction %[[VAL_4]]#0 -> %[[VAL_15:.*]] : !fir.ref<!fir.logical<4>>) {
40ca4dbc27SSergio Afonso! CHECK-NEXT:          omp.loop_nest (%[[VAL_16:.*]]) : i32 = (%[[VAL_12]]) to (%[[VAL_13]]) inclusive step (%[[VAL_14]]) {
41be9f8ffdSDavid Truby! CHECK:                 %[[VAL_17:.*]]:2 = hlfir.declare %[[VAL_15]] {uniq_name = "_QFsimple_reductionEx"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
42ca4dbc27SSergio Afonso! CHECK:                 fir.store %[[VAL_16]] to %[[VAL_11]]#1 : !fir.ref<i32>
43be9f8ffdSDavid Truby! CHECK:                 %[[VAL_18:.*]] = fir.load %[[VAL_17]]#0 : !fir.ref<!fir.logical<4>>
44be9f8ffdSDavid Truby! CHECK:                 %[[VAL_19:.*]] = fir.load %[[VAL_11]]#0 : !fir.ref<i32>
45be9f8ffdSDavid Truby! CHECK:                 %[[VAL_20:.*]] = fir.convert %[[VAL_19]] : (i32) -> i64
46be9f8ffdSDavid Truby! CHECK:                 %[[VAL_21:.*]] = hlfir.designate %[[VAL_7]]#0 (%[[VAL_20]])  : (!fir.ref<!fir.array<100x!fir.logical<4>>>, i64) -> !fir.ref<!fir.logical<4>>
47be9f8ffdSDavid Truby! CHECK:                 %[[VAL_22:.*]] = fir.load %[[VAL_21]] : !fir.ref<!fir.logical<4>>
48be9f8ffdSDavid Truby! CHECK:                 %[[VAL_23:.*]] = fir.convert %[[VAL_18]] : (!fir.logical<4>) -> i1
49be9f8ffdSDavid Truby! CHECK:                 %[[VAL_24:.*]] = fir.convert %[[VAL_22]] : (!fir.logical<4>) -> i1
50be9f8ffdSDavid Truby! CHECK:                 %[[VAL_25:.*]] = arith.ori %[[VAL_23]], %[[VAL_24]] : i1
51be9f8ffdSDavid Truby! CHECK:                 %[[VAL_26:.*]] = fir.convert %[[VAL_25]] : (i1) -> !fir.logical<4>
52be9f8ffdSDavid Truby! CHECK:                 hlfir.assign %[[VAL_26]] to %[[VAL_17]]#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>
535b66987cSKiran Chandramohan! CHECK:                 omp.yield
545b66987cSKiran Chandramohan! CHECK:             omp.terminator
555b66987cSKiran Chandramohan! CHECK:           return
56be9f8ffdSDavid Truby
575b66987cSKiran Chandramohansubroutine simple_reduction(y)
585b66987cSKiran Chandramohan  logical :: x, y(100)
595b66987cSKiran Chandramohan  x = .true.
605b66987cSKiran Chandramohan  !$omp parallel
615b66987cSKiran Chandramohan  !$omp do reduction(.or.:x)
625b66987cSKiran Chandramohan  do i=1, 100
635b66987cSKiran Chandramohan    x = x .or. y(i)
645b66987cSKiran Chandramohan  end do
655b66987cSKiran Chandramohan  !$omp end do
665b66987cSKiran Chandramohan  !$omp end parallel
675b66987cSKiran Chandramohanend subroutine
685b66987cSKiran Chandramohan
695b66987cSKiran Chandramohan! CHECK-LABEL:   func.func @_QPsimple_reduction_switch_order(
70be9f8ffdSDavid Truby! CHECK-SAME:                                                %[[VAL_0:.*]]: !fir.ref<!fir.array<100x!fir.logical<4>>> {fir.bindc_name = "y"}) {
71be9f8ffdSDavid Truby! CHECK:           %[[VAL_1:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFsimple_reduction_switch_orderEi"}
72be9f8ffdSDavid Truby! CHECK:           %[[VAL_2:.*]]:2 = hlfir.declare %[[VAL_1]] {uniq_name = "_QFsimple_reduction_switch_orderEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
73be9f8ffdSDavid Truby! CHECK:           %[[VAL_3:.*]] = fir.alloca !fir.logical<4> {bindc_name = "x", uniq_name = "_QFsimple_reduction_switch_orderEx"}
74be9f8ffdSDavid Truby! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_3]] {uniq_name = "_QFsimple_reduction_switch_orderEx"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
75be9f8ffdSDavid Truby! CHECK:           %[[VAL_5:.*]] = arith.constant 100 : index
76be9f8ffdSDavid Truby! CHECK:           %[[VAL_6:.*]] = fir.shape %[[VAL_5]] : (index) -> !fir.shape<1>
771710c8cfSSlava Zakharin! CHECK:           %[[VAL_7:.*]]:2 = hlfir.declare %[[VAL_0]](%[[VAL_6]]) dummy_scope %{{[0-9]+}} {uniq_name = "_QFsimple_reduction_switch_orderEy"} : (!fir.ref<!fir.array<100x!fir.logical<4>>>, !fir.shape<1>, !fir.dscope) -> (!fir.ref<!fir.array<100x!fir.logical<4>>>, !fir.ref<!fir.array<100x!fir.logical<4>>>)
78be9f8ffdSDavid Truby! CHECK:           %[[VAL_8:.*]] = arith.constant true
79be9f8ffdSDavid Truby! CHECK:           %[[VAL_9:.*]] = fir.convert %[[VAL_8]] : (i1) -> !fir.logical<4>
80be9f8ffdSDavid Truby! CHECK:           hlfir.assign %[[VAL_9]] to %[[VAL_4]]#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>
81be9f8ffdSDavid Truby! CHECK:           omp.parallel {
82*937cbce1SKareem Ergawy! CHECK:             %[[VAL_10:.*]] = fir.alloca i32 {bindc_name = "i", pinned, {{.*}}}
83*937cbce1SKareem Ergawy! CHECK:             %[[VAL_11:.*]]:2 = hlfir.declare %[[VAL_10]] {uniq_name = "_QFsimple_reduction_switch_orderEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
84be9f8ffdSDavid Truby! CHECK:             %[[VAL_12:.*]] = arith.constant 1 : i32
85be9f8ffdSDavid Truby! CHECK:             %[[VAL_13:.*]] = arith.constant 100 : i32
86be9f8ffdSDavid Truby! CHECK:             %[[VAL_14:.*]] = arith.constant 1 : i32
87*937cbce1SKareem Ergawy! CHECK:             omp.wsloop reduction(@or_reduction %[[VAL_4]]#0 -> %[[VAL_15:.*]] : !fir.ref<!fir.logical<4>>) {
88ca4dbc27SSergio Afonso! CHECK-NEXT:          omp.loop_nest (%[[VAL_16:.*]]) : i32 = (%[[VAL_12]]) to (%[[VAL_13]]) inclusive step (%[[VAL_14]]) {
89be9f8ffdSDavid Truby! CHECK:                 %[[VAL_17:.*]]:2 = hlfir.declare %[[VAL_15]] {uniq_name = "_QFsimple_reduction_switch_orderEx"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
90ca4dbc27SSergio Afonso! CHECK:                 fir.store %[[VAL_16]] to %[[VAL_11]]#1 : !fir.ref<i32>
91be9f8ffdSDavid Truby! CHECK:                 %[[VAL_18:.*]] = fir.load %[[VAL_11]]#0 : !fir.ref<i32>
92be9f8ffdSDavid Truby! CHECK:                 %[[VAL_19:.*]] = fir.convert %[[VAL_18]] : (i32) -> i64
93be9f8ffdSDavid Truby! CHECK:                 %[[VAL_20:.*]] = hlfir.designate %[[VAL_7]]#0 (%[[VAL_19]])  : (!fir.ref<!fir.array<100x!fir.logical<4>>>, i64) -> !fir.ref<!fir.logical<4>>
94be9f8ffdSDavid Truby! CHECK:                 %[[VAL_21:.*]] = fir.load %[[VAL_20]] : !fir.ref<!fir.logical<4>>
95be9f8ffdSDavid Truby! CHECK:                 %[[VAL_22:.*]] = fir.load %[[VAL_17]]#0 : !fir.ref<!fir.logical<4>>
96be9f8ffdSDavid Truby! CHECK:                 %[[VAL_23:.*]] = fir.convert %[[VAL_21]] : (!fir.logical<4>) -> i1
97be9f8ffdSDavid Truby! CHECK:                 %[[VAL_24:.*]] = fir.convert %[[VAL_22]] : (!fir.logical<4>) -> i1
98be9f8ffdSDavid Truby! CHECK:                 %[[VAL_25:.*]] = arith.ori %[[VAL_23]], %[[VAL_24]] : i1
99be9f8ffdSDavid Truby! CHECK:                 %[[VAL_26:.*]] = fir.convert %[[VAL_25]] : (i1) -> !fir.logical<4>
100be9f8ffdSDavid Truby! CHECK:                 hlfir.assign %[[VAL_26]] to %[[VAL_17]]#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>
1015b66987cSKiran Chandramohan! CHECK:                 omp.yield
1025b66987cSKiran Chandramohan! CHECK:             omp.terminator
1035b66987cSKiran Chandramohan! CHECK:           return
104be9f8ffdSDavid Truby
1055b66987cSKiran Chandramohansubroutine simple_reduction_switch_order(y)
1065b66987cSKiran Chandramohan  logical :: x, y(100)
1075b66987cSKiran Chandramohan  x = .true.
1085b66987cSKiran Chandramohan  !$omp parallel
1095b66987cSKiran Chandramohan  !$omp do reduction(.or.:x)
1105b66987cSKiran Chandramohan  do i=1, 100
1115b66987cSKiran Chandramohan  x = y(i) .or. x
1125b66987cSKiran Chandramohan  end do
1135b66987cSKiran Chandramohan  !$omp end do
1145b66987cSKiran Chandramohan  !$omp end parallel
1155b66987cSKiran Chandramohanend subroutine
1165b66987cSKiran Chandramohan
117be9f8ffdSDavid Truby! CHECK-LABEL:   func.func @_QPmultiple_reductions(
118be9f8ffdSDavid Truby! CHECK-SAME:                                      %[[VAL_0:.*]]: !fir.ref<!fir.array<100x!fir.logical<4>>> {fir.bindc_name = "w"}) {
119be9f8ffdSDavid Truby! CHECK:           %[[VAL_1:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFmultiple_reductionsEi"}
120be9f8ffdSDavid Truby! CHECK:           %[[VAL_2:.*]]:2 = hlfir.declare %[[VAL_1]] {uniq_name = "_QFmultiple_reductionsEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
121be9f8ffdSDavid Truby! CHECK:           %[[VAL_3:.*]] = arith.constant 100 : index
122be9f8ffdSDavid Truby! CHECK:           %[[VAL_4:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1>
1231710c8cfSSlava Zakharin! CHECK:           %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_0]](%[[VAL_4]]) dummy_scope %{{[0-9]+}} {uniq_name = "_QFmultiple_reductionsEw"} : (!fir.ref<!fir.array<100x!fir.logical<4>>>, !fir.shape<1>, !fir.dscope) -> (!fir.ref<!fir.array<100x!fir.logical<4>>>, !fir.ref<!fir.array<100x!fir.logical<4>>>)
124be9f8ffdSDavid Truby! CHECK:           %[[VAL_6:.*]] = fir.alloca !fir.logical<4> {bindc_name = "x", uniq_name = "_QFmultiple_reductionsEx"}
125be9f8ffdSDavid Truby! CHECK:           %[[VAL_7:.*]]:2 = hlfir.declare %[[VAL_6]] {uniq_name = "_QFmultiple_reductionsEx"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
126be9f8ffdSDavid Truby! CHECK:           %[[VAL_8:.*]] = fir.alloca !fir.logical<4> {bindc_name = "y", uniq_name = "_QFmultiple_reductionsEy"}
127be9f8ffdSDavid Truby! CHECK:           %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_8]] {uniq_name = "_QFmultiple_reductionsEy"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
128be9f8ffdSDavid Truby! CHECK:           %[[VAL_10:.*]] = fir.alloca !fir.logical<4> {bindc_name = "z", uniq_name = "_QFmultiple_reductionsEz"}
129be9f8ffdSDavid Truby! CHECK:           %[[VAL_11:.*]]:2 = hlfir.declare %[[VAL_10]] {uniq_name = "_QFmultiple_reductionsEz"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
130be9f8ffdSDavid Truby! CHECK:           %[[VAL_12:.*]] = arith.constant true
131be9f8ffdSDavid Truby! CHECK:           %[[VAL_13:.*]] = fir.convert %[[VAL_12]] : (i1) -> !fir.logical<4>
132be9f8ffdSDavid Truby! CHECK:           hlfir.assign %[[VAL_13]] to %[[VAL_7]]#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>
133be9f8ffdSDavid Truby! CHECK:           %[[VAL_14:.*]] = arith.constant true
134be9f8ffdSDavid Truby! CHECK:           %[[VAL_15:.*]] = fir.convert %[[VAL_14]] : (i1) -> !fir.logical<4>
135be9f8ffdSDavid Truby! CHECK:           hlfir.assign %[[VAL_15]] to %[[VAL_9]]#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>
136be9f8ffdSDavid Truby! CHECK:           %[[VAL_16:.*]] = arith.constant true
137be9f8ffdSDavid Truby! CHECK:           %[[VAL_17:.*]] = fir.convert %[[VAL_16]] : (i1) -> !fir.logical<4>
138be9f8ffdSDavid Truby! CHECK:           hlfir.assign %[[VAL_17]] to %[[VAL_11]]#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>
139be9f8ffdSDavid Truby! CHECK:           omp.parallel {
140*937cbce1SKareem Ergawy! CHECK:             %[[VAL_18:.*]] = fir.alloca i32 {bindc_name = "i", pinned, {{.*}}}
141*937cbce1SKareem Ergawy! CHECK:             %[[VAL_19:.*]]:2 = hlfir.declare %[[VAL_18]] {uniq_name = "_QFmultiple_reductionsEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
142be9f8ffdSDavid Truby! CHECK:             %[[VAL_20:.*]] = arith.constant 1 : i32
143be9f8ffdSDavid Truby! CHECK:             %[[VAL_21:.*]] = arith.constant 100 : i32
144be9f8ffdSDavid Truby! CHECK:             %[[VAL_22:.*]] = arith.constant 1 : i32
145*937cbce1SKareem Ergawy! CHECK:             omp.wsloop reduction(@or_reduction %[[VAL_7]]#0 -> %[[VAL_23:.*]], @or_reduction %[[VAL_9]]#0 -> %[[VAL_24:.*]], @or_reduction %[[VAL_11]]#0 -> %[[VAL_25:.*]] : !fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>) {
146ca4dbc27SSergio Afonso! CHECK-NEXT:          omp.loop_nest (%[[VAL_26:.*]]) : i32 = (%[[VAL_20]]) to (%[[VAL_21]]) inclusive step (%[[VAL_22]]) {
147be9f8ffdSDavid Truby! CHECK:                 %[[VAL_27:.*]]:2 = hlfir.declare %[[VAL_23]] {uniq_name = "_QFmultiple_reductionsEx"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
148be9f8ffdSDavid Truby! CHECK:                 %[[VAL_28:.*]]:2 = hlfir.declare %[[VAL_24]] {uniq_name = "_QFmultiple_reductionsEy"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
149be9f8ffdSDavid Truby! CHECK:                 %[[VAL_29:.*]]:2 = hlfir.declare %[[VAL_25]] {uniq_name = "_QFmultiple_reductionsEz"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
150ca4dbc27SSergio Afonso! CHECK:                 fir.store %[[VAL_26]] to %[[VAL_19]]#1 : !fir.ref<i32>
151be9f8ffdSDavid Truby! CHECK:                 %[[VAL_30:.*]] = fir.load %[[VAL_27]]#0 : !fir.ref<!fir.logical<4>>
152be9f8ffdSDavid Truby! CHECK:                 %[[VAL_31:.*]] = fir.load %[[VAL_19]]#0 : !fir.ref<i32>
153be9f8ffdSDavid Truby! CHECK:                 %[[VAL_32:.*]] = fir.convert %[[VAL_31]] : (i32) -> i64
154be9f8ffdSDavid Truby! CHECK:                 %[[VAL_33:.*]] = hlfir.designate %[[VAL_5]]#0 (%[[VAL_32]])  : (!fir.ref<!fir.array<100x!fir.logical<4>>>, i64) -> !fir.ref<!fir.logical<4>>
155be9f8ffdSDavid Truby! CHECK:                 %[[VAL_34:.*]] = fir.load %[[VAL_33]] : !fir.ref<!fir.logical<4>>
156be9f8ffdSDavid Truby! CHECK:                 %[[VAL_35:.*]] = fir.convert %[[VAL_30]] : (!fir.logical<4>) -> i1
157be9f8ffdSDavid Truby! CHECK:                 %[[VAL_36:.*]] = fir.convert %[[VAL_34]] : (!fir.logical<4>) -> i1
158be9f8ffdSDavid Truby! CHECK:                 %[[VAL_37:.*]] = arith.ori %[[VAL_35]], %[[VAL_36]] : i1
159be9f8ffdSDavid Truby! CHECK:                 %[[VAL_38:.*]] = fir.convert %[[VAL_37]] : (i1) -> !fir.logical<4>
160be9f8ffdSDavid Truby! CHECK:                 hlfir.assign %[[VAL_38]] to %[[VAL_27]]#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>
161be9f8ffdSDavid Truby! CHECK:                 %[[VAL_39:.*]] = fir.load %[[VAL_28]]#0 : !fir.ref<!fir.logical<4>>
162be9f8ffdSDavid Truby! CHECK:                 %[[VAL_40:.*]] = fir.load %[[VAL_19]]#0 : !fir.ref<i32>
163be9f8ffdSDavid Truby! CHECK:                 %[[VAL_41:.*]] = fir.convert %[[VAL_40]] : (i32) -> i64
164be9f8ffdSDavid Truby! CHECK:                 %[[VAL_42:.*]] = hlfir.designate %[[VAL_5]]#0 (%[[VAL_41]])  : (!fir.ref<!fir.array<100x!fir.logical<4>>>, i64) -> !fir.ref<!fir.logical<4>>
165be9f8ffdSDavid Truby! CHECK:                 %[[VAL_43:.*]] = fir.load %[[VAL_42]] : !fir.ref<!fir.logical<4>>
166be9f8ffdSDavid Truby! CHECK:                 %[[VAL_44:.*]] = fir.convert %[[VAL_39]] : (!fir.logical<4>) -> i1
167be9f8ffdSDavid Truby! CHECK:                 %[[VAL_45:.*]] = fir.convert %[[VAL_43]] : (!fir.logical<4>) -> i1
168be9f8ffdSDavid Truby! CHECK:                 %[[VAL_46:.*]] = arith.ori %[[VAL_44]], %[[VAL_45]] : i1
169be9f8ffdSDavid Truby! CHECK:                 %[[VAL_47:.*]] = fir.convert %[[VAL_46]] : (i1) -> !fir.logical<4>
170be9f8ffdSDavid Truby! CHECK:                 hlfir.assign %[[VAL_47]] to %[[VAL_28]]#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>
171be9f8ffdSDavid Truby! CHECK:                 %[[VAL_48:.*]] = fir.load %[[VAL_29]]#0 : !fir.ref<!fir.logical<4>>
172be9f8ffdSDavid Truby! CHECK:                 %[[VAL_49:.*]] = fir.load %[[VAL_19]]#0 : !fir.ref<i32>
173be9f8ffdSDavid Truby! CHECK:                 %[[VAL_50:.*]] = fir.convert %[[VAL_49]] : (i32) -> i64
174be9f8ffdSDavid Truby! CHECK:                 %[[VAL_51:.*]] = hlfir.designate %[[VAL_5]]#0 (%[[VAL_50]])  : (!fir.ref<!fir.array<100x!fir.logical<4>>>, i64) -> !fir.ref<!fir.logical<4>>
175be9f8ffdSDavid Truby! CHECK:                 %[[VAL_52:.*]] = fir.load %[[VAL_51]] : !fir.ref<!fir.logical<4>>
176be9f8ffdSDavid Truby! CHECK:                 %[[VAL_53:.*]] = fir.convert %[[VAL_48]] : (!fir.logical<4>) -> i1
177be9f8ffdSDavid Truby! CHECK:                 %[[VAL_54:.*]] = fir.convert %[[VAL_52]] : (!fir.logical<4>) -> i1
178be9f8ffdSDavid Truby! CHECK:                 %[[VAL_55:.*]] = arith.ori %[[VAL_53]], %[[VAL_54]] : i1
179be9f8ffdSDavid Truby! CHECK:                 %[[VAL_56:.*]] = fir.convert %[[VAL_55]] : (i1) -> !fir.logical<4>
180be9f8ffdSDavid Truby! CHECK:                 hlfir.assign %[[VAL_56]] to %[[VAL_29]]#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>
1815b66987cSKiran Chandramohan! CHECK:                 omp.yield
1825b66987cSKiran Chandramohan! CHECK:             omp.terminator
1835b66987cSKiran Chandramohan! CHECK:           return
184be9f8ffdSDavid Truby
185be9f8ffdSDavid Truby
186be9f8ffdSDavid Truby
1875b66987cSKiran Chandramohansubroutine multiple_reductions(w)
1885b66987cSKiran Chandramohan  logical :: x,y,z,w(100)
1895b66987cSKiran Chandramohan  x = .true.
1905b66987cSKiran Chandramohan  y = .true.
1915b66987cSKiran Chandramohan  z = .true.
1925b66987cSKiran Chandramohan  !$omp parallel
1935b66987cSKiran Chandramohan  !$omp do reduction(.or.:x,y,z)
1945b66987cSKiran Chandramohan  do i=1, 100
1955b66987cSKiran Chandramohan  x = x .or. w(i)
1965b66987cSKiran Chandramohan  y = y .or. w(i)
1975b66987cSKiran Chandramohan  z = z .or. w(i)
1985b66987cSKiran Chandramohan  end do
1995b66987cSKiran Chandramohan  !$omp end do
2005b66987cSKiran Chandramohan  !$omp end parallel
2015b66987cSKiran Chandramohanend subroutine
2025b66987cSKiran Chandramohan
203