[llvm] [SPIR-V] Fix legalization rewriting non-zero size arrays to pointers (PR #222276)

Arseniy Obolenskiy via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 9 02:20:29 PDT 2026


https://github.com/aobolensk created https://github.com/llvm/llvm-project/pull/222276

legalizeType checked `isa<ArrayType>` with no size guard

Use `shouldLegalizeInstType`, which already checks for zero size

>From ddb3e4ab2ddd032e4fcec14c8ecc3d21afb18fb4 Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Wed, 9 Sep 2026 11:17:33 +0200
Subject: [PATCH] [SPIRV] Fix legalization rewriting non-zero size arrays to
 pointers

legalizeType checked `isa<ArrayType>` with no size guard

Use shouldLegalizeInstType, which already checks for zero size
---
 llvm/lib/Target/SPIRV/SPIRVLegalizeZeroSizeArrays.cpp       | 2 +-
 llvm/test/CodeGen/SPIRV/legalize-zero-size-arrays-struct.ll | 6 ++++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/Target/SPIRV/SPIRVLegalizeZeroSizeArrays.cpp b/llvm/lib/Target/SPIRV/SPIRVLegalizeZeroSizeArrays.cpp
index b5c3e1a2a9307..60b2bec63923a 100644
--- a/llvm/lib/Target/SPIRV/SPIRVLegalizeZeroSizeArrays.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVLegalizeZeroSizeArrays.cpp
@@ -114,7 +114,7 @@ Type *SPIRVLegalizeZeroSizeArraysImpl::legalizeType(Type *Ty) {
 
   Type *LegalizedTy = Ty;
 
-  if (isa<ArrayType>(Ty)) {
+  if (shouldLegalizeInstType(Ty)) {
     LegalizedTy = PointerType::get(
         Ty->getContext(),
         storageClassToAddressSpace(SPIRV::StorageClass::Generic));
diff --git a/llvm/test/CodeGen/SPIRV/legalize-zero-size-arrays-struct.ll b/llvm/test/CodeGen/SPIRV/legalize-zero-size-arrays-struct.ll
index d340417cbfdc8..e48eb239cebd1 100644
--- a/llvm/test/CodeGen/SPIRV/legalize-zero-size-arrays-struct.ll
+++ b/llvm/test/CodeGen/SPIRV/legalize-zero-size-arrays-struct.ll
@@ -7,5 +7,11 @@
 
 @global_struct = addrspace(1) global %struct.with_zero zeroinitializer
 
+%struct.mixed = type { [4 x i32], [0 x i32] }
+
+ at global_mixed = addrspace(1) global %struct.mixed zeroinitializer
+
 ; CHECK: %struct.with_zero.legalized = type { i32, ptr addrspace(4), i32 }
+; CHECK: %struct.mixed.legalized = type { [4 x i32], ptr addrspace(4) }
 ; CHECK: @global_struct = addrspace(1) global %struct.with_zero.legalized zeroinitializer
+; CHECK: @global_mixed = addrspace(1) global %struct.mixed.legalized zeroinitializer



More information about the llvm-commits mailing list