Skip to content

Commit 56eb122

Browse files
committed
AMDGPU: Do not create phi user for atomicrmw with no uses
Currently the custom expansion introducing address space tests always introduces a phi for the return value, even if it is unused. Avoid introducing the phi use if we don't need the return value. This avoids unnecessarily expanding the global sequence on targets that only support the no return version in a future patch that enables incremental legalization of atomics.
1 parent 2256d00 commit 56eb122

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)