• 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 signedness of indices are different between src and dst.
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 %13 "BufferOut"
35                OpMemberName %13 0 "o1"
36                OpMemberName %13 1 "o2"
37                OpMemberName %13 2 "o3"
38                OpName %15 ""
39                OpName %22 "BufferIn"
40                OpMemberName %22 0 "i1"
41                OpMemberName %22 1 "i2"
42                OpName %24 ""
43                OpDecorate %8 ArrayStride 4
44                OpDecorate %9 ArrayStride 4
45                OpDecorate %11 ArrayStride 4
46                OpDecorate %12 ArrayStride 8
47                OpMemberDecorate %13 0 Offset 0
48                OpMemberDecorate %13 1 Offset 12
49                OpMemberDecorate %13 2 Offset 24
50                OpDecorate %13 BufferBlock
51                OpDecorate %15 DescriptorSet 0
52                OpDecorate %15 Binding 1
53                OpDecorate %18 ArrayStride 16
54                OpDecorate %19 ArrayStride 48
55                OpDecorate %21 ArrayStride 16
56                OpMemberDecorate %22 0 Offset 0
57                OpMemberDecorate %22 1 Offset 96
58                OpDecorate %22 Block
59                OpDecorate %24 DescriptorSet 0
60                OpDecorate %24 Binding 0
61           %2 = OpTypeVoid
62           %3 = OpTypeFunction %2
63           %6 = OpTypeInt 32 0
64           %7 = OpConstant %6 3
65           %8 = OpTypeArray %6 %7
66           %9 = OpTypeArray %6 %7
67          %10 = OpConstant %6 2
68          %11 = OpTypeArray %6 %10
69          %12 = OpTypeArray %11 %10
70          %13 = OpTypeStruct %8 %9 %12
71          %14 = OpTypePointer Uniform %13
72          %15 = OpVariable %14 Uniform
73          %16 = OpTypeInt 32 1
74          %17 = OpConstant %16 0
75          %18 = OpTypeArray %6 %7
76          %19 = OpTypeArray %18 %10
77          %20 = OpConstant %6 4
78          %21 = OpTypeArray %6 %20
79          %22 = OpTypeStruct %19 %21
80          %23 = OpTypePointer Uniform %22
81          %24 = OpVariable %23 Uniform
82          %25 = OpTypePointer Uniform %6
83          %28 = OpConstant %6 1
84          %31 = OpConstant %16 1
85          %34 = OpConstant %6 0
86          %37 = OpConstant %16 2
87          %61 = OpConstant %16 3
88           %4 = OpFunction %2 None %3
89           %5 = OpLabel
90          %26 = OpAccessChain %25 %24 %17 %17 %17
91          %27 = OpLoad %6 %26
92          %29 = OpIAdd %6 %27 %28
93          %30 = OpAccessChain %25 %15 %17 %17
94                OpStore %30 %29
95          %32 = OpAccessChain %25 %24 %17 %31 %17
96          %33 = OpLoad %6 %32
97          %35 = OpIAdd %6 %33 %34
98          %36 = OpAccessChain %25 %15 %17 %31
99                OpStore %36 %35
100          %38 = OpAccessChain %25 %24 %17 %31 %31
101          %39 = OpLoad %6 %38
102          %40 = OpIAdd %6 %39 %10
103          %41 = OpAccessChain %25 %15 %17 %37
104                OpStore %41 %40
105          %42 = OpAccessChain %25 %24 %17 %17 %37
106          %43 = OpLoad %6 %42
107          %44 = OpAccessChain %25 %15 %31 %17
108                OpStore %44 %43
109          %45 = OpAccessChain %25 %24 %17 %17 %31
110          %46 = OpLoad %6 %45
111          %47 = OpIMul %6 %46 %7
112          %48 = OpAccessChain %25 %15 %31 %31
113                OpStore %48 %47
114          %49 = OpAccessChain %25 %24 %17 %31 %37
115          %50 = OpLoad %6 %49
116          %51 = OpAccessChain %25 %15 %31 %37
117                OpStore %51 %50
118          %52 = OpAccessChain %25 %24 %31 %17
119          %53 = OpLoad %6 %52
120          %54 = OpAccessChain %25 %15 %37 %17 %17
121                OpStore %54 %53
122          %55 = OpAccessChain %25 %24 %31 %31
123          %56 = OpLoad %6 %55
124          %57 = OpAccessChain %25 %15 %37 %17 %31
125                OpStore %57 %56
126          %58 = OpAccessChain %25 %24 %31 %37
127          %59 = OpLoad %6 %58
128          %60 = OpAccessChain %25 %15 %37 %31 %17
129                OpStore %60 %59
130          %62 = OpAccessChain %25 %24 %31 %61
131          %63 = OpLoad %6 %62
132          %64 = OpAccessChain %25 %15 %37 %31 %31
133                OpStore %64 %63
134                OpReturn
135                OpFunctionEnd
136 )";
137 constexpr char kDst[] = R"(               OpCapability Shader
138           %1 = OpExtInstImport "GLSL.std.450"
139                OpMemoryModel Logical GLSL450
140                OpEntryPoint GLCompute %4 "main"
141                OpExecutionMode %4 LocalSize 1 1 1
142                OpSource ESSL 310
143                OpName %4 "main"
144                OpName %13 "BufferOut"
145                OpMemberName %13 0 "o1"
146                OpMemberName %13 1 "o2"
147                OpMemberName %13 2 "o3"
148                OpName %15 ""
149                OpName %22 "BufferIn"
150                OpMemberName %22 0 "i1"
151                OpMemberName %22 1 "i2"
152                OpName %24 ""
153                OpDecorate %8 ArrayStride 4
154                OpDecorate %9 ArrayStride 4
155                OpDecorate %11 ArrayStride 4
156                OpDecorate %12 ArrayStride 8
157                OpMemberDecorate %13 0 Offset 0
158                OpMemberDecorate %13 1 Offset 12
159                OpMemberDecorate %13 2 Offset 24
160                OpDecorate %13 BufferBlock
161                OpDecorate %15 DescriptorSet 0
162                OpDecorate %15 Binding 1
163                OpDecorate %18 ArrayStride 16
164                OpDecorate %19 ArrayStride 48
165                OpDecorate %21 ArrayStride 16
166                OpMemberDecorate %22 0 Offset 0
167                OpMemberDecorate %22 1 Offset 96
168                OpDecorate %22 Block
169                OpDecorate %24 DescriptorSet 0
170                OpDecorate %24 Binding 0
171           %2 = OpTypeVoid
172           %3 = OpTypeFunction %2
173           %6 = OpTypeInt 32 0
174          %16 = OpTypeInt 32 1
175           %7 = OpConstant %16 3
176           %8 = OpTypeArray %6 %7
177           %9 = OpTypeArray %6 %7
178          %10 = OpConstant %16 2
179          %11 = OpTypeArray %6 %10
180          %12 = OpTypeArray %11 %10
181          %13 = OpTypeStruct %8 %9 %12
182          %14 = OpTypePointer Uniform %13
183          %15 = OpVariable %14 Uniform
184          %18 = OpTypeArray %6 %7
185          %19 = OpTypeArray %18 %10
186          %20 = OpConstant %16 4
187          %21 = OpTypeArray %6 %20
188          %22 = OpTypeStruct %19 %21
189          %23 = OpTypePointer Uniform %22
190          %24 = OpVariable %23 Uniform
191          %25 = OpTypePointer Uniform %6
192          %17 = OpConstant %16 0
193          %28 = OpConstant %16 1
194          %31 = OpConstant %6 1
195          %34 = OpConstant %6 0
196          %37 = OpConstant %6 2
197          %61 = OpConstant %6 3
198           %4 = OpFunction %2 None %3
199           %5 = OpLabel
200          %26 = OpAccessChain %25 %24 %17 %17 %17
201          %27 = OpLoad %6 %26
202          %29 = OpIAdd %6 %27 %28
203          %30 = OpAccessChain %25 %15 %17 %17
204                OpStore %30 %29
205          %32 = OpAccessChain %25 %24 %17 %31 %17
206          %33 = OpLoad %6 %32
207          %35 = OpIAdd %6 %33 %34
208          %36 = OpAccessChain %25 %15 %17 %31
209                OpStore %36 %35
210          %38 = OpAccessChain %25 %24 %17 %31 %31
211          %39 = OpLoad %6 %38
212          %40 = OpIAdd %6 %39 %37
213          %41 = OpAccessChain %25 %15 %17 %10
214                OpStore %41 %40
215          %42 = OpAccessChain %25 %24 %17 %17 %10
216          %43 = OpLoad %6 %42
217          %44 = OpAccessChain %25 %15 %31 %17
218                OpStore %44 %43
219          %45 = OpAccessChain %25 %24 %17 %17 %31
220          %46 = OpLoad %6 %45
221          %47 = OpIMul %6 %46 %7
222          %48 = OpAccessChain %25 %15 %31 %31
223                OpStore %48 %47
224          %49 = OpAccessChain %25 %24 %17 %31 %10
225          %50 = OpLoad %6 %49
226          %51 = OpAccessChain %25 %15 %31 %10
227                OpStore %51 %50
228          %52 = OpAccessChain %25 %24 %31 %17
229          %53 = OpLoad %6 %52
230          %54 = OpAccessChain %25 %15 %37 %17 %17
231                OpStore %54 %53
232          %55 = OpAccessChain %25 %24 %31 %31
233          %56 = OpLoad %6 %55
234          %57 = OpAccessChain %25 %15 %37 %17 %31
235                OpStore %57 %56
236          %58 = OpAccessChain %25 %24 %31 %37
237          %59 = OpLoad %6 %58
238          %60 = OpAccessChain %25 %15 %37 %31 %17
239                OpStore %60 %59
240          %62 = OpAccessChain %25 %24 %31 %61
241          %63 = OpLoad %6 %62
242          %64 = OpAccessChain %25 %15 %37 %31 %31
243                OpStore %64 %63
244                OpReturn
245                OpFunctionEnd
246 
247 )";
248 
TEST(DiffTest,IndexSignedness)249 TEST(DiffTest, IndexSignedness) {
250   constexpr char kDiff[] = R"( ; SPIR-V
251  ; Version: 1.6
252  ; Generator: Khronos SPIR-V Tools Assembler; 0
253  ; Bound: 65
254  ; Schema: 0
255  OpCapability Shader
256  %1 = OpExtInstImport "GLSL.std.450"
257  OpMemoryModel Logical GLSL450
258  OpEntryPoint GLCompute %4 "main"
259  OpExecutionMode %4 LocalSize 1 1 1
260  OpSource ESSL 310
261  OpName %4 "main"
262  OpName %13 "BufferOut"
263  OpMemberName %13 0 "o1"
264  OpMemberName %13 1 "o2"
265  OpMemberName %13 2 "o3"
266  OpName %15 ""
267  OpName %22 "BufferIn"
268  OpMemberName %22 0 "i1"
269  OpMemberName %22 1 "i2"
270  OpName %24 ""
271  OpDecorate %8 ArrayStride 4
272  OpDecorate %9 ArrayStride 4
273  OpDecorate %11 ArrayStride 4
274  OpDecorate %12 ArrayStride 8
275  OpMemberDecorate %13 0 Offset 0
276  OpMemberDecorate %13 1 Offset 12
277  OpMemberDecorate %13 2 Offset 24
278  OpDecorate %13 BufferBlock
279  OpDecorate %15 DescriptorSet 0
280  OpDecorate %15 Binding 1
281  OpDecorate %18 ArrayStride 16
282  OpDecorate %19 ArrayStride 48
283  OpDecorate %21 ArrayStride 16
284  OpMemberDecorate %22 0 Offset 0
285  OpMemberDecorate %22 1 Offset 96
286  OpDecorate %22 Block
287  OpDecorate %24 DescriptorSet 0
288  OpDecorate %24 Binding 0
289  %2 = OpTypeVoid
290  %3 = OpTypeFunction %2
291  %6 = OpTypeInt 32 0
292  %7 = OpConstant %6 3
293 -%8 = OpTypeArray %6 %7
294 +%8 = OpTypeArray %6 %61
295 -%9 = OpTypeArray %6 %7
296 +%9 = OpTypeArray %6 %61
297  %10 = OpConstant %6 2
298 -%11 = OpTypeArray %6 %10
299 +%11 = OpTypeArray %6 %37
300 -%12 = OpTypeArray %11 %10
301 +%12 = OpTypeArray %11 %37
302  %13 = OpTypeStruct %8 %9 %12
303  %14 = OpTypePointer Uniform %13
304  %15 = OpVariable %14 Uniform
305  %16 = OpTypeInt 32 1
306  %17 = OpConstant %16 0
307 -%18 = OpTypeArray %6 %7
308 +%18 = OpTypeArray %6 %61
309 -%19 = OpTypeArray %18 %10
310 +%19 = OpTypeArray %18 %37
311 -%20 = OpConstant %6 4
312 +%20 = OpConstant %16 4
313  %21 = OpTypeArray %6 %20
314  %22 = OpTypeStruct %19 %21
315  %23 = OpTypePointer Uniform %22
316  %24 = OpVariable %23 Uniform
317  %25 = OpTypePointer Uniform %6
318  %28 = OpConstant %6 1
319  %31 = OpConstant %16 1
320  %34 = OpConstant %6 0
321  %37 = OpConstant %16 2
322  %61 = OpConstant %16 3
323  %4 = OpFunction %2 None %3
324  %5 = OpLabel
325  %26 = OpAccessChain %25 %24 %17 %17 %17
326  %27 = OpLoad %6 %26
327 -%29 = OpIAdd %6 %27 %28
328 +%29 = OpIAdd %6 %27 %31
329  %30 = OpAccessChain %25 %15 %17 %17
330  OpStore %30 %29
331 -%32 = OpAccessChain %25 %24 %17 %31 %17
332 +%32 = OpAccessChain %25 %24 %17 %28 %17
333  %33 = OpLoad %6 %32
334  %35 = OpIAdd %6 %33 %34
335 -%36 = OpAccessChain %25 %15 %17 %31
336 +%36 = OpAccessChain %25 %15 %17 %28
337  OpStore %36 %35
338 -%38 = OpAccessChain %25 %24 %17 %31 %31
339 +%38 = OpAccessChain %25 %24 %17 %28 %28
340  %39 = OpLoad %6 %38
341  %40 = OpIAdd %6 %39 %10
342  %41 = OpAccessChain %25 %15 %17 %37
343  OpStore %41 %40
344  %42 = OpAccessChain %25 %24 %17 %17 %37
345  %43 = OpLoad %6 %42
346 -%44 = OpAccessChain %25 %15 %31 %17
347 +%44 = OpAccessChain %25 %15 %28 %17
348  OpStore %44 %43
349 -%45 = OpAccessChain %25 %24 %17 %17 %31
350 +%45 = OpAccessChain %25 %24 %17 %17 %28
351  %46 = OpLoad %6 %45
352 -%47 = OpIMul %6 %46 %7
353 +%47 = OpIMul %6 %46 %61
354 -%48 = OpAccessChain %25 %15 %31 %31
355 +%48 = OpAccessChain %25 %15 %28 %28
356  OpStore %48 %47
357 -%49 = OpAccessChain %25 %24 %17 %31 %37
358 +%49 = OpAccessChain %25 %24 %17 %28 %37
359  %50 = OpLoad %6 %49
360 -%51 = OpAccessChain %25 %15 %31 %37
361 +%51 = OpAccessChain %25 %15 %28 %37
362  OpStore %51 %50
363 -%52 = OpAccessChain %25 %24 %31 %17
364 +%52 = OpAccessChain %25 %24 %28 %17
365  %53 = OpLoad %6 %52
366 -%54 = OpAccessChain %25 %15 %37 %17 %17
367 +%54 = OpAccessChain %25 %15 %10 %17 %17
368  OpStore %54 %53
369 -%55 = OpAccessChain %25 %24 %31 %31
370 +%55 = OpAccessChain %25 %24 %28 %28
371  %56 = OpLoad %6 %55
372 -%57 = OpAccessChain %25 %15 %37 %17 %31
373 +%57 = OpAccessChain %25 %15 %10 %17 %28
374  OpStore %57 %56
375 -%58 = OpAccessChain %25 %24 %31 %37
376 +%58 = OpAccessChain %25 %24 %28 %10
377  %59 = OpLoad %6 %58
378 -%60 = OpAccessChain %25 %15 %37 %31 %17
379 +%60 = OpAccessChain %25 %15 %10 %28 %17
380  OpStore %60 %59
381 -%62 = OpAccessChain %25 %24 %31 %61
382 +%62 = OpAccessChain %25 %24 %28 %7
383  %63 = OpLoad %6 %62
384 -%64 = OpAccessChain %25 %15 %37 %31 %31
385 +%64 = OpAccessChain %25 %15 %10 %28 %28
386  OpStore %64 %63
387  OpReturn
388  OpFunctionEnd
389 )";
390   Options options;
391   DoStringDiffTest(kSrc, kDst, kDiff, options);
392 }
393 
TEST(DiffTest,IndexSignednessNoDebug)394 TEST(DiffTest, IndexSignednessNoDebug) {
395   constexpr char kSrcNoDebug[] = R"(               OpCapability Shader
396           %1 = OpExtInstImport "GLSL.std.450"
397                OpMemoryModel Logical GLSL450
398                OpEntryPoint GLCompute %4 "main"
399                OpExecutionMode %4 LocalSize 1 1 1
400                OpSource ESSL 310
401                OpDecorate %8 ArrayStride 4
402                OpDecorate %9 ArrayStride 4
403                OpDecorate %11 ArrayStride 4
404                OpDecorate %12 ArrayStride 8
405                OpMemberDecorate %13 0 Offset 0
406                OpMemberDecorate %13 1 Offset 12
407                OpMemberDecorate %13 2 Offset 24
408                OpDecorate %13 BufferBlock
409                OpDecorate %15 DescriptorSet 0
410                OpDecorate %15 Binding 1
411                OpDecorate %18 ArrayStride 16
412                OpDecorate %19 ArrayStride 48
413                OpDecorate %21 ArrayStride 16
414                OpMemberDecorate %22 0 Offset 0
415                OpMemberDecorate %22 1 Offset 96
416                OpDecorate %22 Block
417                OpDecorate %24 DescriptorSet 0
418                OpDecorate %24 Binding 0
419           %2 = OpTypeVoid
420           %3 = OpTypeFunction %2
421           %6 = OpTypeInt 32 0
422           %7 = OpConstant %6 3
423           %8 = OpTypeArray %6 %7
424           %9 = OpTypeArray %6 %7
425          %10 = OpConstant %6 2
426          %11 = OpTypeArray %6 %10
427          %12 = OpTypeArray %11 %10
428          %13 = OpTypeStruct %8 %9 %12
429          %14 = OpTypePointer Uniform %13
430          %15 = OpVariable %14 Uniform
431          %16 = OpTypeInt 32 1
432          %17 = OpConstant %16 0
433          %18 = OpTypeArray %6 %7
434          %19 = OpTypeArray %18 %10
435          %20 = OpConstant %6 4
436          %21 = OpTypeArray %6 %20
437          %22 = OpTypeStruct %19 %21
438          %23 = OpTypePointer Uniform %22
439          %24 = OpVariable %23 Uniform
440          %25 = OpTypePointer Uniform %6
441          %28 = OpConstant %6 1
442          %31 = OpConstant %16 1
443          %34 = OpConstant %6 0
444          %37 = OpConstant %16 2
445          %61 = OpConstant %16 3
446           %4 = OpFunction %2 None %3
447           %5 = OpLabel
448          %26 = OpAccessChain %25 %24 %17 %17 %17
449          %27 = OpLoad %6 %26
450          %29 = OpIAdd %6 %27 %28
451          %30 = OpAccessChain %25 %15 %17 %17
452                OpStore %30 %29
453          %32 = OpAccessChain %25 %24 %17 %31 %17
454          %33 = OpLoad %6 %32
455          %35 = OpIAdd %6 %33 %34
456          %36 = OpAccessChain %25 %15 %17 %31
457                OpStore %36 %35
458          %38 = OpAccessChain %25 %24 %17 %31 %31
459          %39 = OpLoad %6 %38
460          %40 = OpIAdd %6 %39 %10
461          %41 = OpAccessChain %25 %15 %17 %37
462                OpStore %41 %40
463          %42 = OpAccessChain %25 %24 %17 %17 %37
464          %43 = OpLoad %6 %42
465          %44 = OpAccessChain %25 %15 %31 %17
466                OpStore %44 %43
467          %45 = OpAccessChain %25 %24 %17 %17 %31
468          %46 = OpLoad %6 %45
469          %47 = OpIMul %6 %46 %7
470          %48 = OpAccessChain %25 %15 %31 %31
471                OpStore %48 %47
472          %49 = OpAccessChain %25 %24 %17 %31 %37
473          %50 = OpLoad %6 %49
474          %51 = OpAccessChain %25 %15 %31 %37
475                OpStore %51 %50
476          %52 = OpAccessChain %25 %24 %31 %17
477          %53 = OpLoad %6 %52
478          %54 = OpAccessChain %25 %15 %37 %17 %17
479                OpStore %54 %53
480          %55 = OpAccessChain %25 %24 %31 %31
481          %56 = OpLoad %6 %55
482          %57 = OpAccessChain %25 %15 %37 %17 %31
483                OpStore %57 %56
484          %58 = OpAccessChain %25 %24 %31 %37
485          %59 = OpLoad %6 %58
486          %60 = OpAccessChain %25 %15 %37 %31 %17
487                OpStore %60 %59
488          %62 = OpAccessChain %25 %24 %31 %61
489          %63 = OpLoad %6 %62
490          %64 = OpAccessChain %25 %15 %37 %31 %31
491                OpStore %64 %63
492                OpReturn
493                OpFunctionEnd
494 
495 )";
496   constexpr char kDstNoDebug[] = R"(               OpCapability Shader
497           %1 = OpExtInstImport "GLSL.std.450"
498                OpMemoryModel Logical GLSL450
499                OpEntryPoint GLCompute %4 "main"
500                OpExecutionMode %4 LocalSize 1 1 1
501                OpSource ESSL 310
502                OpDecorate %8 ArrayStride 4
503                OpDecorate %9 ArrayStride 4
504                OpDecorate %11 ArrayStride 4
505                OpDecorate %12 ArrayStride 8
506                OpMemberDecorate %13 0 Offset 0
507                OpMemberDecorate %13 1 Offset 12
508                OpMemberDecorate %13 2 Offset 24
509                OpDecorate %13 BufferBlock
510                OpDecorate %15 DescriptorSet 0
511                OpDecorate %15 Binding 1
512                OpDecorate %18 ArrayStride 16
513                OpDecorate %19 ArrayStride 48
514                OpDecorate %21 ArrayStride 16
515                OpMemberDecorate %22 0 Offset 0
516                OpMemberDecorate %22 1 Offset 96
517                OpDecorate %22 Block
518                OpDecorate %24 DescriptorSet 0
519                OpDecorate %24 Binding 0
520           %2 = OpTypeVoid
521           %3 = OpTypeFunction %2
522           %6 = OpTypeInt 32 0
523          %16 = OpTypeInt 32 1
524           %7 = OpConstant %16 3
525           %8 = OpTypeArray %6 %7
526           %9 = OpTypeArray %6 %7
527          %10 = OpConstant %16 2
528          %11 = OpTypeArray %6 %10
529          %12 = OpTypeArray %11 %10
530          %13 = OpTypeStruct %8 %9 %12
531          %14 = OpTypePointer Uniform %13
532          %15 = OpVariable %14 Uniform
533          %18 = OpTypeArray %6 %7
534          %19 = OpTypeArray %18 %10
535          %20 = OpConstant %16 4
536          %21 = OpTypeArray %6 %20
537          %22 = OpTypeStruct %19 %21
538          %23 = OpTypePointer Uniform %22
539          %24 = OpVariable %23 Uniform
540          %25 = OpTypePointer Uniform %6
541          %17 = OpConstant %16 0
542          %28 = OpConstant %16 1
543          %31 = OpConstant %6 1
544          %34 = OpConstant %6 0
545          %37 = OpConstant %6 2
546          %61 = OpConstant %6 3
547           %4 = OpFunction %2 None %3
548           %5 = OpLabel
549          %26 = OpAccessChain %25 %24 %17 %17 %17
550          %27 = OpLoad %6 %26
551          %29 = OpIAdd %6 %27 %28
552          %30 = OpAccessChain %25 %15 %17 %17
553                OpStore %30 %29
554          %32 = OpAccessChain %25 %24 %17 %31 %17
555          %33 = OpLoad %6 %32
556          %35 = OpIAdd %6 %33 %34
557          %36 = OpAccessChain %25 %15 %17 %31
558                OpStore %36 %35
559          %38 = OpAccessChain %25 %24 %17 %31 %31
560          %39 = OpLoad %6 %38
561          %40 = OpIAdd %6 %39 %37
562          %41 = OpAccessChain %25 %15 %17 %10
563                OpStore %41 %40
564          %42 = OpAccessChain %25 %24 %17 %17 %10
565          %43 = OpLoad %6 %42
566          %44 = OpAccessChain %25 %15 %31 %17
567                OpStore %44 %43
568          %45 = OpAccessChain %25 %24 %17 %17 %31
569          %46 = OpLoad %6 %45
570          %47 = OpIMul %6 %46 %7
571          %48 = OpAccessChain %25 %15 %31 %31
572                OpStore %48 %47
573          %49 = OpAccessChain %25 %24 %17 %31 %10
574          %50 = OpLoad %6 %49
575          %51 = OpAccessChain %25 %15 %31 %10
576                OpStore %51 %50
577          %52 = OpAccessChain %25 %24 %31 %17
578          %53 = OpLoad %6 %52
579          %54 = OpAccessChain %25 %15 %37 %17 %17
580                OpStore %54 %53
581          %55 = OpAccessChain %25 %24 %31 %31
582          %56 = OpLoad %6 %55
583          %57 = OpAccessChain %25 %15 %37 %17 %31
584                OpStore %57 %56
585          %58 = OpAccessChain %25 %24 %31 %37
586          %59 = OpLoad %6 %58
587          %60 = OpAccessChain %25 %15 %37 %31 %17
588                OpStore %60 %59
589          %62 = OpAccessChain %25 %24 %31 %61
590          %63 = OpLoad %6 %62
591          %64 = OpAccessChain %25 %15 %37 %31 %31
592                OpStore %64 %63
593                OpReturn
594                OpFunctionEnd
595 
596 )";
597   constexpr char kDiff[] = R"( ; SPIR-V
598  ; Version: 1.6
599  ; Generator: Khronos SPIR-V Tools Assembler; 0
600  ; Bound: 65
601  ; Schema: 0
602  OpCapability Shader
603  %1 = OpExtInstImport "GLSL.std.450"
604  OpMemoryModel Logical GLSL450
605  OpEntryPoint GLCompute %4 "main"
606  OpExecutionMode %4 LocalSize 1 1 1
607  OpSource ESSL 310
608  OpDecorate %8 ArrayStride 4
609  OpDecorate %9 ArrayStride 4
610  OpDecorate %11 ArrayStride 4
611  OpDecorate %12 ArrayStride 8
612  OpMemberDecorate %13 0 Offset 0
613  OpMemberDecorate %13 1 Offset 12
614  OpMemberDecorate %13 2 Offset 24
615  OpDecorate %13 BufferBlock
616  OpDecorate %15 DescriptorSet 0
617  OpDecorate %15 Binding 1
618  OpDecorate %18 ArrayStride 16
619  OpDecorate %19 ArrayStride 48
620  OpDecorate %21 ArrayStride 16
621  OpMemberDecorate %22 0 Offset 0
622  OpMemberDecorate %22 1 Offset 96
623  OpDecorate %22 Block
624  OpDecorate %24 DescriptorSet 0
625  OpDecorate %24 Binding 0
626  %2 = OpTypeVoid
627  %3 = OpTypeFunction %2
628  %6 = OpTypeInt 32 0
629  %7 = OpConstant %6 3
630 -%8 = OpTypeArray %6 %7
631 +%8 = OpTypeArray %6 %61
632 -%9 = OpTypeArray %6 %7
633 +%9 = OpTypeArray %6 %61
634  %10 = OpConstant %6 2
635 -%11 = OpTypeArray %6 %10
636 +%11 = OpTypeArray %6 %37
637 -%12 = OpTypeArray %11 %10
638 +%12 = OpTypeArray %11 %37
639  %13 = OpTypeStruct %8 %9 %12
640  %14 = OpTypePointer Uniform %13
641  %15 = OpVariable %14 Uniform
642  %16 = OpTypeInt 32 1
643  %17 = OpConstant %16 0
644 -%18 = OpTypeArray %6 %7
645 +%18 = OpTypeArray %6 %61
646 -%19 = OpTypeArray %18 %10
647 +%19 = OpTypeArray %18 %37
648 -%20 = OpConstant %6 4
649 +%20 = OpConstant %16 4
650  %21 = OpTypeArray %6 %20
651  %22 = OpTypeStruct %19 %21
652  %23 = OpTypePointer Uniform %22
653  %24 = OpVariable %23 Uniform
654  %25 = OpTypePointer Uniform %6
655  %28 = OpConstant %6 1
656  %31 = OpConstant %16 1
657  %34 = OpConstant %6 0
658  %37 = OpConstant %16 2
659  %61 = OpConstant %16 3
660  %4 = OpFunction %2 None %3
661  %5 = OpLabel
662  %26 = OpAccessChain %25 %24 %17 %17 %17
663  %27 = OpLoad %6 %26
664 -%29 = OpIAdd %6 %27 %28
665 +%29 = OpIAdd %6 %27 %31
666  %30 = OpAccessChain %25 %15 %17 %17
667  OpStore %30 %29
668 -%32 = OpAccessChain %25 %24 %17 %31 %17
669 +%32 = OpAccessChain %25 %24 %17 %28 %17
670  %33 = OpLoad %6 %32
671  %35 = OpIAdd %6 %33 %34
672 -%36 = OpAccessChain %25 %15 %17 %31
673 +%36 = OpAccessChain %25 %15 %17 %28
674  OpStore %36 %35
675 -%38 = OpAccessChain %25 %24 %17 %31 %31
676 +%38 = OpAccessChain %25 %24 %17 %28 %28
677  %39 = OpLoad %6 %38
678  %40 = OpIAdd %6 %39 %10
679  %41 = OpAccessChain %25 %15 %17 %37
680  OpStore %41 %40
681  %42 = OpAccessChain %25 %24 %17 %17 %37
682  %43 = OpLoad %6 %42
683 -%44 = OpAccessChain %25 %15 %31 %17
684 +%44 = OpAccessChain %25 %15 %28 %17
685  OpStore %44 %43
686 -%45 = OpAccessChain %25 %24 %17 %17 %31
687 +%45 = OpAccessChain %25 %24 %17 %17 %28
688  %46 = OpLoad %6 %45
689 -%47 = OpIMul %6 %46 %7
690 +%47 = OpIMul %6 %46 %61
691 -%48 = OpAccessChain %25 %15 %31 %31
692 +%48 = OpAccessChain %25 %15 %28 %28
693  OpStore %48 %47
694 -%49 = OpAccessChain %25 %24 %17 %31 %37
695 +%49 = OpAccessChain %25 %24 %17 %28 %37
696  %50 = OpLoad %6 %49
697 -%51 = OpAccessChain %25 %15 %31 %37
698 +%51 = OpAccessChain %25 %15 %28 %37
699  OpStore %51 %50
700 -%52 = OpAccessChain %25 %24 %31 %17
701 +%52 = OpAccessChain %25 %24 %28 %17
702  %53 = OpLoad %6 %52
703 -%54 = OpAccessChain %25 %15 %37 %17 %17
704 +%54 = OpAccessChain %25 %15 %10 %17 %17
705  OpStore %54 %53
706 -%55 = OpAccessChain %25 %24 %31 %31
707 +%55 = OpAccessChain %25 %24 %28 %28
708  %56 = OpLoad %6 %55
709 -%57 = OpAccessChain %25 %15 %37 %17 %31
710 +%57 = OpAccessChain %25 %15 %10 %17 %28
711  OpStore %57 %56
712 -%58 = OpAccessChain %25 %24 %31 %37
713 +%58 = OpAccessChain %25 %24 %28 %10
714  %59 = OpLoad %6 %58
715 -%60 = OpAccessChain %25 %15 %37 %31 %17
716 +%60 = OpAccessChain %25 %15 %10 %28 %17
717  OpStore %60 %59
718 -%62 = OpAccessChain %25 %24 %31 %61
719 +%62 = OpAccessChain %25 %24 %28 %7
720  %63 = OpLoad %6 %62
721 -%64 = OpAccessChain %25 %15 %37 %31 %31
722 +%64 = OpAccessChain %25 %15 %10 %28 %28
723  OpStore %64 %63
724  OpReturn
725  OpFunctionEnd
726 )";
727   Options options;
728   DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
729 }
730 
731 }  // namespace
732 }  // namespace diff
733 }  // namespace spvtools
734