Skip to content

Commit 423fdaf

Browse files
committed
[flang][OpenMP] Enable delayed privatizaiton by defualt omp.wsloop
This enable delayed privatization by default for `omp.wsloop` ops, with one caveat! I had to workaround the "impure" alloc region issue that being resolved at the moment. The workaround detects whether the alloc region's argument is used in the region and at the same time defined in block that does not dominate the chosen alloca insertion point. If so, we move the alloca insertion point below the defining instruction of the alloc region argument. This basically reverts to the non-delayed-privatizaiton behavior.
1 parent 09a8b7c commit 423fdaf

File tree

73 files changed

+451
-563
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+451
-563
lines changed

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2094,7 +2094,7 @@ static void genStandaloneDo(lower::AbstractConverter &converter,
20942094

20952095
DataSharingProcessor dsp(converter, semaCtx, item->clauses, eval,
20962096
/*shouldCollectPreDeterminedSymbols=*/true,
2097-
enableDelayedPrivatizationStaging, symTable);
2097+
enableDelayedPrivatization, symTable);
20982098
dsp.processStep1(&wsloopClauseOps);
20992099

21002100
mlir::omp::LoopNestOperands loopNestClauseOps;

flang/test/Lower/OpenMP/DelayedPrivatization/wsloop.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
! RUN: %flang_fc1 -emit-hlfir -fopenmp -mmlir --openmp-enable-delayed-privatization-staging \
1+
! RUN: %flang_fc1 -emit-hlfir -fopenmp \
22
! RUN: -o - %s 2>&1 | FileCheck %s
3-
! RUN: bbc -emit-hlfir -fopenmp --openmp-enable-delayed-privatization-staging -o - %s 2>&1 \
3+
! RUN: bbc -emit-hlfir -fopenmp -o - %s 2>&1 \
44
! RUN: | FileCheck %s
55

66
subroutine wsloop_private

flang/test/Lower/OpenMP/Todo/omp-default-clause-inner-loop.f90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,10 @@
99
! The string "EXPECTED" denotes the expected FIR
1010

