@@ -65,21 +65,17 @@ TEST_F(ResourceBindingAnalysisTest, TestTrivialCase) {
65
65
define void @main() {
66
66
entry:
67
67
%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)
70
68
ret void
71
69
}
72
-
73
- declare void @a.func(target("dx.RawBuffer", float, 1, 0) %handle)
74
70
)" ;
75
71
76
72
auto M = parseAsm (Assembly);
77
73
78
74
DXILResourceBindingInfo &DRBI =
79
75
MAM->getResult <DXILResourceBindingAnalysis>(*M);
80
76
81
- EXPECT_EQ (false , DRBI.containsImplicitBinding ());
82
- EXPECT_EQ (false , DRBI.containsOverlappingBinding ());
77
+ EXPECT_EQ (false , DRBI.hasImplicitBinding ());
78
+ EXPECT_EQ (false , DRBI.hasOverlappingBinding ());
83
79
84
80
// check that UAV has exactly one gap
85
81
DXILResourceBindingInfo::BindingSpaces &UAVSpaces =
@@ -94,8 +90,7 @@ declare void @a.func(target("dx.RawBuffer", float, 1, 0) %handle)
94
90
{ResourceClass::SRV, ResourceClass::CBuffer, ResourceClass::Sampler}) {
95
91
DXILResourceBindingInfo::BindingSpaces &Spaces = DRBI.getBindingSpaces (RC);
96
92
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 );
99
94
}
100
95
}
101
96
@@ -116,27 +111,17 @@ define void @main() {
116
111
%handleC = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 5, i32 1, i32 0, i1 false)
117
112
%handleD = call target("dx.RawBuffer", i32, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 5, i32 4, i1 false)
118
113
%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
-
127
114
ret void
128
115
}
129
-
130
- declare void @a.func(target("dx.RawBuffer", float, 1, 0) %handle)
131
116
)" ;
132
117
133
118
auto M = parseAsm (Assembly);
134
119
135
120
DXILResourceBindingInfo &DRBI =
136
121
MAM->getResult <DXILResourceBindingAnalysis>(*M);
137
122
138
- EXPECT_EQ (false , DRBI.containsImplicitBinding ());
139
- EXPECT_EQ (false , DRBI.containsOverlappingBinding ());
123
+ EXPECT_EQ (false , DRBI.hasImplicitBinding ());
124
+ EXPECT_EQ (false , DRBI.hasOverlappingBinding ());
140
125
141
126
DXILResourceBindingInfo::BindingSpaces &SRVSpaces =
142
127
DRBI.getBindingSpaces (ResourceClass::SRV);
@@ -174,25 +159,17 @@ define void @main() {
174
159
%handleB = call target("dx.RawBuffer", float, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 3, i32 0, i1 false)
175
160
%handleC = call target("dx.RawBuffer", float, 0, 0) @llvm.dx.resource.handlefrombinding(i32 2, i32 0, i32 -1, i32 100, i1 false)
176
161
%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
-
183
162
ret void
184
163
}
185
-
186
- declare void @a.func(target("dx.RawBuffer", float, 0, 0) %handle)
187
164
)" ;
188
165
189
166
auto M = parseAsm (Assembly);
190
167
191
168
DXILResourceBindingInfo &DRBI =
192
169
MAM->getResult <DXILResourceBindingAnalysis>(*M);
193
170
194
- EXPECT_EQ (false , DRBI.containsImplicitBinding ());
195
- EXPECT_EQ (true , DRBI.containsOverlappingBinding ());
171
+ EXPECT_EQ (false , DRBI.hasImplicitBinding ());
172
+ EXPECT_EQ (true , DRBI.hasOverlappingBinding ());
196
173
197
174
DXILResourceBindingInfo::BindingSpaces &SRVSpaces =
198
175
DRBI.getBindingSpaces (ResourceClass::SRV);
@@ -215,24 +192,17 @@ define void @main() {
215
192
%handleA = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 -1, i32 1, i32 0, i1 false)
216
193
%handleB = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 1, i32 -10, i32 10, i32 50, i1 false)
217
194
%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
-
223
195
ret void
224
196
}
225
-
226
- declare void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handle)
227
197
)" ;
228
198
229
199
auto M = parseAsm (Assembly);
230
200
231
201
DXILResourceBindingInfo &DRBI =
232
202
MAM->getResult <DXILResourceBindingAnalysis>(*M);
233
203
234
- EXPECT_EQ (false , DRBI.containsImplicitBinding ());
235
- EXPECT_EQ (false , DRBI.containsOverlappingBinding ());
204
+ EXPECT_EQ (false , DRBI.hasImplicitBinding ());
205
+ EXPECT_EQ (false , DRBI.hasOverlappingBinding ());
236
206
237
207
DXILResourceBindingInfo::BindingSpaces &UAVSpaces =
238
208
DRBI.getBindingSpaces (ResourceClass::UAV);
@@ -246,23 +216,30 @@ declare void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handle)
246
216
}
247
217
248
218
TEST_F (ResourceBindingAnalysisTest, TestImplicitFlag) {
249
- // RWBuffer<float> A;
219
+ // RWBuffer<float> A : register(u5, space100);
220
+ // RWBuffer<float> B;
250
221
StringRef Assembly = R"(
251
- %__cblayout_CB = type <{ i32 }>
252
222
define void @main() {
253
223
entry:
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 )
256
226
ret void
257
227
}
258
- declare void @a.func(target("dx.TypedBuffer", float, 1, 0, 0) %handle)
259
228
)" ;
260
229
261
230
auto M = parseAsm (Assembly);
262
231
263
232
DXILResourceBindingInfo &DRBI =
264
233
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});
266
243
}
267
244
268
245
} // namespace
0 commit comments