[llvm] 5c24318 - [SPIR-V] Diagnose stores into read-only storage classes (#207331)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 6 05:17:02 PDT 2026
Author: Arseniy Obolenskiy
Date: 2026-07-06T14:16:57+02:00
New Revision: 5c243188cf637c91f09a66986a1c0d90b92c33bb
URL: https://github.com/llvm/llvm-project/commit/5c243188cf637c91f09a66986a1c0d90b92c33bb
DIFF: https://github.com/llvm/llvm-project/commit/5c243188cf637c91f09a66986a1c0d90b92c33bb.diff
LOG: [SPIR-V] Diagnose stores into read-only storage classes (#207331)
Added:
llvm/test/CodeGen/SPIRV/store-to-read-only-addrspace.ll
Modified:
llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp b/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
index 533181beeaf0d..274a3265f7115 100644
--- a/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
@@ -2094,6 +2094,16 @@ bool SPIRVInstructionSelector::selectStore(MachineInstr &I) const {
return selectAtomicStore(I);
}
+ // Stores into a read-only storage class produce invalid SPIR-V. Reject such
+ // input with a diagnostic rather than silently emitting an OpStore that
+ // validation rejects.
+ SPIRV::StorageClass::StorageClass PtrSC = GR.getPointerStorageClass(Ptr);
+ if (PtrSC == SPIRV::StorageClass::UniformConstant ||
+ PtrSC == SPIRV::StorageClass::Input ||
+ PtrSC == SPIRV::StorageClass::PushConstant)
+ return diagnoseUnsupported(
+ I, "store into a read-only SPIR-V storage class is not allowed");
+
MachineIRBuilder MIRBuilder(I);
auto MIB = MIRBuilder.buildInstr(SPIRV::OpStore).addUse(Ptr).addUse(StoreVal);
if (!I.getNumMemOperands()) {
diff --git a/llvm/test/CodeGen/SPIRV/store-to-read-only-addrspace.ll b/llvm/test/CodeGen/SPIRV/store-to-read-only-addrspace.ll
new file mode 100644
index 0000000000000..ab40bdce58c81
--- /dev/null
+++ b/llvm/test/CodeGen/SPIRV/store-to-read-only-addrspace.ll
@@ -0,0 +1,10 @@
+; RUN: not llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o /dev/null 2>&1 | FileCheck %s
+; RUN: not llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o /dev/null 2>&1 | FileCheck %s
+
+
+; CHECK: error: {{.*}}store into a read-only SPIR-V storage class is not allowed
+
+define spir_kernel void @store_to_constant(ptr addrspace(2) %out) {
+ store i32 0, ptr addrspace(2) %out
+ ret void
+}
More information about the llvm-commits
mailing list