1! RUN: %flang_fc1 -fopenmp -mmlir --openmp-enable-delayed-privatization-staging=true -emit-hlfir %s -o - | FileCheck %s 2 3subroutine first_and_lastprivate 4 integer i 5 integer :: var = 1 6 7 !$omp parallel do firstprivate(var) lastprivate(var) 8 do i=1,1 9 end do 10 !$omp end parallel do 11end subroutine 12 13! CHECK: omp.private {type = firstprivate} @{{.*}}Evar_firstprivate_ref_i32 : {{.*}} alloc { 14! CHECK: %[[ALLOC:.*]] = fir.alloca i32 {{.*}} 15! CHECK: %[[ALLOC_DECL:.*]]:2 = hlfir.declare %[[ALLOC]] 16! CHECK: omp.yield(%[[ALLOC_DECL]]#0 : !fir.ref<i32>) 17! CHECK: } copy { 18! CHECK: ^{{.*}}(%[[ORIG_REF:.*]]: {{.*}}, %[[PRIV_REF:.*]]: {{.*}}): 19! CHECK: %[[ORIG_VAL:.*]] = fir.load %[[ORIG_REF]] 20! CHECK: hlfir.assign %[[ORIG_VAL]] to %[[PRIV_REF]] 21! CHECK: omp.yield(%[[PRIV_REF]] : !fir.ref<i32>) 22! CHECK: } 23 24! CHECK: func.func @{{.*}}first_and_lastprivate() 25! CHECK: %[[ORIG_VAR_DECL:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "{{.*}}Evar"} 26! CHECK: omp.parallel { 27! CHECK: omp.barrier 28! CHECK: omp.wsloop private(@{{.*}}var_firstprivate_ref_i32 {{.*}}) { 29! CHECK: omp.loop_nest {{.*}} { 30! CHECK: %[[PRIV_VAR_DECL:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "{{.*}}Evar"} 31! CHECK: fir.if %{{.*}} { 32! CHECK: %[[PRIV_VAR_VAL:.*]] = fir.load %[[PRIV_VAR_DECL]]#0 : !fir.ref<i32> 33! CHECK: hlfir.assign %[[PRIV_VAR_VAL]] to %[[ORIG_VAR_DECL]]#0 34! CHECK: } 35! CHECK: omp.yield 36! CHECK: } 37! CHECK: } 38! CHECK: omp.terminator 39! CHECK: } 40