xref: /llvm-project/flang/test/Lower/OpenMP/DelayedPrivatization/wsloop.f90 (revision 937cbce14c9aa956342a9c818c26a8a557802843)
1! RUN: %flang_fc1 -emit-hlfir -fopenmp -mmlir --openmp-enable-delayed-privatization-staging \
2! RUN:   -o - %s 2>&1 | FileCheck %s
3! RUN: bbc -emit-hlfir -fopenmp --openmp-enable-delayed-privatization-staging -o - %s 2>&1 \
4! RUN:   | FileCheck %s
5
6subroutine wsloop_private
7    implicit none
8    integer :: x, i
9
10    !$omp parallel do firstprivate(x)
11    do i = 0, 10
12      x = x + i
13    end do
14end subroutine wsloop_private
15
16! CHECK: omp.private {type = private} @[[I_PRIVATIZER:.*i_private_ref_i32]]
17! CHECK: omp.private {type = firstprivate} @[[X_PRIVATIZER:.*x_firstprivate_ref_i32]]
18
19! CHECK: func.func @{{.*}}() {
20! CHECK:   %[[I_DECL:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "{{.*}}i"}
21! CHECK:   %[[X_DECL:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "{{.*}}x"}
22
23! CHECK:   omp.parallel {
24! CHECK:     omp.wsloop private(
25! CHECK-SAME:  @[[X_PRIVATIZER]] %[[X_DECL]]#0 -> %[[X_ARG:[^[:space:]]+]],
26! CHECK-SAME:  @[[I_PRIVATIZER]] %[[I_DECL]]#0 -> %[[I_ARG:.*]] : {{.*}}) {
27
28! CHECK:       omp.loop_nest (%[[IV:.*]]) : i32 = {{.*}} {
29! CHECK:         %[[X_PRIV_DECL:.*]]:2 = hlfir.declare %[[X_ARG]] {uniq_name = "{{.*}}x"}
30! CHECK:         %[[I_PRIV_DECL:.*]]:2 = hlfir.declare %[[I_ARG]] {uniq_name = "{{.*}}i"}
31! CHECK:         fir.store %[[IV]] to %[[I_PRIV_DECL]]#1
32! CHECK:         %[[X_VAL:.*]] = fir.load %[[X_PRIV_DECL]]#0
33! CHECK:         %[[I_VAL:.*]] = fir.load %[[I_PRIV_DECL]]#0
34! CHECK:         %[[ADD_VAL:.*]] = arith.addi %[[X_VAL]], %[[I_VAL]]
35! CHECK:         hlfir.assign %[[ADD_VAL]] to %[[X_PRIV_DECL]]#0
36! CHECK:         omp.yield
37! CHECK:       }
38! CHECK:     }
39
40! CHECK:     omp.terminator
41! CHECK:   }
42! CHECK: }
43