[llvm] [NFC][SPIR-V] Remove dead non-intrinsic path in selectAtomicCmpXchg (PR #193692)
Arseniy Obolenskiy via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 23 01:51:25 PDT 2026
https://github.com/aobolensk created https://github.com/llvm/llvm-project/pull/193692
SPIRVEmitIntrinsics unconditionally rewrites every cmpxchg into the @llvm.spv.cmpxchg intrinsic before instruction selection, so G_ATOMIC_CMPXCHG branch of selectAtomicCmpXchg was never reached
>From ea6c03223d9feb69eb36a86a6887ce761e450b9e Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Thu, 23 Apr 2026 10:46:33 +0200
Subject: [PATCH] [NFC][SPIR-V] Remove dead non-intrinsic path in
selectAtomicCmpXchg
SPIRVEmitIntrinsics unconditionally rewrites every cmpxchg into the @llvm.spv.cmpxchg intrinsic before instruction selection, so G_ATOMIC_CMPXCHG branch of selectAtomicCmpXchg was never reached
---
.../Target/SPIRV/SPIRVInstructionSelector.cpp | 35 +++----------------
1 file changed, 5 insertions(+), 30 deletions(-)
diff --git a/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp b/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
index 56aacaf63928c..c6deffde24af8 100644
--- a/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
@@ -1344,8 +1344,6 @@ bool SPIRVInstructionSelector::spvSelect(Register ResVReg,
return selectAtomicRMW(ResVReg, ResType, I, SPIRV::OpAtomicUMin);
case TargetOpcode::G_ATOMICRMW_XCHG:
return selectAtomicRMW(ResVReg, ResType, I, SPIRV::OpAtomicExchange);
- case TargetOpcode::G_ATOMIC_CMPXCHG:
- return selectAtomicCmpXchg(ResVReg, ResType, I);
case TargetOpcode::G_ATOMICRMW_FADD:
return selectAtomicRMW(ResVReg, ResType, I, SPIRV::OpAtomicFAddEXT);
@@ -2355,35 +2353,12 @@ bool SPIRVInstructionSelector::selectOverflowArith(Register ResVReg,
bool SPIRVInstructionSelector::selectAtomicCmpXchg(Register ResVReg,
SPIRVTypeInst ResType,
MachineInstr &I) const {
- Register ScopeReg;
- Register MemSemEqReg;
- Register MemSemNeqReg;
+ assert(isa<GIntrinsic>(I) &&
+ "selectAtomicCmpXchg only handles the spv_cmpxchg intrinsic");
Register Ptr = I.getOperand(2).getReg();
- if (!isa<GIntrinsic>(I)) {
- assert(I.hasOneMemOperand());
- const MachineMemOperand *MemOp = *I.memoperands_begin();
- unsigned Scope = static_cast<uint32_t>(getMemScope(
- GR.CurMF->getFunction().getContext(), MemOp->getSyncScopeID()));
- ScopeReg = buildI32Constant(Scope, I);
-
- unsigned ScSem = static_cast<uint32_t>(
- getMemSemanticsForStorageClass(GR.getPointerStorageClass(Ptr)));
- AtomicOrdering AO = MemOp->getSuccessOrdering();
- unsigned MemSemEq = static_cast<uint32_t>(getMemSemantics(AO)) | ScSem;
- Register MemSemEqReg = buildI32Constant(MemSemEq, I);
- AtomicOrdering FO = MemOp->getFailureOrdering();
- unsigned MemSemNeq = static_cast<uint32_t>(getMemSemantics(FO)) | ScSem;
- if (MemSemEq == MemSemNeq)
- MemSemNeqReg = MemSemEqReg;
- else {
- MemSemNeqReg = buildI32Constant(MemSemEq, I);
- }
- } else {
- ScopeReg = I.getOperand(5).getReg();
- MemSemEqReg = I.getOperand(6).getReg();
- MemSemNeqReg = I.getOperand(7).getReg();
- }
-
+ Register ScopeReg = I.getOperand(5).getReg();
+ Register MemSemEqReg = I.getOperand(6).getReg();
+ Register MemSemNeqReg = I.getOperand(7).getReg();
Register Cmp = I.getOperand(3).getReg();
Register Val = I.getOperand(4).getReg();
SPIRVTypeInst SpvValTy = GR.getSPIRVTypeForVReg(Val);
More information about the llvm-commits
mailing list