Skip to content

Commit 3a0c006

Browse files
authored
Revert "[flang][OpenMP] Fix firstprivate not working with lastprivate in DO SIMD" (#171646)
Reverts #170163 Regression in fujitsu test suite
1 parent 8f1c593 commit 3a0c006

File tree

5 files changed

+23
-151
lines changed

5 files changed

+23
-151
lines changed

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3314,12 +3314,17 @@ static mlir::omp::WsloopOp genCompositeDoSimd(
33143314
genSimdClauses(converter, semaCtx, simdItem->clauses, loc, simdClauseOps,
33153315
simdReductionSyms);
33163316

3317-
DataSharingProcessor wsloopItemDSP(converter, semaCtx, doItem->clauses, eval,
3318-
/*shouldCollectPreDeterminedSymbols=*/true,
3319-
/*useDelayedPrivatization=*/true,
3320-
symTable);
3317+
DataSharingProcessor wsloopItemDSP(
3318+
converter, semaCtx, doItem->clauses, eval,
3319+
/*shouldCollectPreDeterminedSymbols=*/false,
3320+
/*useDelayedPrivatization=*/true, symTable);
33213321
wsloopItemDSP.processStep1(&wsloopClauseOps);
33223322

3323+
DataSharingProcessor simdItemDSP(converter, semaCtx, simdItem->clauses, eval,
3324+
/*shouldCollectPreDeterminedSymbols=*/true,
3325+
/*useDelayedPrivatization=*/true, symTable);
3326+
simdItemDSP.processStep1(&simdClauseOps, simdItem->id);
3327+
33233328
// Pass the innermost leaf construct's clauses because that's where COLLAPSE
33243329
// is placed by construct decomposition.
33253330
mlir::omp::LoopNestOperands loopNestClauseOps;
@@ -3338,9 +3343,8 @@ static mlir::omp::WsloopOp genCompositeDoSimd(
33383343
wsloopOp.setComposite(/*val=*/true);
33393344

33403345
EntryBlockArgs simdArgs;
3341-
// For composite 'do simd', privatization is handled by the wsloop.
3342-
// The simd does not create separate private storage for variables already
3343-
// privatized by the worksharing construct.
3346+
simdArgs.priv.syms = simdItemDSP.getDelayedPrivSymbols();
3347+
simdArgs.priv.vars = simdClauseOps.privateVars;
33443348
simdArgs.reduction.syms = simdReductionSyms;
33453349
simdArgs.reduction.vars = simdClauseOps.reductionVars;
33463350
auto simdOp =
@@ -3350,7 +3354,7 @@ static mlir::omp::WsloopOp genCompositeDoSimd(
33503354
genLoopNestOp(converter, symTable, semaCtx, eval, loc, queue, simdItem,
33513355
loopNestClauseOps, iv,
33523356
{{wsloopOp, wsloopArgs}, {simdOp, simdArgs}},
3353-
llvm::omp::Directive::OMPD_do_simd, wsloopItemDSP);
3357+
llvm::omp::Directive::OMPD_do_simd, simdItemDSP);
33543358
return wsloopOp;
33553359
}
33563360

flang/test/Integration/OpenMP/do-simd-firstprivate-lastprivate-runtime.f90

Lines changed: 0 additions & 48 deletions
This file was deleted.

flang/test/Lower/OpenMP/do-simd-firstprivate-lastprivate.f90

Lines changed: 0 additions & 89 deletions
This file was deleted.

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ end subroutine do_order
3636

3737
!CHECK-LABEL: func.func @_QPdo_simd_order() {
3838
subroutine do_simd_order
39-
!CHECK: omp.wsloop order(reproducible:concurrent)
39+
!CHECK: omp.wsloop order(reproducible:concurrent) {
4040
!$omp do simd order(concurrent)
4141
do i = 1, 10
4242
end do
43-
!CHECK: omp.wsloop order(reproducible:concurrent)
43+
!CHECK: omp.wsloop order(reproducible:concurrent) {
4444
!$omp do simd order(reproducible:concurrent)
4545
do i = 1, 10
4646
end do
47-
!CHECK: omp.wsloop order(unconstrained:concurrent)
47+
!CHECK: omp.wsloop order(unconstrained:concurrent) {
4848
!$omp do simd order(unconstrained:concurrent)
4949
do i = 1, 10
5050
end do
@@ -53,7 +53,7 @@ end subroutine do_simd_order
5353
!CHECK-LABEL: func.func @_QPdo_simd_order_parallel() {
5454
subroutine do_simd_order_parallel
5555
!CHECK: omp.parallel {
56-
!CHECK: omp.wsloop order(reproducible:concurrent)
56+
!CHECK: omp.wsloop order(reproducible:concurrent) {
5757
!$omp parallel do simd order(reproducible:concurrent)
5858
do i = 1, 10
5959
end do

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,16 @@ end subroutine do_simd_reduction
7171
subroutine do_simd_private()
7272
integer, allocatable :: tmp
7373
! CHECK: omp.wsloop
74-
! CHECK-SAME: private(@[[PRIV_IVAR_SYM:.*]] %{{.*}} -> %[[PRIV_IVAR:.*]] : !fir.ref<i32>)
7574
! CHECK-NEXT: omp.simd
75+
! CHECK-SAME: private(@[[PRIV_BOX_SYM:.*]] %{{.*}} -> %[[PRIV_BOX:.*]], @[[PRIV_IVAR_SYM:.*]] %{{.*}} -> %[[PRIV_IVAR:.*]] : !fir.ref<!fir.box<!fir.heap<i32>>>, !fir.ref<i32>)
7676
! CHECK-NEXT: omp.loop_nest (%[[IVAR:.*]]) : i32
7777
!$omp do simd private(tmp)
7878
do i=1, 10
79+
! CHECK: %[[PRIV_BOX_DECL:.*]]:2 = hlfir.declare %[[PRIV_BOX]]
7980
! CHECK: %[[PRIV_IVAR_DECL:.*]]:2 = hlfir.declare %[[PRIV_IVAR]]
8081
! CHECK: hlfir.assign %[[IVAR]] to %[[PRIV_IVAR_DECL]]#0
82+
! CHECK: %[[PRIV_BOX_LOAD:.*]] = fir.load %[[PRIV_BOX_DECL]]
83+
! CHECK: hlfir.assign %{{.*}} to %[[PRIV_BOX_DECL]]#0
8184
! CHECK: omp.yield
8285
tmp = tmp + 1
8386
end do
@@ -87,11 +90,13 @@ end subroutine do_simd_private
8790
subroutine do_simd_lastprivate_firstprivate()
8891
integer :: a
8992
! CHECK: omp.wsloop
90-
! CHECK-SAME: private(@[[FIRSTPRIVATE_A_SYM:.*]] %{{.*}} -> %[[FIRSTPRIVATE_A:.*]], @[[PRIVATE_I_SYM:.*]] %{{.*}} -> %[[PRIVATE_I:.*]] : !fir.ref<i32>, !fir.ref<i32>)
93+
! CHECK-SAME: private(@[[FIRSTPRIVATE_A_SYM:.*]] %{{.*}} -> %[[FIRSTPRIVATE_A:.*]] : !fir.ref<i32>)
9194
! CHECK-NEXT: omp.simd
95+
! CHECK-SAME: private(@[[PRIVATE_A_SYM:.*]] %{{.*}} -> %[[PRIVATE_A:.*]], @[[PRIVATE_I_SYM:.*]] %{{.*}} -> %[[PRIVATE_I:.*]] : !fir.ref<i32>, !fir.ref<i32>)
9296
!$omp do simd lastprivate(a) firstprivate(a)
9397
do i = 1, 10
9498
! CHECK: %[[FIRSTPRIVATE_A_DECL:.*]]:2 = hlfir.declare %[[FIRSTPRIVATE_A]]
99+
! CHECK: %[[PRIVATE_A_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_A]]
95100
! CHECK: %[[PRIVATE_I_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_I]]
96101
a = a + 1
97102
end do

0 commit comments

Comments
 (0)