[llvm] [SPIRV] Lower load/store atomic to OpAtomicLoad/OpAtomicStore (PR #185696)
Arseniy Obolenskiy via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 23 01:28:06 PDT 2026
Juan Manuel Martinez =?utf-8?q?Caamaño?=,
Juan Manuel Martinez =?utf-8?q?Caamaño?=,
Juan Manuel Martinez =?utf-8?q?Caamaño?=,
Juan Manuel Martinez =?utf-8?q?Caamaño?Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/185696 at github.com>
================
@@ -1976,13 +1987,52 @@ bool SPIRVInstructionSelector::selectLoad(Register ResVReg,
TargetOpcode::G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS);
addMemoryOperands(I.getOperand(2 + OpOffset).getImm(), MIB);
} else {
- MachineIRBuilder MIRBuilder(I);
addMemoryOperands(*I.memoperands_begin(), MIB, MIRBuilder, GR);
}
MIB.constrainAllUses(TII, TRI, RBI);
return true;
}
+bool SPIRVInstructionSelector::selectAtomicLoad(Register ResVReg,
+ SPIRVTypeInst ResType,
+ MachineInstr &I) const {
+ LLVMContext &Context = I.getMF()->getFunction().getContext();
+
+ unsigned OpOffset = isa<GIntrinsic>(I) ? 1 : 0;
+ Register Ptr = I.getOperand(1 + OpOffset).getReg();
+
+ if (!ResType.isTypeIntOrFloat())
+ return diagnoseUnsupported(I,
+ "Lowering to SPIR-V of atomic load is only "
+ "allowed for integer or floating point types");
+
+ const MachineMemOperand &MemOp = **I.memoperands_begin();
----------------
aobolensk wrote:
```suggestion
assert(I.getNumMemOperands());
const MachineMemOperand &MemOp = **I.memoperands_begin();
```
https://github.com/llvm/llvm-project/pull/185696
More information about the llvm-commits
mailing list