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