[llvm] [Verifier][AMDGPU] No store to const addrspace (PR #109181)

via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 20 06:27:50 PDT 2024


https://github.com/jofrn updated https://github.com/llvm/llvm-project/pull/109181

>From a0990280f4cfa70cd465b06847cb7e9b8a79fe8d Mon Sep 17 00:00:00 2001
From: jofernau <Joe.Fernau at amd.com>
Date: Wed, 18 Sep 2024 12:34:36 -0700
Subject: [PATCH 1/2] [Verifier][AMDGPU] No store to const addrspace

Ensure store to const addrspace is not allowed by IR Verifier.
---
 llvm/lib/IR/Verifier.cpp                | 31 +++++++++++++++++++++++++
 llvm/test/CodeGen/AMDGPU/const-store.ll |  9 +++++++
 2 files changed, 40 insertions(+)
 create mode 100644 llvm/test/CodeGen/AMDGPU/const-store.ll

diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index 06a67346fbf959..ca213a77baf42e 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -4224,6 +4224,33 @@ void Verifier::visitLoadInst(LoadInst &LI) {
   visitInstruction(LI);
 }
 
+static bool isConstantAddressSpace(unsigned AS) {
+  switch (AS) {
+    using namespace AMDGPUAS;
+  case CONSTANT_ADDRESS:
+  case CONSTANT_ADDRESS_32BIT:
+  case CONSTANT_BUFFER_0:
+  case CONSTANT_BUFFER_1:
+  case CONSTANT_BUFFER_2:
+  case CONSTANT_BUFFER_3:
+  case CONSTANT_BUFFER_4:
+  case CONSTANT_BUFFER_5:
+  case CONSTANT_BUFFER_6:
+  case CONSTANT_BUFFER_7:
+  case CONSTANT_BUFFER_8:
+  case CONSTANT_BUFFER_9:
+  case CONSTANT_BUFFER_10:
+  case CONSTANT_BUFFER_11:
+  case CONSTANT_BUFFER_12:
+  case CONSTANT_BUFFER_13:
+  case CONSTANT_BUFFER_14:
+  case CONSTANT_BUFFER_15:
+    return true;
+  default:
+    return false;
+  }
+}
+
 void Verifier::visitStoreInst(StoreInst &SI) {
   PointerType *PTy = dyn_cast<PointerType>(SI.getOperand(1)->getType());
   Check(PTy, "Store operand must be a pointer.", &SI);
@@ -4246,6 +4273,10 @@ void Verifier::visitStoreInst(StoreInst &SI) {
     Check(SI.getSyncScopeID() == SyncScope::System,
           "Non-atomic store cannot have SynchronizationScope specified", &SI);
   }
+  if (TT.isAMDGPU()) {
+    Check(!isConstantAddressSpace(SI.getPointerAddressSpace()),
+          "Store cannot be to constant addrspace", &SI);
+  }
   visitInstruction(SI);
 }
 
diff --git a/llvm/test/CodeGen/AMDGPU/const-store.ll b/llvm/test/CodeGen/AMDGPU/const-store.ll
new file mode 100644
index 00000000000000..9447ef9db59986
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/const-store.ll
@@ -0,0 +1,9 @@
+; RUN: not llc -mtriple=amdgcn < %s |& FileCheck %s
+
+define amdgpu_kernel void @store_const(ptr addrspace(4) %out, i32 %a, i32 %b) {
+; CHECK: Store cannot be to constant addrspace
+; CHECK-NEXT: store i32 %r, ptr addrspace(4) %out
+  %r = add i32 %a, %b
+  store i32 %r, ptr addrspace(4) %out
+  ret void
+}

>From a82bcdc96314caed656511e7f6477112756ce41d Mon Sep 17 00:00:00 2001
From: jofrn <jofernau at amd.com>
Date: Fri, 20 Sep 2024 09:27:42 -0400
Subject: [PATCH 2/2] Update llvm/test/CodeGen/AMDGPU/const-store.ll

Co-authored-by: Shilei Tian <i at tianshilei.me>
---
 llvm/test/CodeGen/AMDGPU/const-store.ll | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/test/CodeGen/AMDGPU/const-store.ll b/llvm/test/CodeGen/AMDGPU/const-store.ll
index 9447ef9db59986..f16262e7bda3f5 100644
--- a/llvm/test/CodeGen/AMDGPU/const-store.ll
+++ b/llvm/test/CodeGen/AMDGPU/const-store.ll
@@ -1,4 +1,4 @@
-; RUN: not llc -mtriple=amdgcn < %s |& FileCheck %s
+; RUN: not llc -mtriple=amdgcn %s -o - |& FileCheck %s
 
 define amdgpu_kernel void @store_const(ptr addrspace(4) %out, i32 %a, i32 %b) {
 ; CHECK: Store cannot be to constant addrspace



More information about the llvm-commits mailing list