• 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  ; Schema: 0
217  OpCapability Shader
218  %1 = OpExtInstImport "GLSL.std.450"
219  OpMemoryModel Logical GLSL450
220  OpEntryPoint GLCompute %4 "main"
221  OpExecutionMode %4 LocalSize 1 1 1
222  OpSource ESSL 310
223  OpName %4 "main"
224  OpName %7 "BufferIn"
225  OpMemberName %7 0 "i"
226  OpName %9 ""
227  OpName %23 "BufferOut"
228  OpMemberName %23 0 "o"
229  OpName %25 ""
230  OpMemberDecorate %7 0 Offset 0
231  OpDecorate %7 Block
232  OpDecorate %9 DescriptorSet 0
233  OpDecorate %9 Binding 0
234  OpMemberDecorate %23 0 Offset 0
235  OpDecorate %23 BufferBlock
236  OpDecorate %25 DescriptorSet 0
237  OpDecorate %25 Binding 1
238  %2 = OpTypeVoid
239  %3 = OpTypeFunction %2
240  %6 = OpTypeInt 32 0
241  %7 = OpTypeStruct %6
242  %8 = OpTypePointer Uniform %7
243  %9 = OpVariable %8 Uniform
244  %10 = OpTypeInt 32 1
245  %11 = OpConstant %10 0
246  %12 = OpTypePointer Uniform %6
247  %23 = OpTypeStruct %6
248  %24 = OpTypePointer Uniform %23
249  %25 = OpVariable %24 Uniform
250  %28 = OpConstant %10 1
251  %34 = OpConstant %6 2
252  %52 = OpConstant %6 1
253  %4 = OpFunction %2 None %3
254  %5 = OpLabel
255  %13 = OpAccessChain %12 %9 %11
256  %14 = OpLoad %6 %13
257  OpSelectionMerge %22 None
258  OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20
259  %20 = OpLabel
260  %53 = OpAccessChain %12 %25 %11
261  OpStore %53 %52
262  OpBranch %21
263  %19 = OpLabel
264  %45 = OpAccessChain %12 %25 %11
265  %46 = OpLoad %6 %45
266  %47 = OpAccessChain %12 %25 %11
267  %48 = OpLoad %6 %47
268  %49 = OpIMul %6 %46 %48
269  %50 = OpAccessChain %12 %25 %11
270  OpStore %50 %49
271  OpBranch %22
272  %18 = OpLabel
273  %40 = OpAccessChain %12 %25 %11
274  %41 = OpLoad %6 %40
275  %42 = OpUDiv %6 %41 %34
276  %43 = OpAccessChain %12 %25 %11
277  OpStore %43 %42
278  OpBranch %22
279  %16 = OpLabel
280  %31 = OpAccessChain %12 %25 %11
281  %32 = OpLoad %6 %31
282  %33 = OpISub %6 %32 %28
283  OpStore %31 %33
284  OpBranch %17
285  %17 = OpLabel
286  %35 = OpAccessChain %12 %25 %11
287  %36 = OpLoad %6 %35
288  %37 = OpIMul %6 %36 %34
289  %38 = OpAccessChain %12 %25 %11
290  OpStore %38 %37
291  OpBranch %22
292  %15 = OpLabel
293  %26 = OpAccessChain %12 %25 %11
294  %27 = OpLoad %6 %26
295  %29 = OpIAdd %6 %27 %28
296  OpStore %26 %29
297  OpBranch %22
298  %21 = OpLabel
299  %54 = OpAccessChain %12 %25 %11
300  %55 = OpLoad %6 %54
301  %56 = OpIAdd %6 %55 %34
302  %57 = OpAccessChain %12 %25 %11
303  OpStore %57 %56
304  OpBranch %22
305  %22 = OpLabel
306  OpReturn
307  OpFunctionEnd
308 )";
309   Options options;
310   DoStringDiffTest(kSrc, kDst, kDiff, options);
311 }
312 
TEST(DiffTest,ReorderedSwitchBlocksNoDebug)313 TEST(DiffTest, ReorderedSwitchBlocksNoDebug) {
314   constexpr char kSrcNoDebug[] = R"(               OpCapability Shader
315           %1 = OpExtInstImport "GLSL.std.450"
316                OpMemoryModel Logical GLSL450
317                OpEntryPoint GLCompute %4 "main"
318                OpExecutionMode %4 LocalSize 1 1 1
319                OpSource ESSL 310
320                OpMemberDecorate %7 0 Offset 0
321                OpDecorate %7 Block
322                OpDecorate %9 DescriptorSet 0
323                OpDecorate %9 Binding 0
324                OpMemberDecorate %23 0 Offset 0
325                OpDecorate %23 BufferBlock
326                OpDecorate %25 DescriptorSet 0
327                OpDecorate %25 Binding 1
328           %2 = OpTypeVoid
329           %3 = OpTypeFunction %2
330           %6 = OpTypeInt 32 0
331           %7 = OpTypeStruct %6
332           %8 = OpTypePointer Uniform %7
333           %9 = OpVariable %8 Uniform
334          %10 = OpTypeInt 32 1
335          %11 = OpConstant %10 0
336          %12 = OpTypePointer Uniform %6
337          %23 = OpTypeStruct %6
338          %24 = OpTypePointer Uniform %23
339          %25 = OpVariable %24 Uniform
340          %28 = OpConstant %10 1
341          %34 = OpConstant %6 2
342          %52 = OpConstant %6 1
343           %4 = OpFunction %2 None %3
344           %5 = OpLabel
345          %13 = OpAccessChain %12 %9 %11
346          %14 = OpLoad %6 %13
347                OpSelectionMerge %22 None
348                OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20
349          %21 = OpLabel
350          %54 = OpAccessChain %12 %25 %11
351          %55 = OpLoad %6 %54
352          %56 = OpIAdd %6 %55 %34
353          %57 = OpAccessChain %12 %25 %11
354                OpStore %57 %56
355                OpBranch %22
356          %15 = OpLabel
357          %26 = OpAccessChain %12 %25 %11
358          %27 = OpLoad %6 %26
359          %29 = OpIAdd %6 %27 %28
360                OpStore %26 %29
361                OpBranch %22
362          %16 = OpLabel
363          %31 = OpAccessChain %12 %25 %11
364          %32 = OpLoad %6 %31
365          %33 = OpISub %6 %32 %28
366                OpStore %31 %33
367                OpBranch %17
368          %17 = OpLabel
369          %35 = OpAccessChain %12 %25 %11
370          %36 = OpLoad %6 %35
371          %37 = OpIMul %6 %36 %34
372          %38 = OpAccessChain %12 %25 %11
373                OpStore %38 %37
374                OpBranch %22
375          %18 = OpLabel
376          %40 = OpAccessChain %12 %25 %11
377          %41 = OpLoad %6 %40
378          %42 = OpUDiv %6 %41 %34
379          %43 = OpAccessChain %12 %25 %11
380                OpStore %43 %42
381                OpBranch %22
382          %19 = OpLabel
383          %45 = OpAccessChain %12 %25 %11
384          %46 = OpLoad %6 %45
385          %47 = OpAccessChain %12 %25 %11
386          %48 = OpLoad %6 %47
387          %49 = OpIMul %6 %46 %48
388          %50 = OpAccessChain %12 %25 %11
389                OpStore %50 %49
390                OpBranch %22
391          %20 = OpLabel
392          %53 = OpAccessChain %12 %25 %11
393                OpStore %53 %52
394                OpBranch %21
395          %22 = OpLabel
396                OpReturn
397                OpFunctionEnd
398 )";
399   constexpr char kDstNoDebug[] = R"(               OpCapability Shader
400           %1 = OpExtInstImport "GLSL.std.450"
401                OpMemoryModel Logical GLSL450
402                OpEntryPoint GLCompute %4 "main"
403                OpExecutionMode %4 LocalSize 1 1 1
404                OpSource ESSL 310
405                OpMemberDecorate %7 0 Offset 0
406                OpDecorate %7 Block
407                OpDecorate %9 DescriptorSet 0
408                OpDecorate %9 Binding 0
409                OpMemberDecorate %23 0 Offset 0
410                OpDecorate %23 BufferBlock
411                OpDecorate %25 DescriptorSet 0
412                OpDecorate %25 Binding 1
413           %2 = OpTypeVoid
414           %3 = OpTypeFunction %2
415           %6 = OpTypeInt 32 0
416           %7 = OpTypeStruct %6
417           %8 = OpTypePointer Uniform %7
418           %9 = OpVariable %8 Uniform
419          %10 = OpTypeInt 32 1
420          %11 = OpConstant %10 0
421          %12 = OpTypePointer Uniform %6
422          %23 = OpTypeStruct %6
423          %24 = OpTypePointer Uniform %23
424          %25 = OpVariable %24 Uniform
425          %28 = OpConstant %10 1
426          %34 = OpConstant %6 2
427          %52 = OpConstant %6 1
428           %4 = OpFunction %2 None %3
429           %5 = OpLabel
430          %13 = OpAccessChain %12 %9 %11
431          %14 = OpLoad %6 %13
432                OpSelectionMerge %22 None
433                OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20
434          %17 = OpLabel
435          %35 = OpAccessChain %12 %25 %11
436          %36 = OpLoad %6 %35
437          %37 = OpIMul %6 %36 %34
438          %38 = OpAccessChain %12 %25 %11
439                OpStore %38 %37
440                OpBranch %22
441          %18 = OpLabel
442          %40 = OpAccessChain %12 %25 %11
443          %41 = OpLoad %6 %40
444          %42 = OpUDiv %6 %41 %34
445          %43 = OpAccessChain %12 %25 %11
446                OpStore %43 %42
447                OpBranch %22
448          %21 = OpLabel
449          %54 = OpAccessChain %12 %25 %11
450          %55 = OpLoad %6 %54
451          %56 = OpIAdd %6 %55 %34
452          %57 = OpAccessChain %12 %25 %11
453                OpStore %57 %56
454                OpBranch %22
455          %20 = OpLabel
456          %53 = OpAccessChain %12 %25 %11
457                OpStore %53 %52
458                OpBranch %21
459          %15 = OpLabel
460          %26 = OpAccessChain %12 %25 %11
461          %27 = OpLoad %6 %26
462          %29 = OpIAdd %6 %27 %28
463                OpStore %26 %29
464                OpBranch %22
465          %19 = OpLabel
466          %45 = OpAccessChain %12 %25 %11
467          %46 = OpLoad %6 %45
468          %47 = OpAccessChain %12 %25 %11
469          %48 = OpLoad %6 %47
470          %49 = OpIMul %6 %46 %48
471          %50 = OpAccessChain %12 %25 %11
472                OpStore %50 %49
473                OpBranch %22
474          %16 = OpLabel
475          %31 = OpAccessChain %12 %25 %11
476          %32 = OpLoad %6 %31
477          %33 = OpISub %6 %32 %28
478                OpStore %31 %33
479                OpBranch %17
480          %22 = OpLabel
481                OpReturn
482                OpFunctionEnd
483 )";
484   constexpr char kDiff[] = R"( ; SPIR-V
485  ; Version: 1.6
486  ; Generator: Khronos SPIR-V Tools Assembler; 0
487  ; Bound: 58
488  ; Schema: 0
489  OpCapability Shader
490  %1 = OpExtInstImport "GLSL.std.450"
491  OpMemoryModel Logical GLSL450
492  OpEntryPoint GLCompute %4 "main"
493  OpExecutionMode %4 LocalSize 1 1 1
494  OpSource ESSL 310
495  OpMemberDecorate %7 0 Offset 0
496  OpDecorate %7 Block
497  OpDecorate %9 DescriptorSet 0
498  OpDecorate %9 Binding 0
499  OpMemberDecorate %23 0 Offset 0
500  OpDecorate %23 BufferBlock
501  OpDecorate %25 DescriptorSet 0
502  OpDecorate %25 Binding 1
503  %2 = OpTypeVoid
504  %3 = OpTypeFunction %2
505  %6 = OpTypeInt 32 0
506  %7 = OpTypeStruct %6
507  %8 = OpTypePointer Uniform %7
508  %9 = OpVariable %8 Uniform
509  %10 = OpTypeInt 32 1
510  %11 = OpConstant %10 0
511  %12 = OpTypePointer Uniform %6
512  %23 = OpTypeStruct %6
513  %24 = OpTypePointer Uniform %23
514  %25 = OpVariable %24 Uniform
515  %28 = OpConstant %10 1
516  %34 = OpConstant %6 2
517  %52 = OpConstant %6 1
518  %4 = OpFunction %2 None %3
519  %5 = OpLabel
520  %13 = OpAccessChain %12 %9 %11
521  %14 = OpLoad %6 %13
522  OpSelectionMerge %22 None
523  OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20
524  %20 = OpLabel
525  %53 = OpAccessChain %12 %25 %11
526  OpStore %53 %52
527  OpBranch %21
528  %19 = OpLabel
529  %45 = OpAccessChain %12 %25 %11
530  %46 = OpLoad %6 %45
531  %47 = OpAccessChain %12 %25 %11
532  %48 = OpLoad %6 %47
533  %49 = OpIMul %6 %46 %48
534  %50 = OpAccessChain %12 %25 %11
535  OpStore %50 %49
536  OpBranch %22
537  %18 = OpLabel
538  %40 = OpAccessChain %12 %25 %11
539  %41 = OpLoad %6 %40
540  %42 = OpUDiv %6 %41 %34
541  %43 = OpAccessChain %12 %25 %11
542  OpStore %43 %42
543  OpBranch %22
544  %16 = OpLabel
545  %31 = OpAccessChain %12 %25 %11
546  %32 = OpLoad %6 %31
547  %33 = OpISub %6 %32 %28
548  OpStore %31 %33
549  OpBranch %17
550  %17 = OpLabel
551  %35 = OpAccessChain %12 %25 %11
552  %36 = OpLoad %6 %35
553  %37 = OpIMul %6 %36 %34
554  %38 = OpAccessChain %12 %25 %11
555  OpStore %38 %37
556  OpBranch %22
557  %15 = OpLabel
558  %26 = OpAccessChain %12 %25 %11
559  %27 = OpLoad %6 %26
560  %29 = OpIAdd %6 %27 %28
561  OpStore %26 %29
562  OpBranch %22
563  %21 = OpLabel
564  %54 = OpAccessChain %12 %25 %11
565  %55 = OpLoad %6 %54
566  %56 = OpIAdd %6 %55 %34
567  %57 = OpAccessChain %12 %25 %11
568  OpStore %57 %56
569  OpBranch %22
570  %22 = OpLabel
571  OpReturn
572  OpFunctionEnd
573 )";
574   Options options;
575   DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
576 }
577 
578 }  // namespace
579 }  // namespace diff
580 }  // namespace spvtools
581