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