xref: /llvm-project/flang/test/Lower/OpenMP/DelayedPrivatization/wsloop.f90 (revision 937cbce14c9aa956342a9c818c26a8a557802843)
1*937cbce1SKareem Ergawy! RUN: %flang_fc1 -emit-hlfir -fopenmp -mmlir --openmp-enable-delayed-privatization-staging \
294488445SKareem Ergawy! RUN:   -o - %s 2>&1 | FileCheck %s
3*937cbce1SKareem Ergawy! RUN: bbc -emit-hlfir -fopenmp --openmp-enable-delayed-privatization-staging -o - %s 2>&1 \
494488445SKareem Ergawy! RUN:   | FileCheck %s
594488445SKareem Ergawy
694488445SKareem Ergawysubroutine wsloop_private
794488445SKareem Ergawy    implicit none
894488445SKareem Ergawy    integer :: x, i
994488445SKareem Ergawy
1094488445SKareem Ergawy    !$omp parallel do firstprivate(x)
1194488445SKareem Ergawy    do i = 0, 10
1294488445SKareem Ergawy      x = x + i
1394488445SKareem Ergawy    end do
1494488445SKareem Ergawyend subroutine wsloop_private
1594488445SKareem Ergawy
1694488445SKareem Ergawy! CHECK: omp.private {type = private} @[[I_PRIVATIZER:.*i_private_ref_i32]]
1794488445SKareem Ergawy! CHECK: omp.private {type = firstprivate} @[[X_PRIVATIZER:.*x_firstprivate_ref_i32]]
1894488445SKareem Ergawy
1994488445SKareem Ergawy! CHECK: func.func @{{.*}}() {
2094488445SKareem Ergawy! CHECK:   %[[I_DECL:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "{{.*}}i"}
2194488445SKareem Ergawy! CHECK:   %[[X_DECL:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "{{.*}}x"}
2294488445SKareem Ergawy
2394488445SKareem Ergawy! CHECK:   omp.parallel {
2494488445SKareem Ergawy! CHECK:     omp.wsloop private(
2594488445SKareem Ergawy! CHECK-SAME:  @[[X_PRIVATIZER]] %[[X_DECL]]#0 -> %[[X_ARG:[^[:space:]]+]],
2694488445SKareem Ergawy! CHECK-SAME:  @[[I_PRIVATIZER]] %[[I_DECL]]#0 -> %[[I_ARG:.*]] : {{.*}}) {
2794488445SKareem Ergawy
2894488445SKareem Ergawy! CHECK:       omp.loop_nest (%[[IV:.*]]) : i32 = {{.*}} {
2994488445SKareem Ergawy! CHECK:         %[[X_PRIV_DECL:.*]]:2 = hlfir.declare %[[X_ARG]] {uniq_name = "{{.*}}x"}
3094488445SKareem Ergawy! CHECK:         %[[I_PRIV_DECL:.*]]:2 = hlfir.declare %[[I_ARG]] {uniq_name = "{{.*}}i"}
3194488445SKareem Ergawy! CHECK:         fir.store %[[IV]] to %[[I_PRIV_DECL]]#1
3294488445SKareem Ergawy! CHECK:         %[[X_VAL:.*]] = fir.load %[[X_PRIV_DECL]]#0
3394488445SKareem Ergawy! CHECK:         %[[I_VAL:.*]] = fir.load %[[I_PRIV_DECL]]#0
3494488445SKareem Ergawy! CHECK:         %[[ADD_VAL:.*]] = arith.addi %[[X_VAL]], %[[I_VAL]]
3594488445SKareem Ergawy! CHECK:         hlfir.assign %[[ADD_VAL]] to %[[X_PRIV_DECL]]#0
3694488445SKareem Ergawy! CHECK:         omp.yield
3794488445SKareem Ergawy! CHECK:       }
3894488445SKareem Ergawy! CHECK:     }
3994488445SKareem Ergawy
4094488445SKareem Ergawy! CHECK:     omp.terminator
4194488445SKareem Ergawy! CHECK:   }
4294488445SKareem Ergawy! CHECK: }
43