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