[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