1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by generate_tests.py
3 //
4 // Copyright (c) 2022 Google LLC.
5 //
6 // Licensed under the Apache License, Version 2.0 (the "License");
7 // you may not use this file except in compliance with the License.
8 // You may obtain a copy of the License at
9 //
10 // http://www.apache.org/licenses/LICENSE-2.0
11 //
12 // Unless required by applicable law or agreed to in writing, software
13 // distributed under the License is distributed on an "AS IS" BASIS,
14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 // See the License for the specific language governing permissions and
16 // limitations under the License.
17
18 #include "../diff_test_utils.h"
19
20 #include "gtest/gtest.h"
21
22 namespace spvtools {
23 namespace diff {
24 namespace {
25
26 // Test for multiple entry points with the same execution model.
27 constexpr char kSrc[] = R"( OpCapability Shader
28 %1 = OpExtInstImport "GLSL.std.450"
29 OpMemoryModel Logical GLSL450
30 OpEntryPoint Vertex %4 "main1" %8 %10
31 OpEntryPoint Vertex %12 "main2" %13 %14 %15
32 OpSource ESSL 310
33 OpName %4 "main1"
34 OpName %12 "main2"
35 OpName %8 "v"
36 OpName %10 "a"
37 OpName %13 "v"
38 OpName %14 "a"
39 OpName %15 "b"
40 OpDecorate %8 Location 0
41 OpDecorate %10 Location 0
42 OpDecorate %13 Location 0
43 OpDecorate %14 Location 0
44 OpDecorate %15 Location 1
45 %2 = OpTypeVoid
46 %3 = OpTypeFunction %2
47 %6 = OpTypeFloat 32
48
49 %7 = OpTypePointer Output %6
50 %9 = OpTypePointer Input %6
51 %8 = OpVariable %7 Output
52 %10 = OpVariable %9 Input
53 %13 = OpVariable %7 Output
54 %14 = OpVariable %9 Input
55 %15 = OpVariable %9 Input
56
57 %4 = OpFunction %2 None %3
58 %5 = OpLabel
59 %11 = OpLoad %6 %10
60 OpStore %8 %11
61 OpReturn
62 OpFunctionEnd
63
64 %12 = OpFunction %2 None %3
65 %16 = OpLabel
66 %17 = OpLoad %6 %14
67 %18 = OpLoad %6 %15
68 %19 = OpFAdd %6 %17 %18
69 OpStore %13 %19
70 OpReturn
71 OpFunctionEnd)";
72 constexpr char kDst[] = R"( OpCapability Shader
73 %1 = OpExtInstImport "GLSL.std.450"
74 OpMemoryModel Logical GLSL450
75 OpEntryPoint Vertex %4 "main2" %13 %14 %15
76 OpEntryPoint Vertex %12 "main1" %8 %10
77 OpSource ESSL 310
78 OpName %12 "main1"
79 OpName %4 "main2"
80 OpName %8 "v"
81 OpName %10 "a"
82 OpName %13 "v"
83 OpName %14 "a"
84 OpName %15 "b"
85 OpDecorate %8 Location 0
86 OpDecorate %10 Location 0
87 OpDecorate %13 Location 0
88 OpDecorate %14 Location 0
89 OpDecorate %15 Location 1
90 %2 = OpTypeVoid
91 %3 = OpTypeFunction %2
92 %6 = OpTypeFloat 32
93
94 %7 = OpTypePointer Output %6
95 %9 = OpTypePointer Input %6
96 %8 = OpVariable %7 Output
97 %10 = OpVariable %9 Input
98 %13 = OpVariable %7 Output
99 %14 = OpVariable %9 Input
100 %15 = OpVariable %9 Input
101
102 %4 = OpFunction %2 None %3
103 %16 = OpLabel
104 %17 = OpLoad %6 %14
105 %18 = OpLoad %6 %15
106 %19 = OpFAdd %6 %17 %18
107 OpStore %13 %19
108 OpReturn
109 OpFunctionEnd
110
111 %12 = OpFunction %2 None %3
112 %5 = OpLabel
113 %11 = OpLoad %6 %10
114 OpStore %8 %11
115 OpReturn
116 OpFunctionEnd
117 )";
118
TEST(DiffTest,MultipleSameEntryPoints)119 TEST(DiffTest, MultipleSameEntryPoints) {
120 constexpr char kDiff[] = R"( ; SPIR-V
121 ; Version: 1.6
122 ; Generator: Khronos SPIR-V Tools Assembler; 0
123 ; Bound: 20
124 ; Schema: 0
125 OpCapability Shader
126 %1 = OpExtInstImport "GLSL.std.450"
127 OpMemoryModel Logical GLSL450
128 +OpEntryPoint Vertex %12 "main2" %13 %14 %15
129 OpEntryPoint Vertex %4 "main1" %8 %10
130 -OpEntryPoint Vertex %12 "main2" %13 %14 %15
131 OpSource ESSL 310
132 OpName %4 "main1"
133 OpName %12 "main2"
134 OpName %8 "v"
135 OpName %10 "a"
136 OpName %13 "v"
137 OpName %14 "a"
138 OpName %15 "b"
139 OpDecorate %8 Location 0
140 OpDecorate %10 Location 0
141 OpDecorate %13 Location 0
142 OpDecorate %14 Location 0
143 OpDecorate %15 Location 1
144 %2 = OpTypeVoid
145 %3 = OpTypeFunction %2
146 %6 = OpTypeFloat 32
147 %7 = OpTypePointer Output %6
148 %9 = OpTypePointer Input %6
149 %8 = OpVariable %7 Output
150 %10 = OpVariable %9 Input
151 %13 = OpVariable %7 Output
152 %14 = OpVariable %9 Input
153 %15 = OpVariable %9 Input
154 %4 = OpFunction %2 None %3
155 %5 = OpLabel
156 %11 = OpLoad %6 %10
157 OpStore %8 %11
158 OpReturn
159 OpFunctionEnd
160 %12 = OpFunction %2 None %3
161 %16 = OpLabel
162 %17 = OpLoad %6 %14
163 %18 = OpLoad %6 %15
164 %19 = OpFAdd %6 %17 %18
165 OpStore %13 %19
166 OpReturn
167 OpFunctionEnd
168 )";
169 Options options;
170 DoStringDiffTest(kSrc, kDst, kDiff, options);
171 }
172
TEST(DiffTest,MultipleSameEntryPointsNoDebug)173 TEST(DiffTest, MultipleSameEntryPointsNoDebug) {
174 constexpr char kSrcNoDebug[] = R"( OpCapability Shader
175 %1 = OpExtInstImport "GLSL.std.450"
176 OpMemoryModel Logical GLSL450
177 OpEntryPoint Vertex %4 "main1" %8 %10
178 OpEntryPoint Vertex %12 "main2" %13 %14 %15
179 OpSource ESSL 310
180 OpDecorate %8 Location 0
181 OpDecorate %10 Location 0
182 OpDecorate %13 Location 0
183 OpDecorate %14 Location 0
184 OpDecorate %15 Location 1
185 %2 = OpTypeVoid
186 %3 = OpTypeFunction %2
187 %6 = OpTypeFloat 32
188
189 %7 = OpTypePointer Output %6
190 %9 = OpTypePointer Input %6
191 %8 = OpVariable %7 Output
192 %10 = OpVariable %9 Input
193 %13 = OpVariable %7 Output
194 %14 = OpVariable %9 Input
195 %15 = OpVariable %9 Input
196
197 %4 = OpFunction %2 None %3
198 %5 = OpLabel
199 %11 = OpLoad %6 %10
200 OpStore %8 %11
201 OpReturn
202 OpFunctionEnd
203
204 %12 = OpFunction %2 None %3
205 %16 = OpLabel
206 %17 = OpLoad %6 %14
207 %18 = OpLoad %6 %15
208 %19 = OpFAdd %6 %17 %18
209 OpStore %13 %19
210 OpReturn
211 OpFunctionEnd
212 )";
213 constexpr char kDstNoDebug[] = R"( OpCapability Shader
214 %1 = OpExtInstImport "GLSL.std.450"
215 OpMemoryModel Logical GLSL450
216 OpEntryPoint Vertex %4 "main2" %13 %14 %15
217 OpEntryPoint Vertex %12 "main1" %8 %10
218 OpSource ESSL 310
219 OpDecorate %8 Location 0
220 OpDecorate %10 Location 0
221 OpDecorate %13 Location 0
222 OpDecorate %14 Location 0
223 OpDecorate %15 Location 1
224 %2 = OpTypeVoid
225 %3 = OpTypeFunction %2
226 %6 = OpTypeFloat 32
227
228 %7 = OpTypePointer Output %6
229 %9 = OpTypePointer Input %6
230 %8 = OpVariable %7 Output
231 %10 = OpVariable %9 Input
232 %13 = OpVariable %7 Output
233 %14 = OpVariable %9 Input
234 %15 = OpVariable %9 Input
235
236 %4 = OpFunction %2 None %3
237 %16 = OpLabel
238 %17 = OpLoad %6 %14
239 %18 = OpLoad %6 %15
240 %19 = OpFAdd %6 %17 %18
241 OpStore %13 %19
242 OpReturn
243 OpFunctionEnd
244
245 %12 = OpFunction %2 None %3
246 %5 = OpLabel
247 %11 = OpLoad %6 %10
248 OpStore %8 %11
249 OpReturn
250 OpFunctionEnd
251 )";
252 constexpr char kDiff[] = R"( ; SPIR-V
253 ; Version: 1.6
254 ; Generator: Khronos SPIR-V Tools Assembler; 0
255 ; Bound: 20
256 ; Schema: 0
257 OpCapability Shader
258 %1 = OpExtInstImport "GLSL.std.450"
259 OpMemoryModel Logical GLSL450
260 +OpEntryPoint Vertex %12 "main2" %13 %14 %15
261 OpEntryPoint Vertex %4 "main1" %8 %10
262 -OpEntryPoint Vertex %12 "main2" %13 %14 %15
263 OpSource ESSL 310
264 OpDecorate %8 Location 0
265 OpDecorate %10 Location 0
266 OpDecorate %13 Location 0
267 OpDecorate %14 Location 0
268 OpDecorate %15 Location 1
269 %2 = OpTypeVoid
270 %3 = OpTypeFunction %2
271 %6 = OpTypeFloat 32
272 %7 = OpTypePointer Output %6
273 %9 = OpTypePointer Input %6
274 %8 = OpVariable %7 Output
275 %10 = OpVariable %9 Input
276 %13 = OpVariable %7 Output
277 %14 = OpVariable %9 Input
278 %15 = OpVariable %9 Input
279 %4 = OpFunction %2 None %3
280 %5 = OpLabel
281 %11 = OpLoad %6 %10
282 OpStore %8 %11
283 OpReturn
284 OpFunctionEnd
285 %12 = OpFunction %2 None %3
286 %16 = OpLabel
287 %17 = OpLoad %6 %14
288 %18 = OpLoad %6 %15
289 %19 = OpFAdd %6 %17 %18
290 OpStore %13 %19
291 OpReturn
292 OpFunctionEnd
293 )";
294 Options options;
295 DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
296 }
297
TEST(DiffTest,MultipleSameEntryPointsDumpIds)298 TEST(DiffTest, MultipleSameEntryPointsDumpIds) {
299 constexpr char kDiff[] = R"( ; SPIR-V
300 ; Version: 1.6
301 ; Generator: Khronos SPIR-V Tools Assembler; 0
302 ; Bound: 20
303 ; Schema: 0
304 OpCapability Shader
305 %1 = OpExtInstImport "GLSL.std.450"
306 OpMemoryModel Logical GLSL450
307 +OpEntryPoint Vertex %12 "main2" %13 %14 %15
308 OpEntryPoint Vertex %4 "main1" %8 %10
309 -OpEntryPoint Vertex %12 "main2" %13 %14 %15
310 OpSource ESSL 310
311 OpName %4 "main1"
312 OpName %12 "main2"
313 OpName %8 "v"
314 OpName %10 "a"
315 OpName %13 "v"
316 OpName %14 "a"
317 OpName %15 "b"
318 OpDecorate %8 Location 0
319 OpDecorate %10 Location 0
320 OpDecorate %13 Location 0
321 OpDecorate %14 Location 0
322 OpDecorate %15 Location 1
323 %2 = OpTypeVoid
324 %3 = OpTypeFunction %2
325 %6 = OpTypeFloat 32
326 %7 = OpTypePointer Output %6
327 %9 = OpTypePointer Input %6
328 %8 = OpVariable %7 Output
329 %10 = OpVariable %9 Input
330 %13 = OpVariable %7 Output
331 %14 = OpVariable %9 Input
332 %15 = OpVariable %9 Input
333 %4 = OpFunction %2 None %3
334 %5 = OpLabel
335 %11 = OpLoad %6 %10
336 OpStore %8 %11
337 OpReturn
338 OpFunctionEnd
339 %12 = OpFunction %2 None %3
340 %16 = OpLabel
341 %17 = OpLoad %6 %14
342 %18 = OpLoad %6 %15
343 %19 = OpFAdd %6 %17 %18
344 OpStore %13 %19
345 OpReturn
346 OpFunctionEnd
347 Src -> Dst
348 1 -> 1 [ExtInstImport]
349 2 -> 2 [TypeVoid]
350 3 -> 3 [TypeFunction]
351 4 -> 12 [Function]
352 5 -> 5 [Label]
353 6 -> 6 [TypeFloat]
354 7 -> 7 [TypePointer]
355 8 -> 8 [Variable]
356 9 -> 9 [TypePointer]
357 10 -> 10 [Variable]
358 11 -> 11 [Load]
359 12 -> 4 [Function]
360 13 -> 13 [Variable]
361 14 -> 14 [Variable]
362 15 -> 15 [Variable]
363 16 -> 16 [Label]
364 17 -> 17 [Load]
365 18 -> 18 [Load]
366 19 -> 19 [FAdd]
367 )";
368 Options options;
369 options.dump_id_map = true;
370 DoStringDiffTest(kSrc, kDst, kDiff, options);
371 }
372
373 } // namespace
374 } // namespace diff
375 } // namespace spvtools
376