[llvm] [SPIRV] Preserve FP types in atomic load/store instead of casting to integer (PR #194583)

Viktoria Maximova via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 28 07:27:06 PDT 2026


================
@@ -685,3 +685,18 @@ SPIRVTargetLowering::shouldCastAtomicRMWIInIR(AtomicRMWInst *RMWI) const {
   // SPIR-V only supports atomic exchange for integer and floating-point types.
   return AtomicExpansionKind::None;
 }
+
+TargetLowering::AtomicExpansionKind
+SPIRVTargetLowering::shouldCastAtomicLoadInIR(LoadInst *LI) const {
+  // TODO: pointer load should return CastToInteger, but
+  // convertAtomicLoadToIntegerType uses BitCast which asserts on pointer types.
+  return AtomicExpansionKind::None;
+}
+
+TargetLowering::AtomicExpansionKind
+SPIRVTargetLowering::shouldCastAtomicStoreInIR(StoreInst *SI) const {
+  // TODO: pointer store should return CastToInteger, but
+  // convertAtomicStoreToIntegerType uses BitCast which asserts on pointer
+  // types.
+  return AtomicExpansionKind::None;
+}
----------------
vmaksimo wrote:

Without overloads we get unneeded cast to integer, while SPIR-V supports atomic load/store directly on float types.
The changes in transcoding tests show this better I think

https://github.com/llvm/llvm-project/pull/194583


More information about the llvm-commits mailing list