llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-directx @llvm/pr-subscribers-hlsl Author: Helena Kotas (hekota) <details> <summary>Changes</summary> Adds resource name argument to `llvm.dx.handlefrombinding` and `llvm.dx.handlefromimplicitbinding` intrinsics. SPIR-V currently does not seem to need the resource names so this change only affects DirectX binding intrinsics. Part 2/4 of https://github.com/llvm/llvm-project/issues/105059 Depends on #<!-- -->139985 --- Patch is 154.52 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/139991.diff 69 Files Affected: - (modified) clang/lib/CodeGen/CGHLSLBuiltins.cpp (+28-7) - (modified) clang/lib/CodeGen/CGHLSLRuntime.cpp (+26-12) - (modified) clang/lib/CodeGen/CGHLSLRuntime.h (+3) - (modified) clang/test/CodeGenHLSL/builtins/ByteAddressBuffers-constructors.hlsl (+2-2) - (modified) clang/test/CodeGenHLSL/builtins/RWBuffer-constructor.hlsl (+2-2) - (modified) clang/test/CodeGenHLSL/builtins/StructuredBuffers-constructors.hlsl (+2-2) - (modified) clang/test/CodeGenHLSL/cbuffer.hlsl (+17-10) - (modified) clang/test/CodeGenHLSL/cbuffer_with_packoffset.hlsl (+2-1) - (modified) clang/test/CodeGenHLSL/resource-bindings.hlsl (+4-4) - (modified) llvm/include/llvm/IR/IntrinsicsDirectX.td (+2-2) - (modified) llvm/lib/Target/DirectX/DXILOpLowering.cpp (+17-11) - (modified) llvm/lib/Target/DirectX/DXILResourceImplicitBinding.cpp (+2-1) - (modified) llvm/test/Analysis/DXILResource/buffer-frombinding.ll (+10-10) - (modified) llvm/test/CodeGen/DirectX/BufferLoad-sm61.ll (+3-3) - (modified) llvm/test/CodeGen/DirectX/BufferLoad.ll (+8-8) - (modified) llvm/test/CodeGen/DirectX/BufferStore-errors.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/BufferStore-sm61.ll (+6-6) - (modified) llvm/test/CodeGen/DirectX/BufferStore.ll (+7-7) - (modified) llvm/test/CodeGen/DirectX/CBufferAccess/array-typedgep.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/CBufferAccess/arrays.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/CBufferAccess/scalars.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/CBufferAccess/vectors.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/CBufferLoadLegacy-errors.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/CBufferLoadLegacy.ll (+3-3) - (modified) llvm/test/CodeGen/DirectX/ContainerData/PSVResources-order.ll (+3-3) - (modified) llvm/test/CodeGen/DirectX/ContainerData/PSVResources.ll (+8-8) - (modified) llvm/test/CodeGen/DirectX/CreateHandle.ll (+13-6) - (modified) llvm/test/CodeGen/DirectX/CreateHandleFromBinding.ll (+14-7) - (modified) llvm/test/CodeGen/DirectX/ForwardHandleAccesses/alloca.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/ForwardHandleAccesses/ambiguous.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/ForwardHandleAccesses/buffer-O0.ll (+4-4) - (modified) llvm/test/CodeGen/DirectX/ForwardHandleAccesses/cbuffer-access.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/ForwardHandleAccesses/undominated.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/ImplicitBinding/arrays.ll (+10-10) - (modified) llvm/test/CodeGen/DirectX/ImplicitBinding/multiple-spaces.ll (+12-12) - (modified) llvm/test/CodeGen/DirectX/ImplicitBinding/simple.ll (+6-6) - (modified) llvm/test/CodeGen/DirectX/ImplicitBinding/unbounded-arrays-error.ll (+4-4) - (modified) llvm/test/CodeGen/DirectX/ImplicitBinding/unbounded-arrays.ll (+8-8) - (modified) llvm/test/CodeGen/DirectX/Metadata/cbuffer-only.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/Metadata/cbuffer_metadata.ll (+3-3) - (modified) llvm/test/CodeGen/DirectX/Metadata/resource-symbols.ll (+5-5) - (modified) llvm/test/CodeGen/DirectX/Metadata/srv_metadata.ll (+9-9) - (modified) llvm/test/CodeGen/DirectX/Metadata/uav_metadata.ll (+12-12) - (modified) llvm/test/CodeGen/DirectX/RawBufferLoad-error64.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/RawBufferLoad.ll (+7-7) - (modified) llvm/test/CodeGen/DirectX/RawBufferStore-error64.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/RawBufferStore.ll (+7-7) - (modified) llvm/test/CodeGen/DirectX/ResourceAccess/load_rawbuffer.ll (+7-7) - (modified) llvm/test/CodeGen/DirectX/ResourceAccess/load_typedbuffer.ll (+3-3) - (modified) llvm/test/CodeGen/DirectX/ResourceAccess/store_rawbuffer.ll (+7-7) - (modified) llvm/test/CodeGen/DirectX/ResourceAccess/store_typedbuffer.ll (+3-3) - (modified) llvm/test/CodeGen/DirectX/ResourceGlobalElimination.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/max-64-uavs-array-valver1.5.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/max-64-uavs-array-valver1.6.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/max-64-uavs.ll (+9-9) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/raw-and-structured-buffers.ll (+3-3) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/res-may-alias-0.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/res-may-alias-1.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/res-may-not-alias-sm6.6.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/res-may-not-alias-sm6.7.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/res-may-not-alias-valver1.8.ll (+2-2) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/typed-uav-load-additional-formats.ll (+3-3) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/uavs-at-every-stage-lib-valver1.7.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/uavs-at-every-stage-lib-valver1.8.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/ShaderFlags/uavs-at-every-stage-vs.ll (+1-1) - (modified) llvm/test/CodeGen/DirectX/bufferUpdateCounter.ll (+3-3) - (modified) llvm/test/CodeGen/DirectX/resource_counter_error.ll (+1-1) - (modified) llvm/unittests/Target/DirectX/ResourceBindingAnalysisTests.cpp (+21-21) - (modified) llvm/unittests/Target/DirectX/UniqueResourceFromUseTests.cpp (+6-6) ``````````diff diff --git a/clang/lib/CodeGen/CGHLSLBuiltins.cpp b/clang/lib/CodeGen/CGHLSLBuiltins.cpp index d4a0714da07b3..0e0bafb0d3fd6 100644 --- a/clang/lib/CodeGen/CGHLSLBuiltins.cpp +++ b/clang/lib/CodeGen/CGHLSLBuiltins.cpp @@ -299,9 +299,20 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned BuiltinID, // (llvm/llvm-project#135452) Value *NonUniform = llvm::ConstantInt::get(llvm::Type::getInt1Ty(getLLVMContext()), false); - return Builder.CreateIntrinsic( - HandleTy, CGM.getHLSLRuntime().getCreateHandleFromBindingIntrinsic(), - ArrayRef<Value *>{SpaceOp, RegisterOp, RangeOp, IndexOp, NonUniform}); + + Intrinsic::ID IID = + CGM.getHLSLRuntime().getCreateHandleFromBindingIntrinsic(); + // SPIR-V intrinsic does not have include the resource name + if (IID == Intrinsic::spv_resource_handlefrombinding) + return Builder.CreateIntrinsic( + HandleTy, IID, + ArrayRef<Value *>{SpaceOp, RegisterOp, RangeOp, IndexOp, NonUniform}); + + Value *NameOp = EmitScalarExpr(E->getArg(5)); + return Builder.CreateIntrinsic(HandleTy, IID, + ArrayRef<Value *>{SpaceOp, RegisterOp, + RangeOp, IndexOp, + NonUniform, NameOp}); } case Builtin::BI__builtin_hlsl_resource_handlefromimplicitbinding: { llvm::Type *HandleTy = CGM.getTypes().ConvertType(E->getType()); @@ -313,10 +324,20 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned BuiltinID, // (llvm/llvm-project#135452) Value *NonUniform = llvm::ConstantInt::get(llvm::Type::getInt1Ty(getLLVMContext()), false); - return Builder.CreateIntrinsic( - HandleTy, - CGM.getHLSLRuntime().getCreateHandleFromImplicitBindingIntrinsic(), - ArrayRef<Value *>{OrderID, SpaceOp, RangeOp, IndexOp, NonUniform}); + + Intrinsic::ID IID = + CGM.getHLSLRuntime().getCreateHandleFromImplicitBindingIntrinsic(); + // SPIR-V intrinsic does not include the resource name + if (IID == Intrinsic::spv_resource_handlefromimplicitbinding) + return Builder.CreateIntrinsic( + HandleTy, IID, + ArrayRef<Value *>{OrderID, SpaceOp, RangeOp, IndexOp, NonUniform}); + + Value *NameOp = EmitScalarExpr(E->getArg(5)); + return Builder.CreateIntrinsic(HandleTy, IID, + ArrayRef<Value *>{OrderID, SpaceOp, RangeOp, + IndexOp, NonUniform, + NameOp}); } case Builtin::BI__builtin_hlsl_all: { Value *Op0 = EmitScalarExpr(E->getArg(0)); diff --git a/clang/lib/CodeGen/CGHLSLRuntime.cpp b/clang/lib/CodeGen/CGHLSLRuntime.cpp index a708b3aea129d..b9577a0dc48a1 100644 --- a/clang/lib/CodeGen/CGHLSLRuntime.cpp +++ b/clang/lib/CodeGen/CGHLSLRuntime.cpp @@ -42,10 +42,6 @@ using namespace llvm; using llvm::hlsl::CBufferRowSizeInBytes; -static void initializeBufferFromBinding(CodeGenModule &CGM, - llvm::GlobalVariable *GV, - HLSLResourceBindingAttr *RBA); - namespace { void addDxilValVersion(StringRef ValVersionStr, llvm::Module &M) { @@ -275,7 +271,7 @@ void CGHLSLRuntime::addBuffer(const HLSLBufferDecl *BufDecl) { HLSLResourceBindingAttr *RBA = BufDecl->getAttr<HLSLResourceBindingAttr>(); assert(RBA && "cbuffer/tbuffer should always have resource binding attribute"); - initializeBufferFromBinding(CGM, BufGV, RBA); + initializeBufferFromBinding(BufDecl, BufGV, RBA); } llvm::TargetExtType * @@ -557,29 +553,47 @@ static void initializeBuffer(CodeGenModule &CGM, llvm::GlobalVariable *GV, CGM.AddCXXGlobalInit(InitResFunc); } -static void initializeBufferFromBinding(CodeGenModule &CGM, - llvm::GlobalVariable *GV, - HLSLResourceBindingAttr *RBA) { +void CGHLSLRuntime::initializeBufferFromBinding(const HLSLBufferDecl *BufDecl, + llvm::GlobalVariable *GV, + HLSLResourceBindingAttr *RBA) { llvm::Type *Int1Ty = llvm::Type::getInt1Ty(CGM.getLLVMContext()); auto *NonUniform = llvm::ConstantInt::get(Int1Ty, false); auto *Index = llvm::ConstantInt::get(CGM.IntTy, 0); auto *RangeSize = llvm::ConstantInt::get(CGM.IntTy, 1); auto *Space = llvm::ConstantInt::get(CGM.IntTy, RBA ? RBA->getSpaceNumber() : 0); + Value *Name = nullptr; + + // DXIL intrinsic includes resource name + if (getArch() == Triple::dxil) { + std::string Str = std::string(BufDecl->getName()); + std::string GlobalName = Str + ".str"; + Name = CGM.GetAddrOfConstantCString(Str, GlobalName.c_str()).getPointer(); + } + // buffer with explicit binding if (RBA->hasRegisterSlot()) { auto *RegSlot = llvm::ConstantInt::get(CGM.IntTy, RBA->getSlotNumber()); Intrinsic::ID Intr = CGM.getHLSLRuntime().getCreateHandleFromBindingIntrinsic(); - initializeBuffer(CGM, GV, Intr, - {Space, RegSlot, RangeSize, Index, NonUniform}); + if (Name) + initializeBuffer(CGM, GV, Intr, + {Space, RegSlot, RangeSize, Index, NonUniform, Name}); + else + initializeBuffer(CGM, GV, Intr, + {Space, RegSlot, RangeSize, Index, NonUniform}); } else { + // buffer with implicit binding auto *OrderID = llvm::ConstantInt::get(CGM.IntTy, RBA->getImplicitBindingOrderID()); Intrinsic::ID Intr = CGM.getHLSLRuntime().getCreateHandleFromImplicitBindingIntrinsic(); - initializeBuffer(CGM, GV, Intr, - {OrderID, Space, RangeSize, Index, NonUniform}); + if (Name) + initializeBuffer(CGM, GV, Intr, + {OrderID, Space, RangeSize, Index, NonUniform, Name}); + else + initializeBuffer(CGM, GV, Intr, + {OrderID, Space, RangeSize, Index, NonUniform}); } } diff --git a/clang/lib/CodeGen/CGHLSLRuntime.h b/clang/lib/CodeGen/CGHLSLRuntime.h index e40864d8ed854..f86dca8c4fd26 100644 --- a/clang/lib/CodeGen/CGHLSLRuntime.h +++ b/clang/lib/CodeGen/CGHLSLRuntime.h @@ -164,6 +164,9 @@ class CGHLSLRuntime { private: void emitBufferGlobalsAndMetadata(const HLSLBufferDecl *BufDecl, llvm::GlobalVariable *BufGV); + void initializeBufferFromBinding(const HLSLBufferDecl *BufDecl, + llvm::GlobalVariable *GV, + HLSLResourceBindingAttr *RBA); llvm::Triple::ArchType getArch(); llvm::DenseMap<const clang::RecordType *, llvm::TargetExtType *> LayoutTypes; diff --git a/clang/test/CodeGenHLSL/builtins/ByteAddressBuffers-constructors.hlsl b/clang/test/CodeGenHLSL/builtins/ByteAddressBuffers-constructors.hlsl index 2601a2ee4ff35..c29166e3fd749 100644 --- a/clang/test/CodeGenHLSL/builtins/ByteAddressBuffers-constructors.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ByteAddressBuffers-constructors.hlsl @@ -70,7 +70,7 @@ export void foo() { // CHECK: define linkonce_odr void @_ZN4hlsl17ByteAddressBufferC2EjjijPKc(ptr noundef nonnull align 4 dereferenceable(4) %this, // CHECK-SAME: i32 noundef %registerNo, i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, ptr noundef %name) // CHECK-DXIL: %[[HANDLE:.*]] = call target("dx.RawBuffer", i8, 0, 0) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_i8_0_0t( -// CHECK-DXIL-SAME: i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false) +// CHECK-DXIL-SAME: i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false, ptr %{{.*}}) // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::ByteAddressBuffer", ptr %{{.*}}, i32 0, i32 0 // CHECK-DXIL-NEXT: store target("dx.RawBuffer", i8, 0, 0) %[[HANDLE]], ptr %__handle, align 4 @@ -79,7 +79,7 @@ export void foo() { // CHECK: define linkonce_odr void @_ZN4hlsl19RWByteAddressBufferC2EjijjPKc(ptr noundef nonnull align 4 dereferenceable(4) %this, // CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, i32 noundef %orderId, ptr noundef %name) // CHECK: %[[HANDLE:.*]] = call target("dx.RawBuffer", i8, 1, 0) @llvm.dx.resource.handlefromimplicitbinding.tdx.RawBuffer_i8_1_0t -// CHECK-SAME: (i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false) +// CHECK-SAME: (i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false, ptr %{{.*}}) // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWByteAddressBuffer", ptr %this1, i32 0, i32 0 // CHECK-NEXT: store target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]], ptr %__handle, align 4 diff --git a/clang/test/CodeGenHLSL/builtins/RWBuffer-constructor.hlsl b/clang/test/CodeGenHLSL/builtins/RWBuffer-constructor.hlsl index c2796fa177705..16e994457259a 100644 --- a/clang/test/CodeGenHLSL/builtins/RWBuffer-constructor.hlsl +++ b/clang/test/CodeGenHLSL/builtins/RWBuffer-constructor.hlsl @@ -67,7 +67,7 @@ export void foo() { // CHECK: define linkonce_odr void @_ZN4hlsl8RWBufferIfEC2EjjijPKc(ptr noundef nonnull align 4 dereferenceable(4) %this, // CHECK-SAME: i32 noundef %registerNo, i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, ptr noundef %name) // CHECK-DXIL: %[[HANDLE:.*]] = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0t( -// CHECK-DXIL-SAME: i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false) +// CHECK-DXIL-SAME: i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false, ptr %{{.*}}) // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWBuffer", ptr %{{.*}}, i32 0, i32 0 // CHECK-DXIL-NEXT: store target("dx.TypedBuffer", float, 1, 0, 0) %[[HANDLE]], ptr %__handle, align 4 @@ -76,7 +76,7 @@ export void foo() { // CHECK: define linkonce_odr void @_ZN4hlsl8RWBufferIdEC2EjijjPKc(ptr noundef nonnull align 4 dereferenceable(4) %this, // CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, i32 noundef %orderId, ptr noundef %name) // CHECK: %[[HANDLE:.*]] = call target("dx.TypedBuffer", double, 1, 0, 0) @llvm.dx.resource.handlefromimplicitbinding.tdx.TypedBuffer_f64_1_0_0t -// CHECK-SAME: (i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false) +// CEHCK-SAME: (i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false, ptr %{{.*}}) // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWBuffer.0", ptr %{{.*}}, i32 0, i32 0 // CHECK-NEXT: store target("dx.TypedBuffer", double, 1, 0, 0) %[[HANDLE]], ptr %__handle, align 4 diff --git a/clang/test/CodeGenHLSL/builtins/StructuredBuffers-constructors.hlsl b/clang/test/CodeGenHLSL/builtins/StructuredBuffers-constructors.hlsl index a85a0b0880b6b..9dd5a9b80da88 100644 --- a/clang/test/CodeGenHLSL/builtins/StructuredBuffers-constructors.hlsl +++ b/clang/test/CodeGenHLSL/builtins/StructuredBuffers-constructors.hlsl @@ -71,7 +71,7 @@ export void foo() { // CHECK: define linkonce_odr void @_ZN4hlsl16StructuredBufferIfEC2EjjijPKc(ptr noundef nonnull align 4 dereferenceable(4) %this, // CHECK-SAME: i32 noundef %registerNo, i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, ptr noundef %name) // CHECK-DXIL: %[[HANDLE:.*]] = call target("dx.RawBuffer", float, 0, 0) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_f32_0_0t( -// CHECK-SAME: i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false) +// CHECK-SAME: i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false, ptr %{{.*}}) // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::StructuredBuffer", ptr %{{.*}}, i32 0, i32 0 // CHECK-DXIL-NEXT: store target("dx.RawBuffer", float, 0, 0) %[[HANDLE]], ptr %__handle, align 4 @@ -80,7 +80,7 @@ export void foo() { // CHECK: define linkonce_odr void @_ZN4hlsl18RWStructuredBufferIfEC2EjijjPKc(ptr noundef nonnull align 4 dereferenceable(4) %this, // CHECK-SAME: i32 noundef %spaceNo, i32 noundef %range, i32 noundef %index, i32 noundef %orderId, ptr noundef %name) // CHECK: %[[HANDLE:.*]] = call target("dx.RawBuffer", float, 1, 0) @llvm.dx.resource.handlefromimplicitbinding.tdx.RawBuffer_f32_1_0t -// CHECK-SAME: (i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false) +// CHECK-SAME: (i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i1 false, ptr %{{.*}}) // CHECK-NEXT: %__handle = getelementptr inbounds nuw %"class.hlsl::RWStructuredBuffer", ptr %{{.*}}, i32 0, i32 0 // CHECK-NEXT: store target("dx.RawBuffer", float, 1, 0) %[[HANDLE]], ptr %__handle, align 4 diff --git a/clang/test/CodeGenHLSL/cbuffer.hlsl b/clang/test/CodeGenHLSL/cbuffer.hlsl index 3fb76d57341cf..e0919266dc3b7 100644 --- a/clang/test/CodeGenHLSL/cbuffer.hlsl +++ b/clang/test/CodeGenHLSL/cbuffer.hlsl @@ -54,6 +54,7 @@ cbuffer CBScalars : register(b1, space5) { // CHECK: @a6 = external addrspace(2) global i16, align 2 // CHECK: @a7 = external addrspace(2) global i32, align 4 // CHECK: @a8 = external addrspace(2) global i64, align 8 +// CHECK: @CBScalars.str = private unnamed_addr constant [10 x i8] c"CBScalars\00", align 1 cbuffer CBVectors { float3 b1; @@ -75,6 +76,7 @@ cbuffer CBVectors { // CHECK: @b5 = external addrspace(2) global <4 x i32>, align 16 // CHECK: @b6 = external addrspace(2) global <3 x i16>, align 8 // CHECK: @b7 = external addrspace(2) global <3 x i64>, align 32 +// CHECK: @CBVectors.str = private unnamed_addr constant [10 x i8] c"CBVectors\00", align 1 cbuffer CBArrays : register(b2) { float c1[3]; @@ -97,6 +99,7 @@ cbuffer CBArrays : register(b2) { // CHECK: @c6 = external addrspace(2) global [1 x i16], align 2 // CHECK: @c7 = external addrspace(2) global [2 x i64], align 8 // CHECK: @c8 = external addrspace(2) global [4 x i32], align 4 +// CHECK: @CBArrays.str = private unnamed_addr constant [9 x i8] c"CBArrays\00", align 1 typedef uint32_t4 uint32_t8[2]; typedef uint4 T1; @@ -111,6 +114,7 @@ cbuffer CBTypedefArray : register(space2) { // CHECK-SAME: 128, 0, 64)) // CHECK: @t1 = external addrspace(2) global [2 x [2 x <4 x i32>]], align 16 // CHECK: @t2 = external addrspace(2) global [2 x [2 x <4 x i32>]], align 16 +// CHECK: @CBTypedefArray.str = private unnamed_addr constant [15 x i8] c"CBTypedefArray\00", align 1 struct Empty {}; struct A { @@ -140,6 +144,7 @@ struct D { // CHECK: @d = external addrspace(2) global target("dx.Layout", %__cblayout_D, 94, 0), align 1 // CHECK: @e = external addrspace(2) global half, align 2 // CHECK: @f = external addrspace(2) global <3 x i16>, align 8 +// CHECK: @CBStructs.str = private unnamed_addr constant [10 x i8] c"CBStructs\00", align 1 cbuffer CBStructs { A a; @@ -177,6 +182,7 @@ cbuffer CBClasses { // CHECK: @l = external addrspace(2) global target("dx.Layout", %L, 8, 0, 4), align 1 // CHECK: @m = external addrspace(2) global target("dx.Layout", %M, 68, 0), align 1 // CHECK: @ka = external addrspace(2) global [10 x target("dx.Layout", %K, 4, 0)], align 1 +// CHECK: @CBClasses.str = private unnamed_addr constant [10 x i8] c"CBClasses\00", align 1 struct Test { float a, b; @@ -194,6 +200,7 @@ struct Test { // CHECK: @f7 = external addrspace(2) global float, align 4 // CHECK: @f8 = external addrspace(2) global <1 x double>, align 8 // CHECK: @f9 = external addrspace(2) global i16, align 2 +// CHECK: @CBMix.str = private unnamed_addr constant [6 x i8] c"CBMix\00", align 1 cbuffer CBMix { Test test[2]; @@ -269,61 +276,61 @@ cbuffer CB_C { // CHECK: define internal void @_init_buffer_CBScalars.cb() // CHECK-NEXT: entry: // CHECK-NEXT: %CBScalars.cb_h = call target("dx.CBuffer", target("dx.Layout", %__cblayout_CBScalars, 56, 0, 8, 16, 24, 32, 36, 40, 48)) -// CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBScalarss_56_0_8_16_24_32_36_40_48tt(i32 5, i32 1, i32 1, i32 0, i1 false) +// CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBScalarss_56_0_8_16_24_32_36_40_48tt(i32 5, i32 1, i32 1, i32 0, i1 false, ptr @CBScalars.str) // CHECK-NEXT: store target("dx.CBuffer", target("dx.Layout", %__cblayout_CBScalars, 56, 0, 8, 16, 24, 32, 36, 40, 48)) %CBScalars.cb_h, ptr @CBScalars.cb, align 4 // CHECK: define internal void @_init_buffer_CBVectors.cb() // CHECK-NEXT: entry: // CHECK-NEXT: %CBVectors.cb_h = call target("dx.CBuffer", target("dx.Layout", %__cblayout_CBVectors, 136, 0, 16, 40, 48, 80, 96, 112)) -// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBVectorss_136_0_16_40_48_80_96_112tt(i32 0, i32 0, i32 1, i32 0, i1 false) +// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBVectorss_136_0_16_40_48_80_96_112tt(i32 0, i32 0, i32 1, i32 0, i1 false, ptr @CBVectors.str) // CHECK-NEXT: store target("dx.CBuffer", target("dx.Layout", %__cblayout_CBVectors, 136, 0, 16, 40, 48, 80, 96, 112)) %CBVectors.cb_h, ptr @CBVectors.cb, align 4 // CHECK: define internal void @_init_buffer_CBArrays.cb() // CHECK-NEXT: entry: // CHECK-NEXT: %CBArrays.cb_h = call target("dx.CBuffer", target("dx.Layout", %__cblayout_CBArrays, 708, 0, 48, 112, 176, 224, 608, 624, 656)) -// CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBArrayss_708_0_48_112_176_224_608_624_656tt(i32 0, i32 2, i32 1, i32 0, i1 false) +// CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBArrayss_708_0_48_112_176_224_608_624_656tt(i32 0, i32 2, i32 1, i32 0, i1 false, ptr @CBArrays.str) // CHECK-NEXT: store target("dx.CBuffer", target("dx.Layout", %__cblayout_CBArrays, 708, 0, 48, 112, 176, 224, 608, 624, 656)) %CBArrays.cb_h, ptr @CBArrays.cb, align 4 // CHECK: define internal void @_init_buffer_CBTypedefArray.cb() // CHECK-NEXT: entry: // CHECK-NEXT: %CBTypedefArray.cb_h = call target("dx.CBuffer", target("dx.Layout", %__cblayout_CBTypedefArray, 128, 0, 64)) -// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBTypedefArrays_128_0_64tt(i32 1, i32 2, i32 1, i32 0, i1 false) +// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBTypedefArrays_128_0_64tt(i32 1, i32 2, i32 1, i32 0, i1 false, ptr @CBTypedefArray.str) // CHECK-NEXT: store target("dx.CBuffer", target("dx.Layout", %__cblayout_CBTypedefArray, 128, 0, 64)) %CBTypedefArray.cb_h, ptr @CBTypedefArray.cb, align 4 // CHECK: define internal void @_init_buffer_CBStructs.cb() // CHECK-NEXT: entry: // CHECK-NEXT: %CBStructs.cb_h = call target("dx.CBuffer", target("dx.Layout", %__cblayout_CBStructs, 246, 0, 16, 32, 64, 144, 238, 240)) -// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBStructss_246_0_16_32_64_144_238_240tt(i32 2, i32 0, i32 1, i32 0, i1 false) +// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBStructss_246_0_16_32_64_144_238_240tt(i32 2, i32 0, i32 1, i32 0, i1 false, ptr @CBStructs.str) // CHECK-NEXT: store target("dx.CBuffer", target("dx.Layout", %__cblayout_CBStructs, 246, 0, 16, 32, 64, 144, 238, 240)) %CBStructs.cb_h, ptr @CBStructs.cb, align 4 // CHECK: define internal void @_init_buffer_CBClasses.cb() // CHECK-NEXT: entry: // CHECK-NEXT: %CBClasses.cb_h = call target("dx.CBuffer", target("dx.Layout", %__cblayout_CBClasses, 260, 0, 16, 32, 112)) -// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBClassess_260_0_16_32_112tt(i32 3, i32 0, i32 1, i32 0, i1 false) +// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBClassess_260_0_16_32_112tt(i32 3, i32 0, i32 1, i32 0, i1 false, ptr @CBClasses.str) // CHECK-NEXT: store target("dx.CBuffer", target("dx.Layout", %__cblayout_CBClasses, 260, 0, 16, 32, 112)) %CBClasses.cb_h, ptr @CBClasses.cb, align 4 // CHECK: define internal void @_init_buffer_CBMix.cb() // CHECK-NEXT: entry: // CHECK-NEXT: %CBMix.cb_h = call target("dx.CBuffer", target("dx.Layout", %__cblayout_CBMix, 170, 0, 24, 32, 120, 128, 136, 144, 152, 160, 168)) -// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_tdx.Layout_s___cblayout_CBMixs_170_0_24_32_120_128_136_144_152_160_168tt(i32 4, i32 0, i32 1, i32 0, i1 false) +// CHECK-SAME: @llvm.dx.resource.handlefro... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/139991 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits