Skip to content

Commit 1ae507d

Browse files
authored
AMDGPU: Do not create phi user for atomicrmw with no uses (#103061)
1 parent 03d5101 commit 1ae507d

File tree

3 files changed

+13
-9
lines changed

3 files changed

+13
-9
lines changed

llvm/lib/Target/AMDGPU/SIISelLowering.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16647,6 +16647,9 @@ void SITargetLowering::emitExpandAtomicRMW(AtomicRMWInst *AI) const {
1664716647
IRBuilder<> Builder(AI);
1664816648
LLVMContext &Ctx = Builder.getContext();
1664916649

16650+
// If the return value isn't used, do not introduce a false use in the phi.
16651+
bool ReturnValueIsUsed = !AI->use_empty();
16652+
1665016653
BasicBlock *BB = Builder.GetInsertBlock();
1665116654
Function *F = BB->getParent();
1665216655
BasicBlock *ExitBB =
@@ -16710,14 +16713,18 @@ void SITargetLowering::emitExpandAtomicRMW(AtomicRMWInst *AI) const {
1671016713
Builder.CreateBr(PhiBB);
1671116714

1671216715
Builder.SetInsertPoint(PhiBB);
16713-
PHINode *Loaded = Builder.CreatePHI(ValTy, 3);
16714-
Loaded->addIncoming(LoadedShared, SharedBB);
16715-
Loaded->addIncoming(LoadedPrivate, PrivateBB);
16716-
Loaded->addIncoming(LoadedGlobal, GlobalBB);
16716+
16717+
if (ReturnValueIsUsed) {
16718+
PHINode *Loaded = Builder.CreatePHI(ValTy, 3);
16719+
Loaded->addIncoming(LoadedShared, SharedBB);
16720+
Loaded->addIncoming(LoadedPrivate, PrivateBB);
16721+
Loaded->addIncoming(LoadedGlobal, GlobalBB);
16722+
Loaded->takeName(AI);
16723+
AI->replaceAllUsesWith(Loaded);
16724+
}
16725+
1671716726
Builder.CreateBr(ExitBB);
1671816727

16719-
Loaded->takeName(AI);
16720-
AI->replaceAllUsesWith(Loaded);
1672116728
AI->eraseFromParent();
1672216729
}
1672316730

llvm/test/Transforms/AtomicExpand/AMDGPU/expand-atomic-mmra.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ define void @syncscope_workgroup_nortn(ptr %addr, float %val) #0 {
147147
; GFX90A-NEXT: [[TMP5:%.*]] = atomicrmw fadd ptr addrspace(1) [[TMP4]], float [[VAL]] syncscope("workgroup") seq_cst, align 4, !mmra [[META0]]
148148
; GFX90A-NEXT: br label [[ATOMICRMW_PHI]]
149149
; GFX90A: atomicrmw.phi:
150-
; GFX90A-NEXT: [[LOADED_PHI:%.*]] = phi float [ [[TMP2]], [[ATOMICRMW_SHARED]] ], [ [[LOADED_PRIVATE]], [[ATOMICRMW_PRIVATE]] ], [ [[TMP5]], [[ATOMICRMW_GLOBAL]] ]
151150
; GFX90A-NEXT: br label [[ATOMICRMW_END:%.*]]
152151
; GFX90A: atomicrmw.end:
153152
; GFX90A-NEXT: ret void

llvm/test/Transforms/AtomicExpand/AMDGPU/expand-atomic-rmw-fadd-flat-specialization.ll

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ define void @syncscope_workgroup_nortn(ptr %addr, float %val) {
166166
; GFX908-NEXT: [[TMP5:%.*]] = atomicrmw fadd ptr addrspace(1) [[TMP4]], float [[VAL]] syncscope("workgroup") seq_cst, align 4, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]
167167
; GFX908-NEXT: br label [[ATOMICRMW_PHI]]
168168
; GFX908: atomicrmw.phi:
169-
; GFX908-NEXT: [[RES:%.*]] = phi float [ [[TMP2]], [[ATOMICRMW_SHARED]] ], [ [[LOADED_PRIVATE]], [[ATOMICRMW_PRIVATE]] ], [ [[TMP5]], [[ATOMICRMW_GLOBAL]] ]
170169
; GFX908-NEXT: br label [[ATOMICRMW_END:%.*]]
171170
; GFX908: atomicrmw.end:
172171
; GFX908-NEXT: ret void
@@ -192,7 +191,6 @@ define void @syncscope_workgroup_nortn(ptr %addr, float %val) {
192191
; GFX90A-NEXT: [[TMP5:%.*]] = atomicrmw fadd ptr addrspace(1) [[TMP4]], float [[VAL]] syncscope("workgroup") seq_cst, align 4, !amdgpu.no.fine.grained.memory [[META0]], !amdgpu.ignore.denormal.mode [[META0]]
193192
; GFX90A-NEXT: br label [[ATOMICRMW_PHI]]
194193
; GFX90A: atomicrmw.phi:
195-
; GFX90A-NEXT: [[RES:%.*]] = phi float [ [[TMP2]], [[ATOMICRMW_SHARED]] ], [ [[LOADED_PRIVATE]], [[ATOMICRMW_PRIVATE]] ], [ [[TMP5]], [[ATOMICRMW_GLOBAL]] ]
196194
; GFX90A-NEXT: br label [[ATOMICRMW_END:%.*]]
197195
; GFX90A: atomicrmw.end:
198196
; GFX90A-NEXT: ret void

0 commit comments

Comments
 (0)