https://github.com/hekota created 
https://github.com/llvm/llvm-project/pull/152254

Closes #145422

Depends on #152253 and #152250

>From c9f45e919b3a305ca685f82512bdce3cf441458b Mon Sep 17 00:00:00 2001
From: Helena Kotas <heko...@microsoft.com>
Date: Tue, 5 Aug 2025 18:23:53 -0700
Subject: [PATCH] [HLSL] Update DXIL resource metadata code to support resource
 arrays

Closes #145422
---
 llvm/lib/Analysis/DXILResource.cpp                 | 7 ++++++-
 llvm/test/CodeGen/DirectX/Metadata/srv_metadata.ll | 4 ++--
 llvm/test/CodeGen/DirectX/Metadata/uav_metadata.ll | 4 ++--
 3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/llvm/lib/Analysis/DXILResource.cpp 
b/llvm/lib/Analysis/DXILResource.cpp
index 629fa7cddb9d4..109c0568a6f9e 100644
--- a/llvm/lib/Analysis/DXILResource.cpp
+++ b/llvm/lib/Analysis/DXILResource.cpp
@@ -612,7 +612,12 @@ void ResourceTypeInfo::print(raw_ostream &OS, const 
DataLayout &DL) const {
 
 GlobalVariable *ResourceInfo::createSymbol(Module &M, StructType *Ty) {
   assert(!Symbol && "Symbol has already been created");
-  Symbol = new GlobalVariable(M, Ty, /*isConstant=*/true,
+  Type *ResTy = Ty;
+  int64_t Size = Binding.Size;
+  if (Size != 1)
+    // unbounded arrays are represented as zero-sized arrays in LLVM IR
+    ResTy = ArrayType::get(Ty, Size == ~0u ? 0 : Size);
+  Symbol = new GlobalVariable(M, ResTy, /*isConstant=*/true,
                               GlobalValue::ExternalLinkage,
                               /*Initializer=*/nullptr, Name);
   return Symbol;
diff --git a/llvm/test/CodeGen/DirectX/Metadata/srv_metadata.ll 
b/llvm/test/CodeGen/DirectX/Metadata/srv_metadata.ll
index b27020633e3a2..86d69abc75760 100644
--- a/llvm/test/CodeGen/DirectX/Metadata/srv_metadata.ll
+++ b/llvm/test/CodeGen/DirectX/Metadata/srv_metadata.ll
@@ -105,8 +105,8 @@ attributes #0 = { noinline nounwind "hlsl.shader"="compute" 
}
 ; CHECK: @Four = external constant %ByteAddressBuffer
 ; CHECK: @Five = external constant %"StructuredBuffer<int16_t>"
 ; CHECK: @Six = external constant %"Buffer<uint32_t>"
-; CHECK: @Array = external constant %"Buffer<float4>"
-; CHECK: @Array2 = external constant %"Buffer<double>"
+; CHECK: @Array = external constant [100 x %"Buffer<float4>"]
+; CHECK: @Array2 = external constant [0 x %"Buffer<double>"]
 ; CHECK: @Seven = external constant %"Buffer<uint32_t>"
 
 ; CHECK: !dx.resources = !{[[ResList:[!][0-9]+]]}
diff --git a/llvm/test/CodeGen/DirectX/Metadata/uav_metadata.ll 
b/llvm/test/CodeGen/DirectX/Metadata/uav_metadata.ll
index 77f36dd40fd7c..4928b1d0bab97 100644
--- a/llvm/test/CodeGen/DirectX/Metadata/uav_metadata.ll
+++ b/llvm/test/CodeGen/DirectX/Metadata/uav_metadata.ll
@@ -128,8 +128,8 @@ attributes #0 = { noinline nounwind "hlsl.shader"="compute" 
}
 ; CHECK: @Seven = external constant 
%"RasterizerOrderedStructuredBuffer<int32_t4>"
 ; CHECK: @Eight = external constant %RasterizerOrderedByteAddressBuffer
 ; CHECK: @Nine = external constant %"RWBuffer<uint32_t>"
-; CHECK: @Array = external constant %"RWBuffer<float4>"
-; CHECK: @Array2 = external constant %"RWBuffer<double>"
+; CHECK: @Array = external constant [100 x %"RWBuffer<float4>"]
+; CHECK: @Array2 = external constant [0 x %"RWBuffer<double>"]
 ; CHECK: @Ten = external constant %"RWBuffer<uint32_t>"
 
 ; CHECK: !dx.resources = !{[[ResList:[!][0-9]+]]}

_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to