• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 where src and dst have cases of a switch in different order.
27 constexpr char kSrc[] = R"(               OpCapability Shader
28           %1 = OpExtInstImport "GLSL.std.450"
29                OpMemoryModel Logical GLSL450
30                OpEntryPoint GLCompute %4 "main"
31                OpExecutionMode %4 LocalSize 1 1 1
32                OpSource ESSL 310
33                OpName %4 "main"
34                OpName %7 "BufferIn"
35                OpMemberName %7 0 "i"
36                OpName %9 ""
37                OpName %23 "BufferOut"
38                OpMemberName %23 0 "o"
39                OpName %25 ""
40                OpMemberDecorate %7 0 Offset 0
41                OpDecorate %7 Block
42                OpDecorate %9 DescriptorSet 0
43                OpDecorate %9 Binding 0
44                OpMemberDecorate %23 0 Offset 0
45                OpDecorate %23 BufferBlock
46                OpDecorate %25 DescriptorSet 0
47                OpDecorate %25 Binding 1
48           %2 = OpTypeVoid
49           %3 = OpTypeFunction %2
50           %6 = OpTypeInt 32 0
51           %7 = OpTypeStruct %6
52           %8 = OpTypePointer Uniform %7
53           %9 = OpVariable %8 Uniform
54          %10 = OpTypeInt 32 1
55          %11 = OpConstant %10 0
56          %12 = OpTypePointer Uniform %6
57          %23 = OpTypeStruct %6
58          %24 = OpTypePointer Uniform %23
59          %25 = OpVariable %24 Uniform
60          %28 = OpConstant %10 1
61          %34 = OpConstant %6 2
62          %52 = OpConstant %6 1
63           %4 = OpFunction %2 None %3
64           %5 = OpLabel
65          %13 = OpAccessChain %12 %9 %11
66          %14 = OpLoad %6 %13
67                OpSelectionMerge %22 None
68                OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20
69          %21 = OpLabel
70          %54 = OpAccessChain %12 %25 %11
71          %55 = OpLoad %6 %54
72          %56 = OpIAdd %6 %55 %34
73          %57 = OpAccessChain %12 %25 %11
74                OpStore %57 %56
75                OpBranch %22
76          %15 = OpLabel
77          %26 = OpAccessChain %12 %25 %11
78          %27 = OpLoad %6 %26
79          %29 = OpIAdd %6 %27 %28
80                OpStore %26 %29
81                OpBranch %22
82          %16 = OpLabel
83          %31 = OpAccessChain %12 %25 %11
84          %32 = OpLoad %6 %31
85          %33 = OpISub %6 %32 %28
86                OpStore %31 %33
87                OpBranch %17
88          %17 = OpLabel
89          %35 = OpAccessChain %12 %25 %11
90          %36 = OpLoad %6 %35
91          %37 = OpIMul %6 %36 %34
92          %38 = OpAccessChain %12 %25 %11
93                OpStore %38 %37
94                OpBranch %22
95          %18 = OpLabel
96          %40 = OpAccessChain %12 %25 %11
97          %41 = OpLoad %6 %40
98          %42 = OpUDiv %6 %41 %34
99          %43 = OpAccessChain %12 %25 %11
100                OpStore %43 %42
101                OpBranch %22
102          %19 = OpLabel
103          %45 = OpAccessChain %12 %25 %11
104          %46 = OpLoad %6 %45
105          %47 = OpAccessChain %12 %25 %11
106          %48 = OpLoad %6 %47
107          %49 = OpIMul %6 %46 %48
108          %50 = OpAccessChain %12 %25 %11
109                OpStore %50 %49
110                OpBranch %22
111          %20 = OpLabel
112          %53 = OpAccessChain %12 %25 %11
113                OpStore %53 %52
114                OpBranch %21
115          %22 = OpLabel
116                OpReturn
117                OpFunctionEnd)";
118 constexpr char kDst[] = R"(               OpCapability Shader
119           %1 = OpExtInstImport "GLSL.std.450"
120                OpMemoryModel Logical GLSL450
121                OpEntryPoint GLCompute %4 "main"
122                OpExecutionMode %4 LocalSize 1 1 1
123                OpSource ESSL 310
124                OpName %4 "main"
125                OpName %7 "BufferIn"
126                OpMemberName %7 0 "i"
127                OpName %9 ""
128                OpName %23 "BufferOut"
129                OpMemberName %23 0 "o"
130                OpName %25 ""
131                OpMemberDecorate %7 0 Offset 0
132                OpDecorate %7 Block
133                OpDecorate %9 DescriptorSet 0
134                OpDecorate %9 Binding 0
135                OpMemberDecorate %23 0 Offset 0
136                OpDecorate %23 BufferBlock
137                OpDecorate %25 DescriptorSet 0
138                OpDecorate %25 Binding 1
139           %2 = OpTypeVoid
140           %3 = OpTypeFunction %2
141           %6 = OpTypeInt 32 0
142           %7 = OpTypeStruct %6
143           %8 = OpTypePointer Uniform %7
144           %9 = OpVariable %8 Uniform
145          %10 = OpTypeInt 32 1
146          %11 = OpConstant %10 0
147          %12 = OpTypePointer Uniform %6
148          %23 = OpTypeStruct %6
149          %24 = OpTypePointer Uniform %23
150          %25 = OpVariable %24 Uniform
151          %28 = OpConstant %10 1
152          %34 = OpConstant %6 2
153          %52 = OpConstant %6 1
154           %4 = OpFunction %2 None %3
155           %5 = OpLabel
156          %13 = OpAccessChain %12 %9 %11
157          %14 = OpLoad %6 %13
158                OpSelectionMerge %22 None
159                OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20
160          %17 = OpLabel
161          %35 = OpAccessChain %12 %25 %11
162          %36 = OpLoad %6 %35
163          %37 = OpIMul %6 %36 %34
164          %38 = OpAccessChain %12 %25 %11
165                OpStore %38 %37
166                OpBranch %22
167          %18 = OpLabel
168          %40 = OpAccessChain %12 %25 %11
169          %41 = OpLoad %6 %40
170          %42 = OpUDiv %6 %41 %34
171          %43 = OpAccessChain %12 %25 %11
172                OpStore %43 %42
173                OpBranch %22
174          %21 = OpLabel
175          %54 = OpAccessChain %12 %25 %11
176          %55 = OpLoad %6 %54
177          %56 = OpIAdd %6 %55 %34
178          %57 = OpAccessChain %12 %25 %11
179                OpStore %57 %56
180                OpBranch %22
181          %20 = OpLabel
182          %53 = OpAccessChain %12 %25 %11
183                OpStore %53 %52
184                OpBranch %21
185          %15 = OpLabel
186          %26 = OpAccessChain %12 %25 %11
187          %27 = OpLoad %6 %26
188          %29 = OpIAdd %6 %27 %28
189                OpStore %26 %29
190                OpBranch %22
191          %19 = OpLabel
192          %45 = OpAccessChain %12 %25 %11
193          %46 = OpLoad %6 %45
194          %47 = OpAccessChain %12 %25 %11
195          %48 = OpLoad %6 %47
196          %49 = OpIMul %6 %46 %48
197          %50 = OpAccessChain %12 %25 %11
198                OpStore %50 %49
199                OpBranch %22
200          %16 = OpLabel
201          %31 = OpAccessChain %12 %25 %11
202          %32 = OpLoad %6 %31
203          %33 = OpISub %6 %32 %28
204                OpStore %31 %33
205                OpBranch %17
206          %22 = OpLabel
207                OpReturn
208                OpFunctionEnd
209 )";
210 
TEST(DiffTest,ReorderedSwitchBlocks)211 TEST(DiffTest, ReorderedSwitchBlocks) {
212   constexpr char kDiff[] = R"( ; SPIR-V
213  ; Version: 1.6
214  ; Generator: Khronos SPIR-V Tools Assembler; 0
215 -; Bound: 58
216 +; Bound: 62
217  ; Schema: 0
218  OpCapability Shader
219  %1 = OpExtInstImport "GLSL.std.450"
220  OpMemoryModel Logical GLSL450
221  OpEntryPoint GLCompute %4 "main"
222  OpExecutionMode %4 LocalSize 1 1 1
223  OpSource ESSL 310
224  OpName %4 "main"
225  OpName %7 "BufferIn"
226  OpMemberName %7 0 "i"
227  OpName %9 ""
228  OpName %23 "BufferOut"
229  OpMemberName %23 0 "o"
230  OpName %25 ""
231  OpMemberDecorate %7 0 Offset 0
232  OpDecorate %7 Block
233  OpDecorate %9 DescriptorSet 0
234  OpDecorate %9 Binding 0
235  OpMemberDecorate %23 0 Offset 0
236  OpDecorate %23 BufferBlock
237  OpDecorate %25 DescriptorSet 0
238  OpDecorate %25 Binding 1
239  %2 = OpTypeVoid
240  %3 = OpTypeFunction %2
241  %6 = OpTypeInt 32 0
242  %7 = OpTypeStruct %6
243  %8 = OpTypePointer Uniform %7
244  %9 = OpVariable %8 Uniform
245  %10 = OpTypeInt 32 1
246  %11 = OpConstant %10 0
247  %12 = OpTypePointer Uniform %6
248  %23 = OpTypeStruct %6
249  %24 = OpTypePointer Uniform %23
250  %25 = OpVariable %24 Uniform
251  %28 = OpConstant %10 1
252  %34 = OpConstant %6 2
253  %52 = OpConstant %6 1
254  %4 = OpFunction %2 None %3
255  %5 = OpLabel
256  %13 = OpAccessChain %12 %9 %11
257  %14 = OpLoad %6 %13
258  OpSelectionMerge %22 None
259  OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20
260  %20 = OpLabel
261  %53 = OpAccessChain %12 %25 %11
262  OpStore %53 %52
263  OpBranch %21
264  %19 = OpLabel
265  %45 = OpAccessChain %12 %25 %11
266  %46 = OpLoad %6 %45
267  %47 = OpAccessChain %12 %25 %11
268  %48 = OpLoad %6 %47
269  %49 = OpIMul %6 %46 %48
270  %50 = OpAccessChain %12 %25 %11
271  OpStore %50 %49
272  OpBranch %22
273  %18 = OpLabel
274  %40 = OpAccessChain %12 %25 %11
275  %41 = OpLoad %6 %40
276  %42 = OpUDiv %6 %41 %34
277  %43 = OpAccessChain %12 %25 %11
278  OpStore %43 %42
279  OpBranch %22
280  %16 = OpLabel
281  %31 = OpAccessChain %12 %25 %11
282  %32 = OpLoad %6 %31
283  %33 = OpISub %6 %32 %28
284  OpStore %31 %33
285  OpBranch %17
286  %17 = OpLabel
287  %35 = OpAccessChain %12 %25 %11
288  %36 = OpLoad %6 %35
289  %37 = OpIMul %6 %36 %34
290  %38 = OpAccessChain %12 %25 %11
291  OpStore %38 %37
292  OpBranch %22
293  %15 = OpLabel
294  %26 = OpAccessChain %12 %25 %11
295  %27 = OpLoad %6 %26
296  %29 = OpIAdd %6 %27 %28
297  OpStore %26 %29
298  OpBranch %22
299  %21 = OpLabel
300  %54 = OpAccessChain %12 %25 %11
301  %55 = OpLoad %6 %54
302  %56 = OpIAdd %6 %55 %34
303  %57 = OpAccessChain %12 %25 %11
304  OpStore %57 %56
305  OpBranch %22
306  %22 = OpLabel
307  OpReturn
308  OpFunctionEnd
309 )";
310   Options options;
311   DoStringDiffTest(kSrc, kDst, kDiff, options);
312 }
313 
TEST(DiffTest,ReorderedSwitchBlocksNoDebug)314 TEST(DiffTest, ReorderedSwitchBlocksNoDebug) {
315   constexpr char kSrcNoDebug[] = R"(               OpCapability Shader
316           %1 = OpExtInstImport "GLSL.std.450"
317                OpMemoryModel Logical GLSL450
318                OpEntryPoint GLCompute %4 "main"
319                OpExecutionMode %4 LocalSize 1 1 1
320                OpSource ESSL 310
321                OpMemberDecorate %7 0 Offset 0
322                OpDecorate %7 Block
323                OpDecorate %9 DescriptorSet 0
324                OpDecorate %9 Binding 0
325                OpMemberDecorate %23 0 Offset 0
326                OpDecorate %23 BufferBlock
327                OpDecorate %25 DescriptorSet 0
328                OpDecorate %25 Binding 1
329           %2 = OpTypeVoid
330           %3 = OpTypeFunction %2
331           %6 = OpTypeInt 32 0
332           %7 = OpTypeStruct %6
333           %8 = OpTypePointer Uniform %7
334           %9 = OpVariable %8 Uniform
335          %10 = OpTypeInt 32 1
336          %11 = OpConstant %10 0
337          %12 = OpTypePointer Uniform %6
338          %23 = OpTypeStruct %6
339          %24 = OpTypePointer Uniform %23
340          %25 = OpVariable %24 Uniform
341          %28 = OpConstant %10 1
342          %34 = OpConstant %6 2
343          %52 = OpConstant %6 1
344           %4 = OpFunction %2 None %3
345           %5 = OpLabel
346          %13 = OpAccessChain %12 %9 %11
347          %14 = OpLoad %6 %13
348                OpSelectionMerge %22 None
349                OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20
350          %21 = OpLabel
351          %54 = OpAccessChain %12 %25 %11
352          %55 = OpLoad %6 %54
353          %56 = OpIAdd %6 %55 %34
354          %57 = OpAccessChain %12 %25 %11
355                OpStore %57 %56
356                OpBranch %22
357          %15 = OpLabel
358          %26 = OpAccessChain %12 %25 %11
359          %27 = OpLoad %6 %26
360          %29 = OpIAdd %6 %27 %28
361                OpStore %26 %29
362                OpBranch %22
363          %16 = OpLabel
364          %31 = OpAccessChain %12 %25 %11
365          %32 = OpLoad %6 %31
366          %33 = OpISub %6 %32 %28
367                OpStore %31 %33
368                OpBranch %17
369          %17 = OpLabel
370          %35 = OpAccessChain %12 %25 %11
371          %36 = OpLoad %6 %35
372          %37 = OpIMul %6 %36 %34
373          %38 = OpAccessChain %12 %25 %11
374                OpStore %38 %37
375                OpBranch %22
376          %18 = OpLabel
377          %40 = OpAccessChain %12 %25 %11
378          %41 = OpLoad %6 %40
379          %42 = OpUDiv %6 %41 %34
380          %43 = OpAccessChain %12 %25 %11
381                OpStore %43 %42
382                OpBranch %22
383          %19 = OpLabel
384          %45 = OpAccessChain %12 %25 %11
385          %46 = OpLoad %6 %45
386          %47 = OpAccessChain %12 %25 %11
387          %48 = OpLoad %6 %47
388          %49 = OpIMul %6 %46 %48
389          %50 = OpAccessChain %12 %25 %11
390                OpStore %50 %49
391                OpBranch %22
392          %20 = OpLabel
393          %53 = OpAccessChain %12 %25 %11
394                OpStore %53 %52
395                OpBranch %21
396          %22 = OpLabel
397                OpReturn
398                OpFunctionEnd
399 )";
400   constexpr char kDstNoDebug[] = R"(               OpCapability Shader
401           %1 = OpExtInstImport "GLSL.std.450"
402                OpMemoryModel Logical GLSL450
403                OpEntryPoint GLCompute %4 "main"
404                OpExecutionMode %4 LocalSize 1 1 1
405                OpSource ESSL 310
406                OpMemberDecorate %7 0 Offset 0
407                OpDecorate %7 Block
408                OpDecorate %9 DescriptorSet 0
409                OpDecorate %9 Binding 0
410                OpMemberDecorate %23 0 Offset 0
411                OpDecorate %23 BufferBlock
412                OpDecorate %25 DescriptorSet 0
413                OpDecorate %25 Binding 1
414           %2 = OpTypeVoid
415           %3 = OpTypeFunction %2
416           %6 = OpTypeInt 32 0
417           %7 = OpTypeStruct %6
418           %8 = OpTypePointer Uniform %7
419           %9 = OpVariable %8 Uniform
420          %10 = OpTypeInt 32 1
421          %11 = OpConstant %10 0
422          %12 = OpTypePointer Uniform %6
423          %23 = OpTypeStruct %6
424          %24 = OpTypePointer Uniform %23
425          %25 = OpVariable %24 Uniform
426          %28 = OpConstant %10 1
427          %34 = OpConstant %6 2
428          %52 = OpConstant %6 1
429           %4 = OpFunction %2 None %3
430           %5 = OpLabel
431          %13 = OpAccessChain %12 %9 %11
432          %14 = OpLoad %6 %13
433                OpSelectionMerge %22 None
434                OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20
435          %17 = OpLabel
436          %35 = OpAccessChain %12 %25 %11
437          %36 = OpLoad %6 %35
438          %37 = OpIMul %6 %36 %34
439          %38 = OpAccessChain %12 %25 %11
440                OpStore %38 %37
441                OpBranch %22
442          %18 = OpLabel
443          %40 = OpAccessChain %12 %25 %11
444          %41 = OpLoad %6 %40
445          %42 = OpUDiv %6 %41 %34
446          %43 = OpAccessChain %12 %25 %11
447                OpStore %43 %42
448                OpBranch %22
449          %21 = OpLabel
450          %54 = OpAccessChain %12 %25 %11
451          %55 = OpLoad %6 %54
452          %56 = OpIAdd %6 %55 %34
453          %57 = OpAccessChain %12 %25 %11
454                OpStore %57 %56
455                OpBranch %22
456          %20 = OpLabel
457          %53 = OpAccessChain %12 %25 %11
458                OpStore %53 %52
459                OpBranch %21
460          %15 = OpLabel
461          %26 = OpAccessChain %12 %25 %11
462          %27 = OpLoad %6 %26
463          %29 = OpIAdd %6 %27 %28
464                OpStore %26 %29
465                OpBranch %22
466          %19 = OpLabel
467          %45 = OpAccessChain %12 %25 %11
468          %46 = OpLoad %6 %45
469          %47 = OpAccessChain %12 %25 %11
470          %48 = OpLoad %6 %47
471          %49 = OpIMul %6 %46 %48
472          %50 = OpAccessChain %12 %25 %11
473                OpStore %50 %49
474                OpBranch %22
475          %16 = OpLabel
476          %31 = OpAccessChain %12 %25 %11
477          %32 = OpLoad %6 %31
478          %33 = OpISub %6 %32 %28
479                OpStore %31 %33
480                OpBranch %17
481          %22 = OpLabel
482                OpReturn
483                OpFunctionEnd
484 )";
485   constexpr char kDiff[] = R"( ; SPIR-V
486  ; Version: 1.6
487  ; Generator: Khronos SPIR-V Tools Assembler; 0
488 -; Bound: 58
489 +; Bound: 62
490  ; Schema: 0
491  OpCapability Shader
492  %1 = OpExtInstImport "GLSL.std.450"
493  OpMemoryModel Logical GLSL450
494  OpEntryPoint GLCompute %4 "main"
495  OpExecutionMode %4 LocalSize 1 1 1
496  OpSource ESSL 310
497  OpMemberDecorate %7 0 Offset 0
498  OpDecorate %7 Block
499  OpDecorate %9 DescriptorSet 0
500  OpDecorate %9 Binding 0
501  OpMemberDecorate %23 0 Offset 0
502  OpDecorate %23 BufferBlock
503  OpDecorate %25 DescriptorSet 0
504  OpDecorate %25 Binding 1
505  %2 = OpTypeVoid
506  %3 = OpTypeFunction %2
507  %6 = OpTypeInt 32 0
508  %7 = OpTypeStruct %6
509  %8 = OpTypePointer Uniform %7
510  %9 = OpVariable %8 Uniform
511  %10 = OpTypeInt 32 1
512  %11 = OpConstant %10 0
513  %12 = OpTypePointer Uniform %6
514  %23 = OpTypeStruct %6
515  %24 = OpTypePointer Uniform %23
516  %25 = OpVariable %24 Uniform
517  %28 = OpConstant %10 1
518  %34 = OpConstant %6 2
519  %52 = OpConstant %6 1
520  %4 = OpFunction %2 None %3
521  %5 = OpLabel
522  %13 = OpAccessChain %12 %9 %11
523  %14 = OpLoad %6 %13
524  OpSelectionMerge %22 None
525  OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20
526  %20 = OpLabel
527  %53 = OpAccessChain %12 %25 %11
528  OpStore %53 %52
529  OpBranch %21
530  %19 = OpLabel
531  %45 = OpAccessChain %12 %25 %11
532  %46 = OpLoad %6 %45
533  %47 = OpAccessChain %12 %25 %11
534  %48 = OpLoad %6 %47
535  %49 = OpIMul %6 %46 %48
536  %50 = OpAccessChain %12 %25 %11
537  OpStore %50 %49
538  OpBranch %22
539  %18 = OpLabel
540  %40 = OpAccessChain %12 %25 %11
541  %41 = OpLoad %6 %40
542  %42 = OpUDiv %6 %41 %34
543  %43 = OpAccessChain %12 %25 %11
544  OpStore %43 %42
545  OpBranch %22
546  %16 = OpLabel
547  %31 = OpAccessChain %12 %25 %11
548  %32 = OpLoad %6 %31
549  %33 = OpISub %6 %32 %28
550  OpStore %31 %33
551  OpBranch %17
552  %17 = OpLabel
553  %35 = OpAccessChain %12 %25 %11
554  %36 = OpLoad %6 %35
555  %37 = OpIMul %6 %36 %34
556  %38 = OpAccessChain %12 %25 %11
557  OpStore %38 %37
558  OpBranch %22
559  %15 = OpLabel
560  %26 = OpAccessChain %12 %25 %11
561  %27 = OpLoad %6 %26
562  %29 = OpIAdd %6 %27 %28
563  OpStore %26 %29
564  OpBranch %22
565  %21 = OpLabel
566  %54 = OpAccessChain %12 %25 %11
567  %55 = OpLoad %6 %54
568  %56 = OpIAdd %6 %55 %34
569  %57 = OpAccessChain %12 %25 %11
570  OpStore %57 %56
571  OpBranch %22
572  %22 = OpLabel
573  OpReturn
574  OpFunctionEnd
575 )";
576   Options options;
577   DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
578 }
579 
580 }  // namespace
581 }  // namespace diff
582 }  // namespace spvtools
583