13eca15cbSJustin Bogner; RUN: opt -S -disable-output -passes="print<dxil-resource-binding>" < %s 2>&1 | FileCheck %s 251ede55eSJustin Bogner 351ede55eSJustin Bogner@G = external constant <4 x float>, align 4 451ede55eSJustin Bogner 551ede55eSJustin Bognerdefine void @test_typedbuffer() { 6782bc4f6SJustin Bogner ; ByteAddressBuffer Buf : register(t8, space1) 73eca15cbSJustin Bogner %srv0 = call target("dx.RawBuffer", void, 0, 0) 8*aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_i8_0_0t( 9782bc4f6SJustin Bogner i32 1, i32 8, i32 1, i32 0, i1 false) 10782bc4f6SJustin Bogner ; CHECK: Binding [[SRV0:[0-9]+]]: 1151ede55eSJustin Bogner ; CHECK: Binding: 1251ede55eSJustin Bogner ; CHECK: Record ID: 0 13782bc4f6SJustin Bogner ; CHECK: Space: 1 14782bc4f6SJustin Bogner ; CHECK: Lower Bound: 8 1551ede55eSJustin Bogner ; CHECK: Size: 1 1651ede55eSJustin Bogner ; CHECK: Class: SRV 17782bc4f6SJustin Bogner ; CHECK: Kind: RawBuffer 1851ede55eSJustin Bogner 1951ede55eSJustin Bogner ; struct S { float4 a; uint4 b; }; 2051ede55eSJustin Bogner ; StructuredBuffer<S> Buf : register(t2, space4) 21782bc4f6SJustin Bogner %srv1 = call target("dx.RawBuffer", {<4 x float>, <4 x i32>}, 0, 0) 22*aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_sl_v4f32v4i32s_0_0t( 2351ede55eSJustin Bogner i32 4, i32 2, i32 1, i32 0, i1 false) 24782bc4f6SJustin Bogner ; CHECK: Binding [[SRV1:[0-9]+]]: 2551ede55eSJustin Bogner ; CHECK: Binding: 2651ede55eSJustin Bogner ; CHECK: Record ID: 1 2751ede55eSJustin Bogner ; CHECK: Space: 4 2851ede55eSJustin Bogner ; CHECK: Lower Bound: 2 2951ede55eSJustin Bogner ; CHECK: Size: 1 3051ede55eSJustin Bogner ; CHECK: Class: SRV 3151ede55eSJustin Bogner ; CHECK: Kind: StructuredBuffer 3251ede55eSJustin Bogner ; CHECK: Buffer Stride: 32 3351ede55eSJustin Bogner ; CHECK: Alignment: 4 3451ede55eSJustin Bogner 35782bc4f6SJustin Bogner ; Buffer<uint4> Buf[24] : register(t3, space5) 36782bc4f6SJustin Bogner %srv2 = call target("dx.TypedBuffer", <4 x i32>, 0, 0, 0) 37*aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_i32_0_0t( 38782bc4f6SJustin Bogner i32 5, i32 3, i32 24, i32 0, i1 false) 39782bc4f6SJustin Bogner ; CHECK: Binding [[SRV2:[0-9]+]]: 4051ede55eSJustin Bogner ; CHECK: Binding: 4151ede55eSJustin Bogner ; CHECK: Record ID: 2 42782bc4f6SJustin Bogner ; CHECK: Space: 5 43782bc4f6SJustin Bogner ; CHECK: Lower Bound: 3 44782bc4f6SJustin Bogner ; CHECK: Size: 24 4551ede55eSJustin Bogner ; CHECK: Class: SRV 46782bc4f6SJustin Bogner ; CHECK: Kind: TypedBuffer 47782bc4f6SJustin Bogner ; CHECK: Element Type: u32 48782bc4f6SJustin Bogner ; CHECK: Element Count: 4 49782bc4f6SJustin Bogner 50782bc4f6SJustin Bogner ; RWBuffer<int> Buf : register(u7, space2) 51782bc4f6SJustin Bogner %uav0 = call target("dx.TypedBuffer", i32, 1, 0, 1) 52*aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_i32_1_0t( 53782bc4f6SJustin Bogner i32 2, i32 7, i32 1, i32 0, i1 false) 54782bc4f6SJustin Bogner ; CHECK: Binding [[UAV0:[0-9]+]]: 55782bc4f6SJustin Bogner ; CHECK: Binding: 56782bc4f6SJustin Bogner ; CHECK: Record ID: 0 57782bc4f6SJustin Bogner ; CHECK: Space: 2 58782bc4f6SJustin Bogner ; CHECK: Lower Bound: 7 59782bc4f6SJustin Bogner ; CHECK: Size: 1 60782bc4f6SJustin Bogner ; CHECK: Class: UAV 61782bc4f6SJustin Bogner ; CHECK: Kind: TypedBuffer 62782bc4f6SJustin Bogner ; CHECK: Globally Coherent: 0 63782bc4f6SJustin Bogner ; CHECK: HasCounter: 0 64782bc4f6SJustin Bogner ; CHECK: IsROV: 0 65782bc4f6SJustin Bogner ; CHECK: Element Type: i32 66782bc4f6SJustin Bogner ; CHECK: Element Count: 1 67782bc4f6SJustin Bogner 68782bc4f6SJustin Bogner ; RWBuffer<float4> Buf : register(u5, space3) 69782bc4f6SJustin Bogner %uav1 = call target("dx.TypedBuffer", <4 x float>, 1, 0, 0) 70*aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0( 71782bc4f6SJustin Bogner i32 3, i32 5, i32 1, i32 0, i1 false) 72782bc4f6SJustin Bogner ; CHECK: Binding [[UAV1:[0-9]+]]: 73782bc4f6SJustin Bogner ; CHECK: Binding: 74782bc4f6SJustin Bogner ; CHECK: Record ID: 1 75782bc4f6SJustin Bogner ; CHECK: Space: 3 76782bc4f6SJustin Bogner ; CHECK: Lower Bound: 5 77782bc4f6SJustin Bogner ; CHECK: Size: 1 78782bc4f6SJustin Bogner ; CHECK: Class: UAV 79782bc4f6SJustin Bogner ; CHECK: Kind: TypedBuffer 80782bc4f6SJustin Bogner ; CHECK: Globally Coherent: 0 81782bc4f6SJustin Bogner ; CHECK: HasCounter: 0 82782bc4f6SJustin Bogner ; CHECK: IsROV: 0 83782bc4f6SJustin Bogner ; CHECK: Element Type: f32 84782bc4f6SJustin Bogner ; CHECK: Element Count: 4 85782bc4f6SJustin Bogner 86782bc4f6SJustin Bogner ; RWBuffer<float4> BufferArray[10] : register(u0, space4) 87782bc4f6SJustin Bogner ; RWBuffer<float4> Buf = BufferArray[0] 88782bc4f6SJustin Bogner %uav2_1 = call target("dx.TypedBuffer", <4 x float>, 1, 0, 0) 89*aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0( 90782bc4f6SJustin Bogner i32 4, i32 0, i32 10, i32 0, i1 false) 91782bc4f6SJustin Bogner ; RWBuffer<float4> Buf = BufferArray[5] 92782bc4f6SJustin Bogner %uav2_2 = call target("dx.TypedBuffer", <4 x float>, 1, 0, 0) 93*aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0( 94782bc4f6SJustin Bogner i32 4, i32 0, i32 10, i32 5, i1 false) 95782bc4f6SJustin Bogner ; CHECK: Binding [[UAV2:[0-9]+]]: 96782bc4f6SJustin Bogner ; CHECK: Binding: 97782bc4f6SJustin Bogner ; CHECK: Record ID: 2 98782bc4f6SJustin Bogner ; CHECK: Space: 4 99782bc4f6SJustin Bogner ; CHECK: Lower Bound: 0 100782bc4f6SJustin Bogner ; CHECK: Size: 10 101782bc4f6SJustin Bogner ; CHECK: Class: UAV 102782bc4f6SJustin Bogner ; CHECK: Kind: TypedBuffer 103782bc4f6SJustin Bogner ; CHECK: Globally Coherent: 0 104782bc4f6SJustin Bogner ; CHECK: HasCounter: 0 105782bc4f6SJustin Bogner ; CHECK: IsROV: 0 106782bc4f6SJustin Bogner ; CHECK: Element Type: f32 107782bc4f6SJustin Bogner ; CHECK: Element Count: 4 108782bc4f6SJustin Bogner 109782bc4f6SJustin Bogner ; CHECK-NOT: Binding {{[0-9]+}}: 11051ede55eSJustin Bogner 11151ede55eSJustin Bogner ret void 11251ede55eSJustin Bogner} 11351ede55eSJustin Bogner 114782bc4f6SJustin Bogner; CHECK-DAG: Call bound to [[SRV0]]: %srv0 = 115782bc4f6SJustin Bogner; CHECK-DAG: Call bound to [[SRV1]]: %srv1 = 116782bc4f6SJustin Bogner; CHECK-DAG: Call bound to [[SRV2]]: %srv2 = 117782bc4f6SJustin Bogner; CHECK-DAG: Call bound to [[UAV0]]: %uav0 = 118782bc4f6SJustin Bogner; CHECK-DAG: Call bound to [[UAV1]]: %uav1 = 119782bc4f6SJustin Bogner; CHECK-DAG: Call bound to [[UAV2]]: %uav2_1 = 120782bc4f6SJustin Bogner; CHECK-DAG: Call bound to [[UAV2]]: %uav2_2 = 12151ede55eSJustin Bogner 12251ede55eSJustin Bognerattributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) } 123