@@ -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