@@ -65,21 +65,17 @@ TEST_F(ResourceBindingAnalysisTest, TestTrivialCase) {
6565define void @main() {
6666entry:
6767 %handle = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 5, i32 1, i32 0, i1 false)
68-
69- call void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handle)
7068 ret void
7169}
72-
73- declare void @a.func(target("dx.RawBuffer", float, 1, 0) %handle)
7470 )" ;
7571
7672 auto M = parseAsm (Assembly);
7773
7874 DXILResourceBindingInfo &DRBI =
7975 MAM->getResult <DXILResourceBindingAnalysis>(*M);
8076
81- EXPECT_EQ (false , DRBI.containsImplicitBinding ());
82- EXPECT_EQ (false , DRBI.containsOverlappingBinding ());
77+ EXPECT_EQ (false , DRBI.hasImplicitBinding ());
78+ EXPECT_EQ (false , DRBI.hasOverlappingBinding ());
8379
8480 // check that UAV has exactly one gap
8581 DXILResourceBindingInfo::BindingSpaces &UAVSpaces =
@@ -94,8 +90,7 @@ declare void @a.func(target("dx.RawBuffer", float, 1, 0) %handle)
9490 {ResourceClass::SRV, ResourceClass::CBuffer, ResourceClass::Sampler}) {
9591 DXILResourceBindingInfo::BindingSpaces &Spaces = DRBI.getBindingSpaces (RC);
9692 EXPECT_EQ (Spaces.ResClass , RC);
97- EXPECT_EQ (Spaces.Spaces .size (), 1u );
98- checkExpectedSpaceAndFreeRanges (Spaces.Spaces [0 ], 0 , {0 , UINT32_MAX});
93+ EXPECT_EQ (Spaces.Spaces .size (), 0u );
9994 }
10095}
10196
@@ -116,27 +111,17 @@ define void @main() {
116111 %handleC = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 5, i32 1, i32 0, i1 false)
117112 %handleD = call target("dx.RawBuffer", i32, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 5, i32 4, i1 false)
118113 %handleE = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 2, i32 2, i32 0, i1 false)
119-
120- call void @a.func(target("dx.CBuffer", target("dx.Layout", %__cblayout_CB, 4, 0)) %handleCB)
121- call void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handleA)
122- call void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handleC)
123- call void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handleE)
124- call void @a.func(target("dx.RawBuffer", i32, 0, 0) %handleB)
125- call void @a.func(target("dx.RawBuffer", i32, 0, 0) %handleD)
126-
127114 ret void
128115}
129-
130- declare void @a.func(target("dx.RawBuffer", float, 1, 0) %handle)
131116 )" ;
132117
133118 auto M = parseAsm (Assembly);
134119
135120 DXILResourceBindingInfo &DRBI =
136121 MAM->getResult <DXILResourceBindingAnalysis>(*M);
137122
138- EXPECT_EQ (false , DRBI.containsImplicitBinding ());
139- EXPECT_EQ (false , DRBI.containsOverlappingBinding ());
123+ EXPECT_EQ (false , DRBI.hasImplicitBinding ());
124+ EXPECT_EQ (false , DRBI.hasOverlappingBinding ());
140125
141126 DXILResourceBindingInfo::BindingSpaces &SRVSpaces =
142127 DRBI.getBindingSpaces (ResourceClass::SRV);
@@ -174,25 +159,17 @@ define void @main() {
174159 %handleB = call target("dx.RawBuffer", float, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 3, i32 0, i1 false)
175160 %handleC = call target("dx.RawBuffer", float, 0, 0) @llvm.dx.resource.handlefrombinding(i32 2, i32 0, i32 -1, i32 100, i1 false)
176161 %handleD = call target("dx.RawBuffer", float, 0, 0) @llvm.dx.resource.handlefrombinding(i32 2, i32 4, i32 1, i32 0, i1 false)
177-
178- call void @a.func(target("dx.RawBuffer", float, 0, 0) %handleA)
179- call void @a.func(target("dx.RawBuffer", float, 0, 0) %handleB)
180- call void @a.func(target("dx.RawBuffer", float, 0, 0) %handleC)
181- call void @a.func(target("dx.RawBuffer", float, 0, 0) %handleD)
182-
183162 ret void
184163}
185-
186- declare void @a.func(target("dx.RawBuffer", float, 0, 0) %handle)
187164 )" ;
188165
189166 auto M = parseAsm (Assembly);
190167
191168 DXILResourceBindingInfo &DRBI =
192169 MAM->getResult <DXILResourceBindingAnalysis>(*M);
193170
194- EXPECT_EQ (false , DRBI.containsImplicitBinding ());
195- EXPECT_EQ (true , DRBI.containsOverlappingBinding ());
171+ EXPECT_EQ (false , DRBI.hasImplicitBinding ());
172+ EXPECT_EQ (true , DRBI.hasOverlappingBinding ());
196173
197174 DXILResourceBindingInfo::BindingSpaces &SRVSpaces =
198175 DRBI.getBindingSpaces (ResourceClass::SRV);
@@ -215,24 +192,17 @@ define void @main() {
215192 %handleA = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 -1, i32 1, i32 0, i1 false)
216193 %handleB = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 1, i32 -10, i32 10, i32 50, i1 false)
217194 %handleC = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 2, i32 2147483647, i32 10, i32 100, i1 false)
218-
219- call void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handleA)
220- call void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handleB)
221- call void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handleC)
222-
223195 ret void
224196}
225-
226- declare void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handle)
227197 )" ;
228198
229199 auto M = parseAsm (Assembly);
230200
231201 DXILResourceBindingInfo &DRBI =
232202 MAM->getResult <DXILResourceBindingAnalysis>(*M);
233203
234- EXPECT_EQ (false , DRBI.containsImplicitBinding ());
235- EXPECT_EQ (false , DRBI.containsOverlappingBinding ());
204+ EXPECT_EQ (false , DRBI.hasImplicitBinding ());
205+ EXPECT_EQ (false , DRBI.hasOverlappingBinding ());
236206
237207 DXILResourceBindingInfo::BindingSpaces &UAVSpaces =
238208 DRBI.getBindingSpaces (ResourceClass::UAV);
@@ -246,23 +216,30 @@ declare void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handle)
246216}
247217
248218TEST_F (ResourceBindingAnalysisTest, TestImplicitFlag) {
249- // RWBuffer<float> A;
219+ // RWBuffer<float> A : register(u5, space100);
220+ // RWBuffer<float> B;
250221 StringRef Assembly = R"(
251- %__cblayout_CB = type <{ i32 }>
252222define void @main() {
253223entry:
254- %handleA = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefromimplicitbinding (i32 0 , i32 0 , i32 1, i32 0)
255- call void @a.func( target("dx.TypedBuffer", float, 1, 0, 0) %handleA )
224+ %handleA = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding (i32 100 , i32 5 , i32 1, i32 0, i1 false )
225+ %handleB = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefromimplicitbinding(i32 0, i32 0, i32 1, i32 0, i1 false )
256226 ret void
257227}
258- declare void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handle)
259228 )" ;
260229
261230 auto M = parseAsm (Assembly);
262231
263232 DXILResourceBindingInfo &DRBI =
264233 MAM->getResult <DXILResourceBindingAnalysis>(*M);
265- EXPECT_EQ (true , DRBI.containsImplicitBinding ());
234+ EXPECT_EQ (true , DRBI.hasImplicitBinding ());
235+ EXPECT_EQ (false , DRBI.hasOverlappingBinding ());
236+
237+ DXILResourceBindingInfo::BindingSpaces &UAVSpaces =
238+ DRBI.getBindingSpaces (ResourceClass::UAV);
239+ EXPECT_EQ (UAVSpaces.ResClass , ResourceClass::UAV);
240+ EXPECT_EQ (UAVSpaces.Spaces .size (), 1u );
241+ checkExpectedSpaceAndFreeRanges (UAVSpaces.Spaces [0 ], 100 ,
242+ {0 , 4 , 6 , UINT32_MAX});
266243}
267244
268245} // namespace
0 commit comments