1111
! CHECK: omp.parallel private(@{{.*}} %{{.*}} -> %[[PRIVATE_Y:.*]], @{{.*}} %{{.*}} -> %[[PRIVATE_Y:.*]] : !fir.ref<i32>, !fir.ref<i32>) {
12-
! CHECK: %[[TEMP:.*]] = fir.alloca i32 {bindc_name = "x", pinned, {{.*}}}
1312
! CHECK: %[[const_1:.*]] = arith.constant 1 : i32
1413
! CHECK: %[[const_2:.*]] = arith.constant 10 : i32
1514
! CHECK: %[[const_3:.*]] = arith.constant 1 : i32
16-
! CHECK: omp.wsloop {
15+
! CHECK: omp.wsloop private(@{{.*}} %{{.*}} -> %[[TEMP:.*]] : !fir.ref<i32>) {
1716
! CHECK-NEXT: omp.loop_nest (%[[ARG:.*]]) : i32 = (%[[const_1]]) to (%[[const_2]]) inclusive step (%[[const_3]]) {
1817
! CHECK: fir.store %[[ARG]] to %[[TEMP]] : !fir.ref<i32>
1918
! EXPECTED: %[[temp_1:.*]] = fir.load %[[PRIVATE_Z]] : !fir.ref<i32>

flang/test/Lower/OpenMP/associate.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
!CHECK: omp.parallel {
77
!CHECK-NOT: hlfir.declare {{.*}} {uniq_name = "_QFtest_parallel_assocEa"}
88
!CHECK-NOT: hlfir.declare {{.*}} {uniq_name = "_QFtest_parallel_assocEb"}
9-
!CHECK: omp.wsloop {
9+
!CHECK: omp.wsloop private({{.*}}) {
1010
!CHECK: }
1111
!CHECK: }
1212
!CHECK: omp.parallel {{.*}} {
1313
!CHECK-NOT: hlfir.declare {{.*}} {uniq_name = "_QFtest_parallel_assocEb"}
14-
!CHECK: omp.wsloop {
14+
!CHECK: omp.wsloop private({{.*}}) {
1515
!CHECK: }
1616
!CHECK: }
1717
subroutine test_parallel_assoc()

flang/test/Lower/OpenMP/copyin.f90

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -154,14 +154,13 @@ subroutine copyin_derived_type()
154154

155155
! CHECK: omp.barrier
156156

157-
! CHECK: %[[VAL_6:.*]] = fir.alloca i32 {bindc_name = "i", pinned, {{.*}}}
158-
! CHECK: %[[VAL_7:.*]]:2 = hlfir.declare %[[VAL_6]] {uniq_name = "_QFcombined_parallel_worksharing_loopEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
159157

160158
! CHECK: %[[VAL_11:.*]] = arith.constant 1 : i32
161159
! CHECK: %[[VAL_12:.*]] = fir.load %[[VAL_9]]#0 : !fir.ref<i32>
162160
! CHECK: %[[VAL_13:.*]] = arith.constant 1 : i32
163-
! CHECK: omp.wsloop {
161+
! CHECK: omp.wsloop private(@{{.*}} %{{.*}} -> %[[VAL_6:.*]] : !fir.ref<i32>) {
164162
! CHECK-NEXT: omp.loop_nest (%[[VAL_14:.*]]) : i32 = (%[[VAL_11]]) to (%[[VAL_12]]) inclusive step (%[[VAL_13]]) {
163+
! CHECK: %[[VAL_7:.*]]:2 = hlfir.declare %[[VAL_6]] {uniq_name = "_QFcombined_parallel_worksharing_loopEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
165164
! CHECK: fir.store %[[VAL_14]] to %[[VAL_7]]#1 : !fir.ref<i32>
166165
! CHECK: fir.call @_QPsub4(%[[VAL_9]]#1) fastmath<contract> : (!fir.ref<i32>) -> ()
167166
! CHECK: omp.yield
@@ -321,15 +320,12 @@ subroutine common_1()
321320
! CHECK: %[[VAL_33:.*]] = fir.load %[[VAL_18]]#0 : !fir.ref<i32>
322321
! CHECK: hlfir.assign %[[VAL_33]] to %[[VAL_31]]#0 : i32, !fir.ref<i32>
323322
! CHECK: omp.barrier
324-
325-
! CHECK: %[[VAL_19:.*]] = fir.alloca i32 {bindc_name = "i", pinned, {{.*}}}
326-
! CHECK: %[[VAL_20:.*]]:2 = hlfir.declare %[[VAL_19]] {uniq_name = "_QFcommon_2Ei"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
327-
328323
! CHECK: %[[VAL_34:.*]] = arith.constant 1 : i32
329324
! CHECK: %[[VAL_35:.*]] = fir.load %[[VAL_26]]#0 : !fir.ref<i32>
330325
! CHECK: %[[VAL_36:.*]] = arith.constant 1 : i32
331-
! CHECK: omp.wsloop {
326+
! CHECK: omp.wsloop private(@{{.*}} %{{.*}} -> %[[VAL_19:.*]] : !fir.ref<i32>) {
332327
! CHECK-NEXT: omp.loop_nest (%[[VAL_37:.*]]) : i32 = (%[[VAL_34]]) to (%[[VAL_35]]) inclusive step (%[[VAL_36]]) {
328+
! CHECK: %[[VAL_20:.*]]:2 = hlfir.declare %[[VAL_19]] {uniq_name = "_QFcommon_2Ei"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
333329
! CHECK: fir.store %[[VAL_37]] to %[[VAL_20]]#1 : !fir.ref<i32>
334330
! CHECK: %[[VAL_38:.*]] = fir.load %[[VAL_31]]#0 : !fir.ref<i32>
335331
! CHECK: %[[VAL_39:.*]] = fir.load %[[VAL_20]]#0 : !fir.ref<i32>

flang/test/Lower/OpenMP/critical.f90

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,10 @@ subroutine predetermined_privatization()
3838
!CHECK: omp.parallel
3939
!$omp parallel do
4040

41-
!CHECK: %[[PRIV_I_ALLOC:.*]] = fir.alloca i32 {bindc_name = "i", pinned, {{.*}}}
42-
!CHECK: %[[PRIV_I_DECL:.*]]:2 = hlfir.declare %[[PRIV_I_ALLOC]]
4341
do i = 2, 10
44-
!CHECK: omp.wsloop
42+
!CHECK: omp.wsloop private(@{{.*}} %{{.*}} -> %[[PRIV_I_ALLOC:.*]] : !fir.ref<i32>)
4543
!CHECK: omp.loop_nest (%[[IV:[^[:space:]]+]])
44+
!CHECK: %[[PRIV_I_DECL:.*]]:2 = hlfir.declare %[[PRIV_I_ALLOC]]
4645
!CHECK: fir.store %[[IV]] to %[[PRIV_I_DECL]]#1
4746
!CHECK: omp.critical
4847
!$omp critical

flang/test/Lower/OpenMP/default-clause-byref.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ subroutine skipped_default_clause_checks()
346346
type(it)::iii
347347

348348
!CHECK: omp.parallel {{.*}} {
349-
!CHECK: omp.wsloop reduction(byref @min_byref_i32 %[[VAL_Z_DECLARE]]#0 -> %[[PRV:.+]] : !fir.ref<i32>) {
349+
!CHECK: omp.wsloop private({{.*}}) reduction(byref @min_byref_i32 %[[VAL_Z_DECLARE]]#0 -> %[[PRV:.+]] : !fir.ref<i32>) {
350350
!CHECK-NEXT: omp.loop_nest (%[[ARG:.*]]) {{.*}} {
351351
!CHECK: omp.yield
352352
!CHECK: }

flang/test/Lower/OpenMP/default-clause.f90

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -284,16 +284,13 @@ subroutine nested_default_clause_test4
284284
!CHECK-LABEL: func @_QPnested_default_clause_test5
285285
!CHECK: omp.parallel {
286286

287-
!CHECK: %[[X_ALLOCA:.*]] = fir.alloca i32 {bindc_name = "x", pinned, uniq_name = "_QFnested_default_clause_test5Ex"}
288-
!CHECK: %[[X_DECLARE:.*]]:2 = hlfir.declare %[[X_ALLOCA]] {{.*}}
289-
290-
!CHECK: %[[LOOP_VAR_ALLOCA:.*]] = fir.alloca i32 {bindc_name = "i", pinned, {{.*}}}
291-
!CHECK: %[[LOOP_VAR_DECLARE:.*]]:2 = hlfir.declare %[[LOOP_VAR_ALLOCA]] {{.*}}
292-
293287
!CHECK: %[[CONST_LB:.*]] = arith.constant 1 : i32
294288
!CHECK: %[[CONST_UB:.*]] = arith.constant 50 : i32
295289
!CHECK: %[[CONST_STEP:.*]] = arith.constant 1 : i32
290+
! CHECK: omp.wsloop private(@{{.*}} %{{.*}} -> %[[X_ALLOCA:.*]], @{{.*}} %{{.*}} -> %[[LOOP_VAR_ALLOCA:.*]] : !fir.ref<i32>, !fir.ref<i32>) {
296291
!CHECK: omp.loop_nest (%[[ARG:.*]]) : i32 = (%[[CONST_LB]]) to (%[[CONST_UB]]) inclusive step (%[[CONST_STEP]]) {
292+
!CHECK: %[[X_DECLARE:.*]]:2 = hlfir.declare %[[X_ALLOCA]] {{.*}}
293+
!CHECK: %[[LOOP_VAR_DECLARE:.*]]:2 = hlfir.declare %[[LOOP_VAR_ALLOCA]] {{.*}}
297294
!CHECK: fir.store %[[ARG]] to %[[LOOP_VAR_DECLARE]]#1 : !fir.ref<i32>
298295
!CHECK: %[[LOADED_X:.*]] = fir.load %[[X_DECLARE]]#0 : !fir.ref<i32>
299296
!CHECK: %[[CONST:.*]] = arith.constant 1 : i32
@@ -321,13 +318,12 @@ subroutine nested_default_clause_test5
321318

322319
!CHECK: %[[Z_VAR_DECLARE:.*]]:2 = hlfir.declare %[[Z_VAR]] {{.*}}
323320

324-
!CHECK: %[[LOOP_VAR:.*]] = fir.alloca i32 {bindc_name = "i", pinned, {{.*}}}
325-
!CHECK: %[[LOOP_VAR_DECLARE:.*]]:2 = hlfir.declare %[[LOOP_VAR]] {{.*}}
326-
327321
!CHECK: %[[CONST_LB:.*]] = arith.constant 1 : i32
328322
!CHECK: %[[CONST_UB:.*]] = arith.constant 10 : i32
329323
!CHECK: %[[CONST_STEP:.*]] = arith.constant 1 : i32
324+
! CHECK: omp.wsloop private(@{{.*}} %{{.*}} -> %[[LOOP_VAR:.*]] : !fir.ref<i32>) {
330325
!CHECK: omp.loop_nest (%[[ARG:.*]]) : i32 = (%[[CONST_LB]]) to (%[[CONST_UB]]) inclusive step (%[[CONST_STEP]]) {
326+
!CHECK: %[[LOOP_VAR_DECLARE:.*]]:2 = hlfir.declare %[[LOOP_VAR]] {{.*}}
331327
!CHECK: fir.store %[[ARG]] to %[[LOOP_VAR_DECLARE]]#1 : !fir.ref<i32>
332328
!CHECK: %[[LOADED_X:.*]] = fir.load %[[X_VAR_DECLARE]]#0 : !fir.ref<i32>
333329
!CHECK: %[[CONST:.*]] = arith.constant 1 : i32
@@ -386,7 +382,7 @@ subroutine skipped_default_clause_checks()
386382
type(it)::iii
387383

388384
!CHECK: omp.parallel {{.*}} {
389-
!CHECK: omp.wsloop reduction(@min_i32 %[[VAL_Z_DECLARE]]#0 -> %[[PRV:.+]] : !fir.ref<i32>) {
385+
!CHECK: omp.wsloop private({{.*}}) reduction(@min_i32 %[[VAL_Z_DECLARE]]#0 -> %[[PRV:.+]] : !fir.ref<i32>) {
390386
!CHECK-NEXT: omp.loop_nest (%[[ARG:.*]]) {{.*}} {
391387
!CHECK: omp.yield
392388
!CHECK: }

flang/test/Lower/OpenMP/hlfir-wsloop.f90

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@ subroutine simple_loop
1010
! CHECK-DAG: %[[WS_END:.*]] = arith.constant 9 : i32
1111
! CHECK: omp.parallel
1212
!$OMP PARALLEL
13-
! CHECK-DAG: %[[ALLOCA_IV:.*]] = fir.alloca i32 {{{.*}}, pinned, {{.*}}}
14-
! CHECK: %[[IV:.*]] = fir.declare %[[ALLOCA_IV]] {uniq_name = "_QFsimple_loopEi"} : (!fir.ref<i32>) -> !fir.ref<i32>
15-
! CHECK: omp.wsloop {
13+
! CHECK: omp.wsloop private(@{{.*}} %{{.*}} -> %[[ALLOCA_IV:.*]] : !fir.ref<i32>) {
1614
! CHECK-NEXT: omp.loop_nest (%[[I:.*]]) : i32 = (%[[WS_ST]]) to (%[[WS_END]]) inclusive step (%[[WS_ST]]) {
1715
!$OMP DO
1816
do i=1, 9
17+
! CHECK: %[[IV:.*]] = fir.declare %[[ALLOCA_IV]] {uniq_name = "_QFsimple_loopEi"} : (!fir.ref<i32>) -> !fir.ref<i32>
1918
! CHECK: fir.store %[[I]] to %[[IV:.*]] : !fir.ref<i32>
2019
! CHECK: %[[LOAD_IV:.*]] = fir.load %[[IV]] : !fir.ref<i32>
2120
! CHECK: fir.call @_FortranAioOutputInteger32({{.*}}, %[[LOAD_IV]]) {{.*}}: (!fir.ref<i8>, i32) -> i1

flang/test/Lower/OpenMP/lastprivate-allocatable.f90

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@
88
! CHECK: fir.store %[[VAL_2]] to %[[VAL_0]] : !fir.ref<!fir.box<!fir.heap<i32>>>
99
! CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]] {fortran_attrs = {{.*}}<allocatable>, uniq_name = "_QFEa"} : (!fir.ref<!fir.box<!fir.heap<i32>>>) -> (!fir.ref<!fir.box<!fir.heap<i32>>>, !fir.ref<!fir.box<!fir.heap<i32>>>)
1010
! CHECK: omp.parallel {
11-
! create original copy of private variable
12-
! CHECK: %[[VAL_16:.*]]:2 = hlfir.declare %{{.*}} {fortran_attrs = {{.*}}<allocatable>, uniq_name = "_QFEa"} : (!fir.ref<!fir.box<!fir.heap<i32>>>) -> (!fir.ref<!fir.box<!fir.heap<i32>>>, !fir.ref<!fir.box<!fir.heap<i32>>>)
13-
! CHECK: %[[VAL_17:.*]] = fir.alloca i32 {bindc_name = "i", pinned, uniq_name = "_QFEi"}
14-
! CHECK: %[[VAL_18:.*]]:2 = hlfir.declare %[[VAL_17]] {uniq_name = "_QFEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
15-
! CHECK: omp.wsloop {
11+
! CHECK: omp.wsloop private(@{{.*}} %{{.*}} -> %{{.*}}, @{{.*}} %{{.*}} -> %[[VAL_17:.*]] : !fir.ref<!fir.box<!fir.heap<i32>>>, !fir.ref<i32>) {
1612
! CHECK: omp.loop_nest
13+
! CHECK: %[[VAL_16:.*]]:2 = hlfir.declare %{{.*}} {fortran_attrs = {{.*}}<allocatable>, uniq_name = "_QFEa"} : (!fir.ref<!fir.box<!fir.heap<i32>>>) -> (!fir.ref<!fir.box<!fir.heap<i32>>>, !fir.ref<!fir.box<!fir.heap<i32>>>)
14+
! CHECK: %[[VAL_18:.*]]:2 = hlfir.declare %[[VAL_17]] {uniq_name = "_QFEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
15+
1716
! [...]
1817
! if this is the last iteration
1918
! CHECK: fir.if %{{.*}} {

flang/test/Lower/OpenMP/lastprivate-commonblock.f90

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,10 @@
1111
!CHECK: %[[CB_C_Y_COOR:.*]] = fir.coordinate_of %[[CB_C_REF_CVT]], %{{.*}} : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8>
1212
!CHECK: %[[CB_C_Y_ADDR:.*]] = fir.convert %[[CB_C_Y_COOR]] : (!fir.ref<i8>) -> !fir.ref<f32>
1313
!CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %[[CB_C_Y_ADDR]] {uniq_name = "_QFlastprivate_commonEy"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
14-
!CHECK: %[[PRIVATE_X_REF:.*]] = fir.alloca f32 {bindc_name = "x", pinned, uniq_name = "_QFlastprivate_commonEx"}
14+
!CHECK: omp.wsloop private(@{{.*}} %{{.*}} -> %[[PRIVATE_X_REF:.*]], @{{.*}} %{{.*}} -> %[[PRIVATE_Y_REF:.*]], @{{.*}} %{{.*}} -> %{{.*}} : !{{.*}}, !{{.*}}, !{{.*}}) {
15+
!CHECK-NEXT: omp.loop_nest (%[[I:.*]]) : i32 = (%{{.*}}) to (%{{.*}}) inclusive step (%{{.*}}) {
1516
!CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X_REF]] {uniq_name = "_QFlastprivate_commonEx"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
16-
!CHECK: %[[PRIVATE_Y_REF:.*]] = fir.alloca f32 {bindc_name = "y", pinned, uniq_name = "_QFlastprivate_commonEy"}
1717
!CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y_REF]] {uniq_name = "_QFlastprivate_commonEy"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
18-
!CHECK: omp.wsloop {
19-
!CHECK-NEXT: omp.loop_nest (%[[I:.*]]) : i32 = (%{{.*}}) to (%{{.*}}) inclusive step (%{{.*}}) {
2018
!CHECK: %[[V:.*]] = arith.addi %[[I]], %{{.*}} : i32
2119
!CHECK: %[[C0:.*]] = arith.constant 0 : i32
2220
!CHECK: %[[NEG_STEP:.*]] = arith.cmpi slt, %{{.*}}, %[[C0]] : i32

flang/test/Lower/OpenMP/lastprivate-iv.f90

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@
66
!CHECK: %[[I2_MEM:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFlastprivate_iv_incEi"}
77
!CHECK: %[[I2:.*]]:2 = hlfir.declare %[[I2_MEM]] {uniq_name = "_QFlastprivate_iv_incEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
88

9-
!CHECK: %[[I_MEM:.*]] = fir.alloca i32 {bindc_name = "i", pinned, {{.*}}}
10-
!CHECK: %[[I:.*]]:2 = hlfir.declare %[[I_MEM]] {uniq_name = "_QFlastprivate_iv_incEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
11-
129
!CHECK: %[[LB:.*]] = arith.constant 4 : i32
1310
!CHECK: %[[UB:.*]] = arith.constant 10 : i32
1411
!CHECK: %[[STEP:.*]] = arith.constant 3 : i32
15-
!CHECK: omp.wsloop {
12+
!CHECK: omp.wsloop private(@{{.*}} %{{.*}} -> %[[I_MEM:.*]] : !fir.ref<i32>) {
1613
!CHECK-NEXT: omp.loop_nest (%[[IV:.*]]) : i32 = (%[[LB]]) to (%[[UB]]) inclusive step (%[[STEP]]) {
14+
!CHECK: %[[I:.*]]:2 = hlfir.declare %[[I_MEM]] {uniq_name = "_QFlastprivate_iv_incEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
1715
!CHECK: fir.store %[[IV]] to %[[I]]#1 : !fir.ref<i32>
1816
!CHECK: %[[V:.*]] = arith.addi %[[IV]], %[[STEP]] : i32
1917
!CHECK: %[[C0:.*]] = arith.constant 0 : i32
@@ -42,15 +40,12 @@ subroutine lastprivate_iv_inc()
4240

4341
!CHECK: %[[I2_MEM:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFlastprivate_iv_decEi"}
4442
!CHECK: %[[I2:.*]]:2 = hlfir.declare %[[I2_MEM]] {uniq_name = "_QFlastprivate_iv_decEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
45-
46-
!CHECK: %[[I_MEM:.*]] = fir.alloca i32 {bindc_name = "i", pinned, {{.*}}}
47-
!CHECK: %[[I:.*]]:2 = hlfir.declare %[[I_MEM]] {uniq_name = "_QFlastprivate_iv_decEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
48-
4943
!CHECK: %[[LB:.*]] = arith.constant 10 : i32
5044
!CHECK: %[[UB:.*]] = arith.constant 1 : i32
5145
!CHECK: %[[STEP:.*]] = arith.constant -3 : i32
52-
!CHECK: omp.wsloop {
46+
!CHECK: omp.wsloop private(@{{.*}} %{{.*}} -> %[[I_MEM:.*]] : !fir.ref<i32>) {
5347
!CHECK-NEXT: omp.loop_nest (%[[IV:.*]]) : i32 = (%[[LB]]) to (%[[UB]]) inclusive step (%[[STEP]]) {
48+
!CHECK: %[[I:.*]]:2 = hlfir.declare %[[I_MEM]] {uniq_name = "_QFlastprivate_iv_decEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
5449
!CHECK: fir.store %[[IV]] to %[[I]]#1 : !fir.ref<i32>
5550
!CHECK: %[[V:.*]] = arith.addi %[[IV]], %[[STEP]] : i32
5651
!CHECK: %[[C0:.*]] = arith.constant 0 : i32
@@ -80,7 +75,7 @@ subroutine lastprivate_iv_dec()
8075
subroutine lastprivate_iv_i1
8176
integer*1 :: i1
8277
i1=0
83-
!CHECK: omp.wsloop
78+
!CHECK: omp.wsloop private({{.*}})
8479
!CHECK: omp.loop_nest
8580
!CHECK: fir.if %{{.*}} {
8681
!CHECK: %[[I8_VAL:.*]] = fir.convert %{{.*}} : (i32) -> i8

flang/test/Lower/OpenMP/location.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ subroutine sub_target()
2828

2929
!CHECK-LABEL: sub_loop
3030
subroutine sub_loop()
31-
!CHECK: omp.wsloop {
31+
!CHECK: omp.wsloop private({{.*}}) {
3232
!CHECK-NEXT: omp.loop_nest {{.*}} {
3333
!$omp do
3434
do i=1,10

flang/test/Lower/OpenMP/order-clause.f90

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ end subroutine simd_order
2020

2121
!CHECK-LABEL: func.func @_QPdo_order() {
2222
subroutine do_order
23-
!CHECK: omp.wsloop order(reproducible:concurrent) {
23+
!CHECK: omp.wsloop order(reproducible:concurrent) private({{.*}}) {
2424
!$omp do order(concurrent)
2525
do i = 1, 10
2626
end do
27-
!CHECK: omp.wsloop order(reproducible:concurrent) {
27+
!CHECK: omp.wsloop order(reproducible:concurrent) private({{.*}}) {
2828
!$omp do order(reproducible:concurrent)
2929
do i = 1, 10
3030
end do
31-
!CHECK: omp.wsloop order(unconstrained:concurrent) {
31+
!CHECK: omp.wsloop order(unconstrained:concurrent) private({{.*}}) {
3232
!$omp do order(unconstrained:concurrent)
3333
do i = 1, 10
3434
end do

0 commit comments

Comments
 (0)