50 lines · plain
1! RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s2! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s3 4! CHECK-LABEL: omp.declare_reduction @add_reduction_byref_box_Uxf32 : !fir.ref<!fir.box<!fir.array<?xf32>>> {{.*}} alloc {5! [...]6! CHECK: omp.yield7! CHECK-LABEL: } init {8! [...]9! CHECK: omp.yield10! CHECK-LABEL: } combiner {11! [...]12! CHECK: omp.yield13! CHECK-LABEL: } cleanup {14! [...]15! CHECK: omp.yield16! CHECK: }17 18! CHECK-LABEL: func.func @_QPtask_reduction19! CHECK-SAME: (%[[VAL_0:.*]]: !fir.box<!fir.array<?xf32>> {fir.bindc_name = "x"}) {20! CHECK: %[[VAL_1:.*]] = fir.dummy_scope : !fir.dscope21! CHECK: %[[VAL_2:.*]]:2 = hlfir.declare %[[VAL_0]] dummy_scope %[[VAL_1]]22! CHECK-SAME: {uniq_name = "_QFtask_reductionEx"} : (!fir.box<!fir.array<?xf32>>, !fir.dscope) -> (!fir.box<!fir.array<?xf32>>, !fir.box<!fir.array<?xf32>>)23! CHECK: omp.parallel {24! CHECK: %[[VAL_3:.*]] = fir.alloca !fir.box<!fir.array<?xf32>>25! CHECK: fir.store %[[VAL_2]]#0 to %[[VAL_3]] : !fir.ref<!fir.box<!fir.array<?xf32>>>26! CHECK: omp.taskgroup task_reduction(byref @add_reduction_byref_box_Uxf32 %[[VAL_3]] -> %[[VAL_4:.*]]: !fir.ref<!fir.box<!fir.array<?xf32>>>) {27! CHECK: %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_4]] 28! CHECK-SAME: {uniq_name = "_QFtask_reductionEx"} : (!fir.ref<!fir.box<!fir.array<?xf32>>>) -> (!fir.ref<!fir.box<!fir.array<?xf32>>>, !fir.ref<!fir.box<!fir.array<?xf32>>>)29! CHECK: omp.task in_reduction(byref @add_reduction_byref_box_Uxf32 %[[VAL_5]]#0 -> %[[VAL_6:.*]] : !fir.ref<!fir.box<!fir.array<?xf32>>>) {30! [...]31! CHECK: omp.terminator32! CHECK: }33! CHECK: omp.terminator34! CHECK: }35! CHECK: omp.terminator36! CHECK: }37! CHECK: return38! CHECK: }39 40subroutine task_reduction(x)41 real, dimension(:) :: x42 !$omp parallel43 !$omp taskgroup task_reduction(+:x)44 !$omp task in_reduction(+:x)45 x = x + 146 !$omp end task47 !$omp end taskgroup48 !$omp end parallel49end subroutine50