xref: /llvm-project/flang/test/Lower/OpenMP/delayed-privatization-reduction-byref.f90 (revision d0f67773b213383b6e1c9331fb00f2d4c14bfcb2)
1! Test that reductions and delayed privatization work properly togehter. Since
2! both types of clauses add block arguments to the OpenMP region, we make sure
3! that the block arguments are added in the proper order (reductions first and
4! then delayed privatization.
5
6! RUN: bbc -emit-hlfir -fopenmp --force-byref-reduction --openmp-enable-delayed-privatization -o - %s 2>&1 | FileCheck %s
7
8subroutine red_and_delayed_private
9    integer :: red
10    integer :: prv
11
12    red = 0
13    prv = 10
14
15    !$omp parallel reduction(+:red) private(prv)
16    red = red + 1
17    prv = 20
18    !$omp end parallel
19end subroutine
20
21! CHECK-LABEL: omp.private {type = private}
22! CHECK-SAME: @[[PRIVATIZER_SYM:.*]] : !fir.ref<i32> alloc {
23
24! CHECK-LABEL: omp.declare_reduction
25! CHECK-SAME: @[[REDUCTION_SYM:.*]] : !fir.ref<i32> alloc
26
27! CHECK-LABEL: _QPred_and_delayed_private
28! CHECK: omp.parallel
29! CHECK-SAME: private(@[[PRIVATIZER_SYM]] %{{.*}} -> %arg0 : !fir.ref<i32>)
30! CHECK-SAME: reduction(byref @[[REDUCTION_SYM]] %{{.*}} -> %arg1 : !fir.ref<i32>) {
31