xref: /llvm-project/llvm/test/Analysis/DXILResource/buffer-frombinding.ll (revision aa07f922103ebe8e78c8da4c754b43af3c129f3e)
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