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