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