• 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 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