Skip to content

Commit fe12d31

Browse files
committed
[OpenMPOpt][FIX] Propagate IsReachingAlignedBarrier flag through calls
1 parent 7e77e81 commit fe12d31

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

llvm/lib/Transforms/IPO/OpenMPOpt.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3174,13 +3174,13 @@ ChangeStatus AAExecutionDomainFunction::updateImpl(Attributor &A) {
31743174
if (!CB)
31753175
continue;
31763176
auto &CallOutED = CEDMap[{CB, POST}];
3177-
if (setAndRecord(CallOutED.IsReachingAlignedBarrierOnly, false))
3178-
Changed = true;
3177+
Changed |= setAndRecord(CallOutED.IsReachingAlignedBarrierOnly, false);
31793178
auto &CallInED = CEDMap[{CB, PRE}];
31803179
HitAlignedBarrierOrKnownEnd =
31813180
AlignedBarriers.count(CB) || !CallInED.IsReachingAlignedBarrierOnly;
31823181
if (HitAlignedBarrierOrKnownEnd)
31833182
break;
3183+
Changed |= setAndRecord(CallInED.IsReachingAlignedBarrierOnly, false);
31843184
}
31853185
if (HitAlignedBarrierOrKnownEnd)
31863186
continue;
@@ -3198,8 +3198,8 @@ ChangeStatus AAExecutionDomainFunction::updateImpl(Attributor &A) {
31983198
}
31993199
if (SyncBB != &EntryBB)
32003200
continue;
3201-
if (setAndRecord(InterProceduralED.IsReachingAlignedBarrierOnly, false))
3202-
Changed = true;
3201+
Changed |=
3202+
setAndRecord(InterProceduralED.IsReachingAlignedBarrierOnly, false);
32033203
}
32043204

32053205
return Changed ? ChangeStatus::CHANGED : ChangeStatus::UNCHANGED;

llvm/test/Transforms/OpenMP/value-simplify-openmp-opt.ll

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -411,16 +411,19 @@ S:
411411
ret void
412412
}
413413

414-
; FIXME: The load of QB3 should not be simplified to 0.
414+
; The load of QB3 should not be simplified to 0.
415415
define void @kernel4b3(i1 %c) "kernel" {
416416
; TUNIT-LABEL: define {{[^@]+}}@kernel4b3
417417
; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
418+
; TUNIT-NEXT: store i32 0, ptr addrspace(3) @QB3, align 4
418419
; TUNIT-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
419420
; TUNIT: L:
420421
; TUNIT-NEXT: call void @sync()
421-
; TUNIT-NEXT: call void @use1(i32 0) #[[ATTR7]]
422+
; TUNIT-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QB3, align 4
423+
; TUNIT-NEXT: call void @use1(i32 [[V]]) #[[ATTR7]]
422424
; TUNIT-NEXT: ret void
423425
; TUNIT: S:
426+
; TUNIT-NEXT: store i32 2, ptr addrspace(3) @QB3, align 4
424427
; TUNIT-NEXT: call void @use1(i32 0) #[[ATTR7]]
425428
; TUNIT-NEXT: call void @use1(i32 1) #[[ATTR7]]
426429
; TUNIT-NEXT: call void @use1(i32 2) #[[ATTR7]]
@@ -429,12 +432,15 @@ define void @kernel4b3(i1 %c) "kernel" {
429432
;
430433
; CGSCC-LABEL: define {{[^@]+}}@kernel4b3
431434
; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
435+
; CGSCC-NEXT: store i32 0, ptr addrspace(3) @QB3, align 4
432436
; CGSCC-NEXT: br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
433437
; CGSCC: L:
434438
; CGSCC-NEXT: call void @sync()
435-
; CGSCC-NEXT: call void @use1(i32 0) #[[ATTR6]]
439+
; CGSCC-NEXT: [[V:%.*]] = load i32, ptr addrspace(3) @QB3, align 4
440+
; CGSCC-NEXT: call void @use1(i32 [[V]]) #[[ATTR6]]
436441
; CGSCC-NEXT: ret void
437442
; CGSCC: S:
443+
; CGSCC-NEXT: store i32 2, ptr addrspace(3) @QB3, align 4
438444
; CGSCC-NEXT: call void @use1(i32 0) #[[ATTR6]]
439445
; CGSCC-NEXT: call void @use1(i32 1) #[[ATTR6]]
440446
; CGSCC-NEXT: call void @use1(i32 2) #[[ATTR6]]

0 commit comments

Comments
 (0)