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" ; CHECK: @Six = external constant %"Buffer" -; CHECK: @Array = external constant %"Buffer" -; CHECK: @Array2 = external constant %"Buffer" +; CHECK: @Array = external constant [100 x %"Buffer"] +; CHECK: @Array2 = external constant [0 x %"Buffer"] ; CHECK: @Seven = external constant %"Buffer" ; 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" ; CHECK: @Eight = external constant %RasterizerOrderedByteAddressBuffer ; CHECK: @Nine = external constant %"RWBuffer" -; CHECK: @Array = external constant %"RWBuffer" -; CHECK: @Array2 = external constant %"RWBuffer" +; CHECK: @Array = external constant [100 x %"RWBuffer"] +; CHECK: @Array2 = external constant [0 x %"RWBuffer"] ; CHECK: @Ten = external constant %"RWBuffer" ; CHECK: !dx.resources = !{[[ResList:[!][0-9]+]]}