xref: /llvm-project/flang/test/Lower/OpenMP/same_var_first_lastprivate.f90 (revision 937cbce14c9aa956342a9c818c26a8a557802843)
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