• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!amber
2
3# Copyright 2020 Google LLC
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#     http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17
18# A test for a bug found by GraphicsFuzz.
19
20# Short description: A fragment shader with always false if with discard loop
21
22# The test passes because both shaders render the same image.
23
24# Optimized using spirv-opt with the following arguments:
25# '-O'
26# spirv-opt commit hash: 230f363e6da32791f640b02205e0645cc67c3f1d
27
28
29
30SHADER vertex reference_vertex_shader PASSTHROUGH
31
32# reference_fragment_shader is derived from the following GLSL:
33# #version 320 es
34# precision highp float;
35#
36# precision highp int;
37#
38# layout(location = 0) out vec4 _GLF_color;
39#
40# struct BST
41# {
42#     int data;
43#     int leftIndex;
44#     int rightIndex;
45# };
46#
47# BST tree[10];
48#
49# void makeTreeNode(inout BST tree, int data)
50# {
51#     tree.data = data;
52#     tree.leftIndex = -1;
53#     tree.rightIndex = -1;
54# }
55# void insert(int treeIndex, int data)
56# {
57#     int baseIndex = 0;
58#     while (baseIndex <= treeIndex)
59#     {
60#         if (data <= tree[baseIndex].data)
61#         {
62#             if (tree[baseIndex].leftIndex == -1)
63#             {
64#                 tree[baseIndex].leftIndex = treeIndex;
65#                 makeTreeNode(tree[treeIndex], data);
66#                 return;
67#             }
68#             else
69#             {
70#                 baseIndex = tree[baseIndex].leftIndex;
71#                 continue;
72#             }
73#         }
74#         else
75#         {
76#             if (tree[baseIndex].rightIndex == -1)
77#             {
78#                 tree[baseIndex].rightIndex = treeIndex;
79#                 makeTreeNode(tree[treeIndex], data);
80#                 return;
81#             }
82#             else
83#             {
84#                 baseIndex = tree[baseIndex].rightIndex;
85#                 continue;
86#             }
87#         }
88#     }
89# }
90# int search(int target)
91# {
92#     BST currentNode;
93#     int index = 0;
94#     while (index != -1)
95#     {
96#         currentNode = tree[index];
97#         if (currentNode.data == target)
98#         {
99#             return target;
100#         }
101#         index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex;
102#     }
103#     return -1;
104# }
105# void main()
106# {
107#     int treeIndex = 0;
108#     makeTreeNode(tree[0], 9);
109#     treeIndex++;
110#     insert(treeIndex, 5);
111#     treeIndex++;
112#     insert(treeIndex, 12);
113#     treeIndex++;
114#     insert(treeIndex, 15);
115#     treeIndex++;
116#     insert(treeIndex, 7);
117#     treeIndex++;
118#     insert(treeIndex, 8);
119#     treeIndex++;
120#     insert(treeIndex, 2);
121#     treeIndex++;
122#     insert(treeIndex, 6);
123#     treeIndex++;
124#     insert(treeIndex, 17);
125#     treeIndex++;
126#     insert(treeIndex, 13);
127#     int count = 0;
128#     for (int i = 0; i < 20; i++)
129#     {
130#         int result = search(i);
131#         switch (i)
132#         {
133#         case 9:
134#         case 5:
135#         case 12:
136#         case 15:
137#         case 7:
138#         case 8:
139#         case 2:
140#         case 6:
141#         case 17:
142#         case 13:
143#             if (result == i)
144#             {
145#                 count++;
146#             }
147#             break;
148#         default:
149#             if (result == -1)
150#             {
151#                 count++;
152#             }
153#             break;
154#         }
155#     }
156#     if (count == 20)
157#     {
158#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
159#     }
160#     else
161#     {
162#         _GLF_color = vec4(0.0, 0.0, 1.0, 1.0);
163#     }
164# }
165SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
166; SPIR-V
167; Version: 1.0
168; Generator: Khronos Glslang Reference Front End; 10
169; Bound: 1372
170; Schema: 0
171               OpCapability Shader
172          %1 = OpExtInstImport "GLSL.std.450"
173               OpMemoryModel Logical GLSL450
174               OpEntryPoint Fragment %4 "main" %254
175               OpExecutionMode %4 OriginUpperLeft
176               OpSource ESSL 320
177               OpName %4 "main"
178               OpName %7 "BST"
179               OpMemberName %7 0 "data"
180               OpMemberName %7 1 "leftIndex"
181               OpMemberName %7 2 "rightIndex"
182               OpName %47 "tree"
183               OpName %254 "_GLF_color"
184               OpDecorate %254 Location 0
185          %2 = OpTypeVoid
186          %3 = OpTypeFunction %2
187          %6 = OpTypeInt 32 1
188          %7 = OpTypeStruct %6 %6 %6
189          %8 = OpTypePointer Function %7
190          %9 = OpTypePointer Function %6
191         %24 = OpConstant %6 0
192         %27 = OpConstant %6 1
193         %28 = OpConstant %6 -1
194         %30 = OpConstant %6 2
195         %40 = OpTypeBool
196         %43 = OpTypeInt 32 0
197         %44 = OpConstant %43 10
198         %45 = OpTypeArray %7 %44
199        %141 = OpConstant %6 9
200        %151 = OpConstant %6 5
201        %158 = OpConstant %6 12
202        %165 = OpConstant %6 15
203        %172 = OpConstant %6 7
204        %179 = OpConstant %6 8
205        %192 = OpConstant %6 6
206        %199 = OpConstant %6 17
207        %206 = OpConstant %6 13
208        %219 = OpConstant %6 20
209        %251 = OpTypeFloat 32
210        %252 = OpTypeVector %251 4
211        %253 = OpTypePointer Output %252
212        %254 = OpVariable %253 Output
213        %255 = OpConstant %251 1
214        %256 = OpConstant %251 0
215        %257 = OpConstantComposite %252 %255 %256 %256 %255
216        %259 = OpConstantComposite %252 %256 %256 %255 %255
217        %262 = OpConstant %43 0
218        %263 = OpConstantFalse %40
219        %266 = OpConstantTrue %40
220       %1015 = OpTypePointer Function %45
221       %1318 = OpUndef %6
222       %1359 = OpConstantComposite %7 %141 %28 %28
223       %1360 = OpConstantComposite %7 %151 %28 %28
224       %1361 = OpConstantComposite %7 %158 %28 %28
225       %1362 = OpConstant %6 3
226       %1363 = OpConstantComposite %7 %165 %28 %28
227       %1364 = OpConstant %6 4
228       %1365 = OpConstantComposite %7 %172 %28 %28
229       %1366 = OpConstantComposite %7 %179 %28 %28
230       %1367 = OpConstantComposite %7 %30 %28 %28
231       %1368 = OpConstantComposite %7 %192 %28 %28
232       %1369 = OpConstantComposite %7 %199 %28 %28
233       %1370 = OpConstantComposite %7 %206 %28 %28
234          %4 = OpFunction %2 None %3
235          %5 = OpLabel
236         %47 = OpVariable %1015 Function
237        %148 = OpAccessChain %8 %47 %24
238               OpStore %148 %1359
239               OpSelectionMerge %347 None
240               OpSwitch %262 %288
241        %288 = OpLabel
242               OpBranch %289
243        %289 = OpLabel
244       %1212 = OpPhi %6 %24 %288 %1342 %343
245        %293 = OpSLessThanEqual %40 %1212 %27
246               OpLoopMerge %344 %343 None
247               OpBranchConditional %293 %294 %344
248        %294 = OpLabel
249        %297 = OpAccessChain %9 %47 %1212 %24
250        %298 = OpLoad %6 %297
251        %299 = OpSLessThanEqual %40 %151 %298
252               OpSelectionMerge %342 None
253               OpBranchConditional %299 %300 %321
254        %321 = OpLabel
255        %323 = OpAccessChain %9 %47 %1212 %30
256        %324 = OpLoad %6 %323
257        %325 = OpIEqual %40 %324 %28
258               OpSelectionMerge %341 None
259               OpBranchConditional %325 %326 %337
260        %337 = OpLabel
261        %340 = OpLoad %6 %323
262               OpBranch %343
263        %326 = OpLabel
264               OpStore %323 %27
265        %336 = OpAccessChain %8 %47 %27
266               OpStore %336 %1360
267               OpBranch %344
268        %341 = OpLabel
269               OpUnreachable
270        %300 = OpLabel
271        %302 = OpAccessChain %9 %47 %1212 %27
272        %303 = OpLoad %6 %302
273        %304 = OpIEqual %40 %303 %28
274               OpSelectionMerge %320 None
275               OpBranchConditional %304 %305 %316
276        %316 = OpLabel
277        %319 = OpLoad %6 %302
278               OpBranch %343
279        %305 = OpLabel
280               OpStore %302 %27
281        %315 = OpAccessChain %8 %47 %27
282               OpStore %315 %1360
283               OpBranch %344
284        %320 = OpLabel
285               OpUnreachable
286        %342 = OpLabel
287               OpUnreachable
288        %343 = OpLabel
289       %1342 = OpPhi %6 %319 %316 %340 %337
290               OpBranch %289
291        %344 = OpLabel
292       %1213 = OpPhi %40 %263 %289 %266 %305 %266 %326
293               OpSelectionMerge %346 None
294               OpBranchConditional %1213 %347 %346
295        %346 = OpLabel
296               OpBranch %347
297        %347 = OpLabel
298               OpSelectionMerge %424 None
299               OpSwitch %262 %365
300        %365 = OpLabel
301               OpBranch %366
302        %366 = OpLabel
303       %1220 = OpPhi %6 %24 %365 %1344 %420
304        %370 = OpSLessThanEqual %40 %1220 %30
305               OpLoopMerge %421 %420 None
306               OpBranchConditional %370 %371 %421
307        %371 = OpLabel
308        %374 = OpAccessChain %9 %47 %1220 %24
309        %375 = OpLoad %6 %374
310        %376 = OpSLessThanEqual %40 %158 %375
311               OpSelectionMerge %419 None
312               OpBranchConditional %376 %377 %398
313        %398 = OpLabel
314        %400 = OpAccessChain %9 %47 %1220 %30
315        %401 = OpLoad %6 %400
316        %402 = OpIEqual %40 %401 %28
317               OpSelectionMerge %418 None
318               OpBranchConditional %402 %403 %414
319        %414 = OpLabel
320        %417 = OpLoad %6 %400
321               OpBranch %420
322        %403 = OpLabel
323               OpStore %400 %30
324        %413 = OpAccessChain %8 %47 %30
325               OpStore %413 %1361
326               OpBranch %421
327        %418 = OpLabel
328               OpUnreachable
329        %377 = OpLabel
330        %379 = OpAccessChain %9 %47 %1220 %27
331        %380 = OpLoad %6 %379
332        %381 = OpIEqual %40 %380 %28
333               OpSelectionMerge %397 None
334               OpBranchConditional %381 %382 %393
335        %393 = OpLabel
336        %396 = OpLoad %6 %379
337               OpBranch %420
338        %382 = OpLabel
339               OpStore %379 %30
340        %392 = OpAccessChain %8 %47 %30
341               OpStore %392 %1361
342               OpBranch %421
343        %397 = OpLabel
344               OpUnreachable
345        %419 = OpLabel
346               OpUnreachable
347        %420 = OpLabel
348       %1344 = OpPhi %6 %396 %393 %417 %414
349               OpBranch %366
350        %421 = OpLabel
351       %1221 = OpPhi %40 %263 %366 %266 %382 %266 %403
352               OpSelectionMerge %423 None
353               OpBranchConditional %1221 %424 %423
354        %423 = OpLabel
355               OpBranch %424
356        %424 = OpLabel
357               OpSelectionMerge %501 None
358               OpSwitch %262 %442
359        %442 = OpLabel
360               OpBranch %443
361        %443 = OpLabel
362       %1228 = OpPhi %6 %24 %442 %1345 %497
363        %447 = OpSLessThanEqual %40 %1228 %1362
364               OpLoopMerge %498 %497 None
365               OpBranchConditional %447 %448 %498
366        %448 = OpLabel
367        %451 = OpAccessChain %9 %47 %1228 %24
368        %452 = OpLoad %6 %451
369        %453 = OpSLessThanEqual %40 %165 %452
370               OpSelectionMerge %496 None
371               OpBranchConditional %453 %454 %475
372        %475 = OpLabel
373        %477 = OpAccessChain %9 %47 %1228 %30
374        %478 = OpLoad %6 %477
375        %479 = OpIEqual %40 %478 %28
376               OpSelectionMerge %495 None
377               OpBranchConditional %479 %480 %491
378        %491 = OpLabel
379        %494 = OpLoad %6 %477
380               OpBranch %497
381        %480 = OpLabel
382               OpStore %477 %1362
383        %490 = OpAccessChain %8 %47 %1362
384               OpStore %490 %1363
385               OpBranch %498
386        %495 = OpLabel
387               OpUnreachable
388        %454 = OpLabel
389        %456 = OpAccessChain %9 %47 %1228 %27
390        %457 = OpLoad %6 %456
391        %458 = OpIEqual %40 %457 %28
392               OpSelectionMerge %474 None
393               OpBranchConditional %458 %459 %470
394        %470 = OpLabel
395        %473 = OpLoad %6 %456
396               OpBranch %497
397        %459 = OpLabel
398               OpStore %456 %1362
399        %469 = OpAccessChain %8 %47 %1362
400               OpStore %469 %1363
401               OpBranch %498
402        %474 = OpLabel
403               OpUnreachable
404        %496 = OpLabel
405               OpUnreachable
406        %497 = OpLabel
407       %1345 = OpPhi %6 %473 %470 %494 %491
408               OpBranch %443
409        %498 = OpLabel
410       %1229 = OpPhi %40 %263 %443 %266 %459 %266 %480
411               OpSelectionMerge %500 None
412               OpBranchConditional %1229 %501 %500
413        %500 = OpLabel
414               OpBranch %501
415        %501 = OpLabel
416               OpSelectionMerge %578 None
417               OpSwitch %262 %519
418        %519 = OpLabel
419               OpBranch %520
420        %520 = OpLabel
421       %1236 = OpPhi %6 %24 %519 %1346 %574
422        %524 = OpSLessThanEqual %40 %1236 %1364
423               OpLoopMerge %575 %574 None
424               OpBranchConditional %524 %525 %575
425        %525 = OpLabel
426        %528 = OpAccessChain %9 %47 %1236 %24
427        %529 = OpLoad %6 %528
428        %530 = OpSLessThanEqual %40 %172 %529
429               OpSelectionMerge %573 None
430               OpBranchConditional %530 %531 %552
431        %552 = OpLabel
432        %554 = OpAccessChain %9 %47 %1236 %30
433        %555 = OpLoad %6 %554
434        %556 = OpIEqual %40 %555 %28
435               OpSelectionMerge %572 None
436               OpBranchConditional %556 %557 %568
437        %568 = OpLabel
438        %571 = OpLoad %6 %554
439               OpBranch %574
440        %557 = OpLabel
441               OpStore %554 %1364
442        %567 = OpAccessChain %8 %47 %1364
443               OpStore %567 %1365
444               OpBranch %575
445        %572 = OpLabel
446               OpUnreachable
447        %531 = OpLabel
448        %533 = OpAccessChain %9 %47 %1236 %27
449        %534 = OpLoad %6 %533
450        %535 = OpIEqual %40 %534 %28
451               OpSelectionMerge %551 None
452               OpBranchConditional %535 %536 %547
453        %547 = OpLabel
454        %550 = OpLoad %6 %533
455               OpBranch %574
456        %536 = OpLabel
457               OpStore %533 %1364
458        %546 = OpAccessChain %8 %47 %1364
459               OpStore %546 %1365
460               OpBranch %575
461        %551 = OpLabel
462               OpUnreachable
463        %573 = OpLabel
464               OpUnreachable
465        %574 = OpLabel
466       %1346 = OpPhi %6 %550 %547 %571 %568
467               OpBranch %520
468        %575 = OpLabel
469       %1237 = OpPhi %40 %263 %520 %266 %536 %266 %557
470               OpSelectionMerge %577 None
471               OpBranchConditional %1237 %578 %577
472        %577 = OpLabel
473               OpBranch %578
474        %578 = OpLabel
475               OpSelectionMerge %655 None
476               OpSwitch %262 %596
477        %596 = OpLabel
478               OpBranch %597
479        %597 = OpLabel
480       %1244 = OpPhi %6 %24 %596 %1347 %651
481        %601 = OpSLessThanEqual %40 %1244 %151
482               OpLoopMerge %652 %651 None
483               OpBranchConditional %601 %602 %652
484        %602 = OpLabel
485        %605 = OpAccessChain %9 %47 %1244 %24
486        %606 = OpLoad %6 %605
487        %607 = OpSLessThanEqual %40 %179 %606
488               OpSelectionMerge %650 None
489               OpBranchConditional %607 %608 %629
490        %629 = OpLabel
491        %631 = OpAccessChain %9 %47 %1244 %30
492        %632 = OpLoad %6 %631
493        %633 = OpIEqual %40 %632 %28
494               OpSelectionMerge %649 None
495               OpBranchConditional %633 %634 %645
496        %645 = OpLabel
497        %648 = OpLoad %6 %631
498               OpBranch %651
499        %634 = OpLabel
500               OpStore %631 %151
501        %644 = OpAccessChain %8 %47 %151
502               OpStore %644 %1366
503               OpBranch %652
504        %649 = OpLabel
505               OpUnreachable
506        %608 = OpLabel
507        %610 = OpAccessChain %9 %47 %1244 %27
508        %611 = OpLoad %6 %610
509        %612 = OpIEqual %40 %611 %28
510               OpSelectionMerge %628 None
511               OpBranchConditional %612 %613 %624
512        %624 = OpLabel
513        %627 = OpLoad %6 %610
514               OpBranch %651
515        %613 = OpLabel
516               OpStore %610 %151
517        %623 = OpAccessChain %8 %47 %151
518               OpStore %623 %1366
519               OpBranch %652
520        %628 = OpLabel
521               OpUnreachable
522        %650 = OpLabel
523               OpUnreachable
524        %651 = OpLabel
525       %1347 = OpPhi %6 %627 %624 %648 %645
526               OpBranch %597
527        %652 = OpLabel
528       %1245 = OpPhi %40 %263 %597 %266 %613 %266 %634
529               OpSelectionMerge %654 None
530               OpBranchConditional %1245 %655 %654
531        %654 = OpLabel
532               OpBranch %655
533        %655 = OpLabel
534               OpSelectionMerge %732 None
535               OpSwitch %262 %673
536        %673 = OpLabel
537               OpBranch %674
538        %674 = OpLabel
539       %1252 = OpPhi %6 %24 %673 %1348 %728
540        %678 = OpSLessThanEqual %40 %1252 %192
541               OpLoopMerge %729 %728 None
542               OpBranchConditional %678 %679 %729
543        %679 = OpLabel
544        %682 = OpAccessChain %9 %47 %1252 %24
545        %683 = OpLoad %6 %682
546        %684 = OpSLessThanEqual %40 %30 %683
547               OpSelectionMerge %727 None
548               OpBranchConditional %684 %685 %706
549        %706 = OpLabel
550        %708 = OpAccessChain %9 %47 %1252 %30
551        %709 = OpLoad %6 %708
552        %710 = OpIEqual %40 %709 %28
553               OpSelectionMerge %726 None
554               OpBranchConditional %710 %711 %722
555        %722 = OpLabel
556        %725 = OpLoad %6 %708
557               OpBranch %728
558        %711 = OpLabel
559               OpStore %708 %192
560        %721 = OpAccessChain %8 %47 %192
561               OpStore %721 %1367
562               OpBranch %729
563        %726 = OpLabel
564               OpUnreachable
565        %685 = OpLabel
566        %687 = OpAccessChain %9 %47 %1252 %27
567        %688 = OpLoad %6 %687
568        %689 = OpIEqual %40 %688 %28
569               OpSelectionMerge %705 None
570               OpBranchConditional %689 %690 %701
571        %701 = OpLabel
572        %704 = OpLoad %6 %687
573               OpBranch %728
574        %690 = OpLabel
575               OpStore %687 %192
576        %700 = OpAccessChain %8 %47 %192
577               OpStore %700 %1367
578               OpBranch %729
579        %705 = OpLabel
580               OpUnreachable
581        %727 = OpLabel
582               OpUnreachable
583        %728 = OpLabel
584       %1348 = OpPhi %6 %704 %701 %725 %722
585               OpBranch %674
586        %729 = OpLabel
587       %1253 = OpPhi %40 %263 %674 %266 %690 %266 %711
588               OpSelectionMerge %731 None
589               OpBranchConditional %1253 %732 %731
590        %731 = OpLabel
591               OpBranch %732
592        %732 = OpLabel
593               OpSelectionMerge %809 None
594               OpSwitch %262 %750
595        %750 = OpLabel
596               OpBranch %751
597        %751 = OpLabel
598       %1260 = OpPhi %6 %24 %750 %1349 %805
599        %755 = OpSLessThanEqual %40 %1260 %172
600               OpLoopMerge %806 %805 None
601               OpBranchConditional %755 %756 %806
602        %756 = OpLabel
603        %759 = OpAccessChain %9 %47 %1260 %24
604        %760 = OpLoad %6 %759
605        %761 = OpSLessThanEqual %40 %192 %760
606               OpSelectionMerge %804 None
607               OpBranchConditional %761 %762 %783
608        %783 = OpLabel
609        %785 = OpAccessChain %9 %47 %1260 %30
610        %786 = OpLoad %6 %785
611        %787 = OpIEqual %40 %786 %28
612               OpSelectionMerge %803 None
613               OpBranchConditional %787 %788 %799
614        %799 = OpLabel
615        %802 = OpLoad %6 %785
616               OpBranch %805
617        %788 = OpLabel
618               OpStore %785 %172
619        %798 = OpAccessChain %8 %47 %172
620               OpStore %798 %1368
621               OpBranch %806
622        %803 = OpLabel
623               OpUnreachable
624        %762 = OpLabel
625        %764 = OpAccessChain %9 %47 %1260 %27
626        %765 = OpLoad %6 %764
627        %766 = OpIEqual %40 %765 %28
628               OpSelectionMerge %782 None
629               OpBranchConditional %766 %767 %778
630        %778 = OpLabel
631        %781 = OpLoad %6 %764
632               OpBranch %805
633        %767 = OpLabel
634               OpStore %764 %172
635        %777 = OpAccessChain %8 %47 %172
636               OpStore %777 %1368
637               OpBranch %806
638        %782 = OpLabel
639               OpUnreachable
640        %804 = OpLabel
641               OpUnreachable
642        %805 = OpLabel
643       %1349 = OpPhi %6 %781 %778 %802 %799
644               OpBranch %751
645        %806 = OpLabel
646       %1261 = OpPhi %40 %263 %751 %266 %767 %266 %788
647               OpSelectionMerge %808 None
648               OpBranchConditional %1261 %809 %808
649        %808 = OpLabel
650               OpBranch %809
651        %809 = OpLabel
652               OpSelectionMerge %886 None
653               OpSwitch %262 %827
654        %827 = OpLabel
655               OpBranch %828
656        %828 = OpLabel
657       %1268 = OpPhi %6 %24 %827 %1350 %882
658        %832 = OpSLessThanEqual %40 %1268 %179
659               OpLoopMerge %883 %882 None
660               OpBranchConditional %832 %833 %883
661        %833 = OpLabel
662        %836 = OpAccessChain %9 %47 %1268 %24
663        %837 = OpLoad %6 %836
664        %838 = OpSLessThanEqual %40 %199 %837
665               OpSelectionMerge %881 None
666               OpBranchConditional %838 %839 %860
667        %860 = OpLabel
668        %862 = OpAccessChain %9 %47 %1268 %30
669        %863 = OpLoad %6 %862
670        %864 = OpIEqual %40 %863 %28
671               OpSelectionMerge %880 None
672               OpBranchConditional %864 %865 %876
673        %876 = OpLabel
674        %879 = OpLoad %6 %862
675               OpBranch %882
676        %865 = OpLabel
677               OpStore %862 %179
678        %875 = OpAccessChain %8 %47 %179
679               OpStore %875 %1369
680               OpBranch %883
681        %880 = OpLabel
682               OpUnreachable
683        %839 = OpLabel
684        %841 = OpAccessChain %9 %47 %1268 %27
685        %842 = OpLoad %6 %841
686        %843 = OpIEqual %40 %842 %28
687               OpSelectionMerge %859 None
688               OpBranchConditional %843 %844 %855
689        %855 = OpLabel
690        %858 = OpLoad %6 %841
691               OpBranch %882
692        %844 = OpLabel
693               OpStore %841 %179
694        %854 = OpAccessChain %8 %47 %179
695               OpStore %854 %1369
696               OpBranch %883
697        %859 = OpLabel
698               OpUnreachable
699        %881 = OpLabel
700               OpUnreachable
701        %882 = OpLabel
702       %1350 = OpPhi %6 %858 %855 %879 %876
703               OpBranch %828
704        %883 = OpLabel
705       %1269 = OpPhi %40 %263 %828 %266 %844 %266 %865
706               OpSelectionMerge %885 None
707               OpBranchConditional %1269 %886 %885
708        %885 = OpLabel
709               OpBranch %886
710        %886 = OpLabel
711               OpSelectionMerge %963 None
712               OpSwitch %262 %904
713        %904 = OpLabel
714               OpBranch %905
715        %905 = OpLabel
716       %1276 = OpPhi %6 %24 %904 %1351 %959
717        %909 = OpSLessThanEqual %40 %1276 %141
718               OpLoopMerge %960 %959 None
719               OpBranchConditional %909 %910 %960
720        %910 = OpLabel
721        %913 = OpAccessChain %9 %47 %1276 %24
722        %914 = OpLoad %6 %913
723        %915 = OpSLessThanEqual %40 %206 %914
724               OpSelectionMerge %958 None
725               OpBranchConditional %915 %916 %937
726        %937 = OpLabel
727        %939 = OpAccessChain %9 %47 %1276 %30
728        %940 = OpLoad %6 %939
729        %941 = OpIEqual %40 %940 %28
730               OpSelectionMerge %957 None
731               OpBranchConditional %941 %942 %953
732        %953 = OpLabel
733        %956 = OpLoad %6 %939
734               OpBranch %959
735        %942 = OpLabel
736               OpStore %939 %141
737        %952 = OpAccessChain %8 %47 %141
738               OpStore %952 %1370
739               OpBranch %960
740        %957 = OpLabel
741               OpUnreachable
742        %916 = OpLabel
743        %918 = OpAccessChain %9 %47 %1276 %27
744        %919 = OpLoad %6 %918
745        %920 = OpIEqual %40 %919 %28
746               OpSelectionMerge %936 None
747               OpBranchConditional %920 %921 %932
748        %932 = OpLabel
749        %935 = OpLoad %6 %918
750               OpBranch %959
751        %921 = OpLabel
752               OpStore %918 %141
753        %931 = OpAccessChain %8 %47 %141
754               OpStore %931 %1370
755               OpBranch %960
756        %936 = OpLabel
757               OpUnreachable
758        %958 = OpLabel
759               OpUnreachable
760        %959 = OpLabel
761       %1351 = OpPhi %6 %935 %932 %956 %953
762               OpBranch %905
763        %960 = OpLabel
764       %1277 = OpPhi %40 %263 %905 %266 %921 %266 %942
765               OpSelectionMerge %962 None
766               OpBranchConditional %1277 %963 %962
767        %962 = OpLabel
768               OpBranch %963
769        %963 = OpLabel
770               OpBranch %213
771        %213 = OpLabel
772       %1290 = OpPhi %6 %1318 %963 %1287 %216
773       %1281 = OpPhi %6 %24 %963 %1352 %216
774       %1280 = OpPhi %6 %24 %963 %246 %216
775        %220 = OpSLessThan %40 %1280 %219
776               OpLoopMerge %215 %216 None
777               OpBranchConditional %220 %214 %215
778        %214 = OpLabel
779               OpSelectionMerge %1013 None
780               OpSwitch %262 %981
781        %981 = OpLabel
782               OpBranch %982
783        %982 = OpLabel
784       %1282 = OpPhi %6 %24 %981 %1371 %1009
785        %985 = OpINotEqual %40 %1282 %28
786               OpLoopMerge %1010 %1009 None
787               OpBranchConditional %985 %986 %1010
788        %986 = OpLabel
789        %988 = OpAccessChain %8 %47 %1282
790        %989 = OpLoad %7 %988
791       %1019 = OpCompositeExtract %6 %989 0
792       %1020 = OpCompositeExtract %6 %989 1
793       %1021 = OpCompositeExtract %6 %989 2
794        %993 = OpIEqual %40 %1019 %1280
795               OpSelectionMerge %996 None
796               OpBranchConditional %993 %994 %996
797        %994 = OpLabel
798               OpBranch %1010
799        %996 = OpLabel
800       %1000 = OpSGreaterThan %40 %1280 %1019
801       %1371 = OpSelect %6 %1000 %1021 %1020
802               OpBranch %1009
803       %1009 = OpLabel
804               OpBranch %982
805       %1010 = OpLabel
806       %1288 = OpPhi %6 %1290 %982 %1280 %994
807       %1284 = OpPhi %40 %263 %982 %266 %994
808               OpSelectionMerge %1012 None
809               OpBranchConditional %1284 %1013 %1012
810       %1012 = OpLabel
811               OpBranch %1013
812       %1013 = OpLabel
813       %1287 = OpPhi %6 %1288 %1010 %28 %1012
814               OpSelectionMerge %228 None
815               OpSwitch %1280 %227 9 %226 5 %226 12 %226 15 %226 7 %226 8 %226 2 %226 6 %226 17 %226 13 %226
816        %226 = OpLabel
817        %231 = OpIEqual %40 %1287 %1280
818               OpSelectionMerge %233 None
819               OpBranchConditional %231 %232 %233
820        %232 = OpLabel
821        %235 = OpIAdd %6 %1281 %27
822               OpBranch %233
823        %233 = OpLabel
824       %1354 = OpPhi %6 %1281 %226 %235 %232
825               OpBranch %228
826        %227 = OpLabel
827        %238 = OpIEqual %40 %1287 %28
828               OpSelectionMerge %240 None
829               OpBranchConditional %238 %239 %240
830        %239 = OpLabel
831        %242 = OpIAdd %6 %1281 %27
832               OpBranch %240
833        %240 = OpLabel
834       %1353 = OpPhi %6 %1281 %227 %242 %239
835               OpBranch %228
836        %228 = OpLabel
837       %1352 = OpPhi %6 %1353 %240 %1354 %233
838               OpBranch %216
839        %216 = OpLabel
840        %246 = OpIAdd %6 %1280 %27
841               OpBranch %213
842        %215 = OpLabel
843        %248 = OpIEqual %40 %1281 %219
844               OpSelectionMerge %250 None
845               OpBranchConditional %248 %249 %258
846        %258 = OpLabel
847               OpStore %254 %259
848               OpBranch %250
849        %249 = OpLabel
850               OpStore %254 %257
851               OpBranch %250
852        %250 = OpLabel
853               OpReturn
854               OpFunctionEnd
855END
856
857
858BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
859
860PIPELINE graphics reference_pipeline
861  ATTACH reference_vertex_shader
862  ATTACH reference_fragment_shader
863  FRAMEBUFFER_SIZE 256 256
864  BIND BUFFER reference_framebuffer AS color LOCATION 0
865END
866CLEAR_COLOR reference_pipeline 0 0 0 255
867
868CLEAR reference_pipeline
869RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
870
871
872SHADER vertex variant_vertex_shader PASSTHROUGH
873
874# variant_fragment_shader is derived from the following GLSL:
875# #version 320 es
876# precision highp float;
877#
878# precision highp int;
879#
880# layout(set = 0, binding = 0) uniform buf0
881# {
882#     vec2 injectionSwitch;
883# };
884# layout(location = 0) out vec4 _GLF_color;
885#
886# struct BST
887# {
888#     int data;
889#     int leftIndex;
890#     int rightIndex;
891# };
892#
893# BST tree[10];
894#
895# void makeTreeNode(inout BST tree, int data)
896# {
897#     tree.data = data;
898#     tree.leftIndex = -1;
899#     tree.rightIndex = -1;
900# }
901# void insert(int treeIndex, int data)
902# {
903#     int baseIndex = 0;
904#     while (baseIndex <= treeIndex)
905#     {
906#         if (data <= tree[baseIndex].data)
907#         {
908#             if (tree[baseIndex].leftIndex == -1)
909#             {
910#                 // Always false.
911#                 if ((injectionSwitch.y < injectionSwitch.x))
912#                 {
913#                     do
914#                     {
915#                         // This is never reached.
916#                         discard;
917#                     }
918#                     // Always false.
919#                     while (injectionSwitch.y < injectionSwitch.x);
920#                 }
921#                 tree[baseIndex].leftIndex = treeIndex;
922#                 makeTreeNode(tree[treeIndex], data);
923#                 // Iterates once.
924#                 for (int int_i = 0; int_i < int((injectionSwitch.y)); int_i++)
925#                 {
926#                     return;
927#                 }
928#             }
929#             else
930#             {
931#                 baseIndex = tree[baseIndex].leftIndex;
932#                 continue;
933#             }
934#         }
935#         else
936#         {
937#             if (tree[baseIndex].rightIndex == -1)
938#             {
939#                 tree[baseIndex].rightIndex = treeIndex;
940#                 makeTreeNode(tree[treeIndex], data);
941#                 return;
942#             }
943#             else
944#             {
945#                 baseIndex = tree[baseIndex].rightIndex;
946#                 continue;
947#             }
948#         }
949#     }
950# }
951# int search(int target)
952# {
953#     BST currentNode;
954#     int index = 0;
955#     while (index != -1)
956#     {
957#         currentNode = tree[index];
958#         if (currentNode.data == target)
959#         {
960#             return target;
961#         }
962#         index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex;
963#     }
964#     return -1;
965# }
966# void main()
967# {
968#     int treeIndex = 0;
969#     makeTreeNode(tree[0], 9);
970#     treeIndex++;
971#     insert(treeIndex, 5);
972#     treeIndex++;
973#     // gl_FragCoord.y < 0.0 == false
974#     // Iterates once,
975#     for (int int_i = 0; (gl_FragCoord.y < 0.0) || (int_i != int(injectionSwitch.y)); int_i++)
976#     {
977#         insert(treeIndex, 12);
978#     }
979#     treeIndex++;
980#     insert(treeIndex, 15);
981#     treeIndex++;
982#     insert(treeIndex, 7);
983#     treeIndex++;
984#     insert(treeIndex, 8);
985#     treeIndex++;
986#     insert(treeIndex, 2);
987#     treeIndex++;
988#     insert(treeIndex, 6);
989#     treeIndex++;
990#     insert(treeIndex, 17);
991#     treeIndex++;
992#     insert(treeIndex, 13);
993#     int count = 0;
994#     for (int i = 0; i < 20; i++)
995#     {
996#         int result = search(i);
997#         switch (i)
998#         {
999#         case 9:
1000#         case 5:
1001#         case 12:
1002#         case 15:
1003#         case 7:
1004#         case 8:
1005#         case 2:
1006#         case 6:
1007#         case 17:
1008#         case 13:
1009#             if (result == i)
1010#             {
1011#                 count++;
1012#             }
1013#             break;
1014#         default:
1015#             if (result == -1)
1016#             {
1017#                 count++;
1018#             }
1019#             break;
1020#         }
1021#     }
1022#     if (count == 20)
1023#     {
1024#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
1025#     }
1026#     else
1027#     {
1028#         _GLF_color = vec4(0.0, 0.0, 1.0, 1.0);
1029#     }
1030# }
1031SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
1032; SPIR-V
1033; Version: 1.0
1034; Generator: Khronos Glslang Reference Front End; 10
1035; Bound: 1740
1036; Schema: 0
1037               OpCapability Shader
1038          %1 = OpExtInstImport "GLSL.std.450"
1039               OpMemoryModel Logical GLSL450
1040               OpEntryPoint Fragment %4 "main" %204 %315
1041               OpExecutionMode %4 OriginUpperLeft
1042               OpSource ESSL 320
1043               OpName %4 "main"
1044               OpName %7 "BST"
1045               OpMemberName %7 0 "data"
1046               OpMemberName %7 1 "leftIndex"
1047               OpMemberName %7 2 "rightIndex"
1048               OpName %47 "tree"
1049               OpName %63 "buf0"
1050               OpMemberName %63 0 "injectionSwitch"
1051               OpName %65 ""
1052               OpName %204 "gl_FragCoord"
1053               OpName %315 "_GLF_color"
1054               OpMemberDecorate %63 0 Offset 0
1055               OpDecorate %63 Block
1056               OpDecorate %65 DescriptorSet 0
1057               OpDecorate %65 Binding 0
1058               OpDecorate %204 BuiltIn FragCoord
1059               OpDecorate %315 Location 0
1060          %2 = OpTypeVoid
1061          %3 = OpTypeFunction %2
1062          %6 = OpTypeInt 32 1
1063          %7 = OpTypeStruct %6 %6 %6
1064          %8 = OpTypePointer Function %7
1065          %9 = OpTypePointer Function %6
1066         %24 = OpConstant %6 0
1067         %27 = OpConstant %6 1
1068         %28 = OpConstant %6 -1
1069         %30 = OpConstant %6 2
1070         %40 = OpTypeBool
1071         %43 = OpTypeInt 32 0
1072         %44 = OpConstant %43 10
1073         %45 = OpTypeArray %7 %44
1074         %61 = OpTypeFloat 32
1075         %62 = OpTypeVector %61 2
1076         %63 = OpTypeStruct %62
1077         %64 = OpTypePointer Uniform %63
1078         %65 = OpVariable %64 Uniform
1079         %66 = OpConstant %43 1
1080         %67 = OpTypePointer Uniform %61
1081         %70 = OpConstant %43 0
1082        %179 = OpConstant %6 9
1083        %189 = OpConstant %6 5
1084        %202 = OpTypeVector %61 4
1085        %203 = OpTypePointer Input %202
1086        %204 = OpVariable %203 Input
1087        %205 = OpTypePointer Input %61
1088        %208 = OpConstant %61 0
1089        %219 = OpConstant %6 12
1090        %228 = OpConstant %6 15
1091        %235 = OpConstant %6 7
1092        %242 = OpConstant %6 8
1093        %255 = OpConstant %6 6
1094        %262 = OpConstant %6 17
1095        %269 = OpConstant %6 13
1096        %282 = OpConstant %6 20
1097        %314 = OpTypePointer Output %202
1098        %315 = OpVariable %314 Output
1099        %316 = OpConstant %61 1
1100        %317 = OpConstantComposite %202 %316 %208 %208 %316
1101        %319 = OpConstantComposite %202 %208 %208 %316 %316
1102        %322 = OpConstantFalse %40
1103        %325 = OpConstantTrue %40
1104       %1301 = OpTypePointer Function %45
1105       %1620 = OpUndef %6
1106       %1727 = OpConstantComposite %7 %179 %28 %28
1107       %1728 = OpConstantComposite %7 %189 %28 %28
1108       %1729 = OpConstant %6 3
1109       %1730 = OpConstantComposite %7 %219 %28 %28
1110       %1731 = OpConstantComposite %7 %228 %28 %28
1111       %1732 = OpConstant %6 4
1112       %1733 = OpConstantComposite %7 %235 %28 %28
1113       %1734 = OpConstantComposite %7 %242 %28 %28
1114       %1735 = OpConstantComposite %7 %30 %28 %28
1115       %1736 = OpConstantComposite %7 %255 %28 %28
1116       %1737 = OpConstantComposite %7 %262 %28 %28
1117       %1738 = OpConstantComposite %7 %269 %28 %28
1118          %4 = OpFunction %2 None %3
1119          %5 = OpLabel
1120         %47 = OpVariable %1301 Function
1121        %186 = OpAccessChain %8 %47 %24
1122               OpStore %186 %1727
1123               OpSelectionMerge %432 None
1124               OpSwitch %70 %350
1125        %350 = OpLabel
1126               OpBranch %351
1127        %351 = OpLabel
1128       %1501 = OpPhi %40 %322 %350 %1674 %428
1129       %1498 = OpPhi %6 %24 %350 %1671 %428
1130        %355 = OpSLessThanEqual %40 %1498 %27
1131               OpLoopMerge %429 %428 None
1132               OpBranchConditional %355 %356 %429
1133        %356 = OpLabel
1134        %359 = OpAccessChain %9 %47 %1498 %24
1135        %360 = OpLoad %6 %359
1136        %361 = OpSLessThanEqual %40 %189 %360
1137               OpSelectionMerge %427 None
1138               OpBranchConditional %361 %362 %406
1139        %406 = OpLabel
1140        %408 = OpAccessChain %9 %47 %1498 %30
1141        %409 = OpLoad %6 %408
1142        %410 = OpIEqual %40 %409 %28
1143               OpSelectionMerge %426 None
1144               OpBranchConditional %410 %411 %422
1145        %422 = OpLabel
1146        %425 = OpLoad %6 %408
1147               OpBranch %428
1148        %411 = OpLabel
1149               OpStore %408 %27
1150        %421 = OpAccessChain %8 %47 %27
1151               OpStore %421 %1728
1152               OpBranch %429
1153        %426 = OpLabel
1154               OpUnreachable
1155        %362 = OpLabel
1156        %364 = OpAccessChain %9 %47 %1498 %27
1157        %365 = OpLoad %6 %364
1158        %366 = OpIEqual %40 %365 %28
1159               OpSelectionMerge %405 None
1160               OpBranchConditional %366 %367 %401
1161        %401 = OpLabel
1162        %404 = OpLoad %6 %364
1163               OpBranch %428
1164        %367 = OpLabel
1165        %368 = OpAccessChain %67 %65 %24 %66
1166        %369 = OpLoad %61 %368
1167        %370 = OpAccessChain %67 %65 %24 %70
1168        %371 = OpLoad %61 %370
1169        %372 = OpFOrdLessThan %40 %369 %371
1170               OpSelectionMerge %378 None
1171               OpBranchConditional %372 %373 %378
1172        %373 = OpLabel
1173               OpBranch %374
1174        %374 = OpLabel
1175               OpLoopMerge %377 %376 None
1176               OpBranch %375
1177        %375 = OpLabel
1178               OpKill
1179        %376 = OpLabel
1180               OpBranch %374
1181        %377 = OpLabel
1182               OpUnreachable
1183        %378 = OpLabel
1184               OpStore %364 %27
1185        %388 = OpAccessChain %8 %47 %27
1186               OpStore %388 %1728
1187               OpBranch %389
1188        %389 = OpLabel
1189        %394 = OpConvertFToS %6 %369
1190        %395 = OpSLessThan %40 %24 %394
1191               OpLoopMerge %398 %397 None
1192               OpBranchConditional %395 %396 %398
1193        %396 = OpLabel
1194               OpBranch %398
1195        %397 = OpLabel
1196               OpBranch %389
1197        %398 = OpLabel
1198       %1499 = OpPhi %40 %1501 %389 %325 %396
1199               OpSelectionMerge %400 None
1200               OpBranchConditional %1499 %429 %400
1201        %400 = OpLabel
1202               OpBranch %405
1203        %405 = OpLabel
1204               OpBranch %427
1205        %427 = OpLabel
1206               OpBranch %428
1207        %428 = OpLabel
1208       %1674 = OpPhi %40 %1501 %401 %1501 %422 %1499 %427
1209       %1671 = OpPhi %6 %404 %401 %425 %422 %1498 %427
1210               OpBranch %351
1211        %429 = OpLabel
1212       %1502 = OpPhi %40 %1501 %351 %1499 %398 %325 %411
1213               OpSelectionMerge %431 None
1214               OpBranchConditional %1502 %432 %431
1215        %431 = OpLabel
1216               OpBranch %432
1217        %432 = OpLabel
1218               OpBranch %197
1219        %197 = OpLabel
1220       %1509 = OpPhi %6 %24 %432 %225 %200
1221               OpLoopMerge %199 %200 None
1222               OpBranch %201
1223        %201 = OpLabel
1224        %206 = OpAccessChain %205 %204 %66
1225        %207 = OpLoad %61 %206
1226        %209 = OpFOrdLessThan %40 %207 %208
1227        %210 = OpLogicalNot %40 %209
1228               OpSelectionMerge %212 None
1229               OpBranchConditional %210 %211 %212
1230        %211 = OpLabel
1231        %214 = OpAccessChain %67 %65 %24 %66
1232        %215 = OpLoad %61 %214
1233        %216 = OpConvertFToS %6 %215
1234        %217 = OpINotEqual %40 %1509 %216
1235               OpBranch %212
1236        %212 = OpLabel
1237        %218 = OpPhi %40 %209 %201 %217 %211
1238               OpBranchConditional %218 %198 %199
1239        %198 = OpLabel
1240               OpSelectionMerge %534 None
1241               OpSwitch %70 %452
1242        %452 = OpLabel
1243               OpBranch %453
1244        %453 = OpLabel
1245       %1662 = OpPhi %40 %322 %452 %1726 %530
1246       %1659 = OpPhi %6 %24 %452 %1723 %530
1247        %457 = OpSLessThanEqual %40 %1659 %30
1248               OpLoopMerge %531 %530 None
1249               OpBranchConditional %457 %458 %531
1250        %458 = OpLabel
1251        %461 = OpAccessChain %9 %47 %1659 %24
1252        %462 = OpLoad %6 %461
1253        %463 = OpSLessThanEqual %40 %219 %462
1254               OpSelectionMerge %529 None
1255               OpBranchConditional %463 %464 %508
1256        %508 = OpLabel
1257        %510 = OpAccessChain %9 %47 %1659 %30
1258        %511 = OpLoad %6 %510
1259        %512 = OpIEqual %40 %511 %28
1260               OpSelectionMerge %528 None
1261               OpBranchConditional %512 %513 %524
1262        %524 = OpLabel
1263        %527 = OpLoad %6 %510
1264               OpBranch %530
1265        %513 = OpLabel
1266               OpStore %510 %30
1267        %523 = OpAccessChain %8 %47 %30
1268               OpStore %523 %1730
1269               OpBranch %531
1270        %528 = OpLabel
1271               OpUnreachable
1272        %464 = OpLabel
1273        %466 = OpAccessChain %9 %47 %1659 %27
1274        %467 = OpLoad %6 %466
1275        %468 = OpIEqual %40 %467 %28
1276               OpSelectionMerge %507 None
1277               OpBranchConditional %468 %469 %503
1278        %503 = OpLabel
1279        %506 = OpLoad %6 %466
1280               OpBranch %530
1281        %469 = OpLabel
1282        %470 = OpAccessChain %67 %65 %24 %66
1283        %471 = OpLoad %61 %470
1284        %472 = OpAccessChain %67 %65 %24 %70
1285        %473 = OpLoad %61 %472
1286        %474 = OpFOrdLessThan %40 %471 %473
1287               OpSelectionMerge %480 None
1288               OpBranchConditional %474 %475 %480
1289        %475 = OpLabel
1290               OpBranch %476
1291        %476 = OpLabel
1292               OpLoopMerge %479 %478 None
1293               OpBranch %477
1294        %477 = OpLabel
1295               OpKill
1296        %478 = OpLabel
1297               OpBranch %476
1298        %479 = OpLabel
1299               OpUnreachable
1300        %480 = OpLabel
1301               OpStore %466 %30
1302        %490 = OpAccessChain %8 %47 %30
1303               OpStore %490 %1730
1304               OpBranch %491
1305        %491 = OpLabel
1306        %496 = OpConvertFToS %6 %471
1307        %497 = OpSLessThan %40 %24 %496
1308               OpLoopMerge %500 %499 None
1309               OpBranchConditional %497 %498 %500
1310        %498 = OpLabel
1311               OpBranch %500
1312        %499 = OpLabel
1313               OpBranch %491
1314        %500 = OpLabel
1315       %1660 = OpPhi %40 %1662 %491 %325 %498
1316               OpSelectionMerge %502 None
1317               OpBranchConditional %1660 %531 %502
1318        %502 = OpLabel
1319               OpBranch %507
1320        %507 = OpLabel
1321               OpBranch %529
1322        %529 = OpLabel
1323               OpBranch %530
1324        %530 = OpLabel
1325       %1726 = OpPhi %40 %1662 %503 %1662 %524 %1660 %529
1326       %1723 = OpPhi %6 %506 %503 %527 %524 %1659 %529
1327               OpBranch %453
1328        %531 = OpLabel
1329       %1663 = OpPhi %40 %1662 %453 %1660 %500 %325 %513
1330               OpSelectionMerge %533 None
1331               OpBranchConditional %1663 %534 %533
1332        %533 = OpLabel
1333               OpBranch %534
1334        %534 = OpLabel
1335               OpBranch %200
1336        %200 = OpLabel
1337        %225 = OpIAdd %6 %1509 %27
1338               OpBranch %197
1339        %199 = OpLabel
1340               OpSelectionMerge %636 None
1341               OpSwitch %70 %554
1342        %554 = OpLabel
1343               OpBranch %555
1344        %555 = OpLabel
1345       %1515 = OpPhi %40 %322 %554 %1685 %632
1346       %1512 = OpPhi %6 %24 %554 %1682 %632
1347        %559 = OpSLessThanEqual %40 %1512 %1729
1348               OpLoopMerge %633 %632 None
1349               OpBranchConditional %559 %560 %633
1350        %560 = OpLabel
1351        %563 = OpAccessChain %9 %47 %1512 %24
1352        %564 = OpLoad %6 %563
1353        %565 = OpSLessThanEqual %40 %228 %564
1354               OpSelectionMerge %631 None
1355               OpBranchConditional %565 %566 %610
1356        %610 = OpLabel
1357        %612 = OpAccessChain %9 %47 %1512 %30
1358        %613 = OpLoad %6 %612
1359        %614 = OpIEqual %40 %613 %28
1360               OpSelectionMerge %630 None
1361               OpBranchConditional %614 %615 %626
1362        %626 = OpLabel
1363        %629 = OpLoad %6 %612
1364               OpBranch %632
1365        %615 = OpLabel
1366               OpStore %612 %1729
1367        %625 = OpAccessChain %8 %47 %1729
1368               OpStore %625 %1731
1369               OpBranch %633
1370        %630 = OpLabel
1371               OpUnreachable
1372        %566 = OpLabel
1373        %568 = OpAccessChain %9 %47 %1512 %27
1374        %569 = OpLoad %6 %568
1375        %570 = OpIEqual %40 %569 %28
1376               OpSelectionMerge %609 None
1377               OpBranchConditional %570 %571 %605
1378        %605 = OpLabel
1379        %608 = OpLoad %6 %568
1380               OpBranch %632
1381        %571 = OpLabel
1382        %572 = OpAccessChain %67 %65 %24 %66
1383        %573 = OpLoad %61 %572
1384        %574 = OpAccessChain %67 %65 %24 %70
1385        %575 = OpLoad %61 %574
1386        %576 = OpFOrdLessThan %40 %573 %575
1387               OpSelectionMerge %582 None
1388               OpBranchConditional %576 %577 %582
1389        %577 = OpLabel
1390               OpBranch %578
1391        %578 = OpLabel
1392               OpLoopMerge %581 %580 None
1393               OpBranch %579
1394        %579 = OpLabel
1395               OpKill
1396        %580 = OpLabel
1397               OpBranch %578
1398        %581 = OpLabel
1399               OpUnreachable
1400        %582 = OpLabel
1401               OpStore %568 %1729
1402        %592 = OpAccessChain %8 %47 %1729
1403               OpStore %592 %1731
1404               OpBranch %593
1405        %593 = OpLabel
1406        %598 = OpConvertFToS %6 %573
1407        %599 = OpSLessThan %40 %24 %598
1408               OpLoopMerge %602 %601 None
1409               OpBranchConditional %599 %600 %602
1410        %600 = OpLabel
1411               OpBranch %602
1412        %601 = OpLabel
1413               OpBranch %593
1414        %602 = OpLabel
1415       %1513 = OpPhi %40 %1515 %593 %325 %600
1416               OpSelectionMerge %604 None
1417               OpBranchConditional %1513 %633 %604
1418        %604 = OpLabel
1419               OpBranch %609
1420        %609 = OpLabel
1421               OpBranch %631
1422        %631 = OpLabel
1423               OpBranch %632
1424        %632 = OpLabel
1425       %1685 = OpPhi %40 %1515 %605 %1515 %626 %1513 %631
1426       %1682 = OpPhi %6 %608 %605 %629 %626 %1512 %631
1427               OpBranch %555
1428        %633 = OpLabel
1429       %1516 = OpPhi %40 %1515 %555 %1513 %602 %325 %615
1430               OpSelectionMerge %635 None
1431               OpBranchConditional %1516 %636 %635
1432        %635 = OpLabel
1433               OpBranch %636
1434        %636 = OpLabel
1435               OpSelectionMerge %738 None
1436               OpSwitch %70 %656
1437        %656 = OpLabel
1438               OpBranch %657
1439        %657 = OpLabel
1440       %1526 = OpPhi %40 %322 %656 %1689 %734
1441       %1523 = OpPhi %6 %24 %656 %1686 %734
1442        %661 = OpSLessThanEqual %40 %1523 %1732
1443               OpLoopMerge %735 %734 None
1444               OpBranchConditional %661 %662 %735
1445        %662 = OpLabel
1446        %665 = OpAccessChain %9 %47 %1523 %24
1447        %666 = OpLoad %6 %665
1448        %667 = OpSLessThanEqual %40 %235 %666
1449               OpSelectionMerge %733 None
1450               OpBranchConditional %667 %668 %712
1451        %712 = OpLabel
1452        %714 = OpAccessChain %9 %47 %1523 %30
1453        %715 = OpLoad %6 %714
1454        %716 = OpIEqual %40 %715 %28
1455               OpSelectionMerge %732 None
1456               OpBranchConditional %716 %717 %728
1457        %728 = OpLabel
1458        %731 = OpLoad %6 %714
1459               OpBranch %734
1460        %717 = OpLabel
1461               OpStore %714 %1732
1462        %727 = OpAccessChain %8 %47 %1732
1463               OpStore %727 %1733
1464               OpBranch %735
1465        %732 = OpLabel
1466               OpUnreachable
1467        %668 = OpLabel
1468        %670 = OpAccessChain %9 %47 %1523 %27
1469        %671 = OpLoad %6 %670
1470        %672 = OpIEqual %40 %671 %28
1471               OpSelectionMerge %711 None
1472               OpBranchConditional %672 %673 %707
1473        %707 = OpLabel
1474        %710 = OpLoad %6 %670
1475               OpBranch %734
1476        %673 = OpLabel
1477        %674 = OpAccessChain %67 %65 %24 %66
1478        %675 = OpLoad %61 %674
1479        %676 = OpAccessChain %67 %65 %24 %70
1480        %677 = OpLoad %61 %676
1481        %678 = OpFOrdLessThan %40 %675 %677
1482               OpSelectionMerge %684 None
1483               OpBranchConditional %678 %679 %684
1484        %679 = OpLabel
1485               OpBranch %680
1486        %680 = OpLabel
1487               OpLoopMerge %683 %682 None
1488               OpBranch %681
1489        %681 = OpLabel
1490               OpKill
1491        %682 = OpLabel
1492               OpBranch %680
1493        %683 = OpLabel
1494               OpUnreachable
1495        %684 = OpLabel
1496               OpStore %670 %1732
1497        %694 = OpAccessChain %8 %47 %1732
1498               OpStore %694 %1733
1499               OpBranch %695
1500        %695 = OpLabel
1501        %700 = OpConvertFToS %6 %675
1502        %701 = OpSLessThan %40 %24 %700
1503               OpLoopMerge %704 %703 None
1504               OpBranchConditional %701 %702 %704
1505        %702 = OpLabel
1506               OpBranch %704
1507        %703 = OpLabel
1508               OpBranch %695
1509        %704 = OpLabel
1510       %1524 = OpPhi %40 %1526 %695 %325 %702
1511               OpSelectionMerge %706 None
1512               OpBranchConditional %1524 %735 %706
1513        %706 = OpLabel
1514               OpBranch %711
1515        %711 = OpLabel
1516               OpBranch %733
1517        %733 = OpLabel
1518               OpBranch %734
1519        %734 = OpLabel
1520       %1689 = OpPhi %40 %1526 %707 %1526 %728 %1524 %733
1521       %1686 = OpPhi %6 %710 %707 %731 %728 %1523 %733
1522               OpBranch %657
1523        %735 = OpLabel
1524       %1527 = OpPhi %40 %1526 %657 %1524 %704 %325 %717
1525               OpSelectionMerge %737 None
1526               OpBranchConditional %1527 %738 %737
1527        %737 = OpLabel
1528               OpBranch %738
1529        %738 = OpLabel
1530               OpSelectionMerge %840 None
1531               OpSwitch %70 %758
1532        %758 = OpLabel
1533               OpBranch %759
1534        %759 = OpLabel
1535       %1537 = OpPhi %40 %322 %758 %1693 %836
1536       %1534 = OpPhi %6 %24 %758 %1690 %836
1537        %763 = OpSLessThanEqual %40 %1534 %189
1538               OpLoopMerge %837 %836 None
1539               OpBranchConditional %763 %764 %837
1540        %764 = OpLabel
1541        %767 = OpAccessChain %9 %47 %1534 %24
1542        %768 = OpLoad %6 %767
1543        %769 = OpSLessThanEqual %40 %242 %768
1544               OpSelectionMerge %835 None
1545               OpBranchConditional %769 %770 %814
1546        %814 = OpLabel
1547        %816 = OpAccessChain %9 %47 %1534 %30
1548        %817 = OpLoad %6 %816
1549        %818 = OpIEqual %40 %817 %28
1550               OpSelectionMerge %834 None
1551               OpBranchConditional %818 %819 %830
1552        %830 = OpLabel
1553        %833 = OpLoad %6 %816
1554               OpBranch %836
1555        %819 = OpLabel
1556               OpStore %816 %189
1557        %829 = OpAccessChain %8 %47 %189
1558               OpStore %829 %1734
1559               OpBranch %837
1560        %834 = OpLabel
1561               OpUnreachable
1562        %770 = OpLabel
1563        %772 = OpAccessChain %9 %47 %1534 %27
1564        %773 = OpLoad %6 %772
1565        %774 = OpIEqual %40 %773 %28
1566               OpSelectionMerge %813 None
1567               OpBranchConditional %774 %775 %809
1568        %809 = OpLabel
1569        %812 = OpLoad %6 %772
1570               OpBranch %836
1571        %775 = OpLabel
1572        %776 = OpAccessChain %67 %65 %24 %66
1573        %777 = OpLoad %61 %776
1574        %778 = OpAccessChain %67 %65 %24 %70
1575        %779 = OpLoad %61 %778
1576        %780 = OpFOrdLessThan %40 %777 %779
1577               OpSelectionMerge %786 None
1578               OpBranchConditional %780 %781 %786
1579        %781 = OpLabel
1580               OpBranch %782
1581        %782 = OpLabel
1582               OpLoopMerge %785 %784 None
1583               OpBranch %783
1584        %783 = OpLabel
1585               OpKill
1586        %784 = OpLabel
1587               OpBranch %782
1588        %785 = OpLabel
1589               OpUnreachable
1590        %786 = OpLabel
1591               OpStore %772 %189
1592        %796 = OpAccessChain %8 %47 %189
1593               OpStore %796 %1734
1594               OpBranch %797
1595        %797 = OpLabel
1596        %802 = OpConvertFToS %6 %777
1597        %803 = OpSLessThan %40 %24 %802
1598               OpLoopMerge %806 %805 None
1599               OpBranchConditional %803 %804 %806
1600        %804 = OpLabel
1601               OpBranch %806
1602        %805 = OpLabel
1603               OpBranch %797
1604        %806 = OpLabel
1605       %1535 = OpPhi %40 %1537 %797 %325 %804
1606               OpSelectionMerge %808 None
1607               OpBranchConditional %1535 %837 %808
1608        %808 = OpLabel
1609               OpBranch %813
1610        %813 = OpLabel
1611               OpBranch %835
1612        %835 = OpLabel
1613               OpBranch %836
1614        %836 = OpLabel
1615       %1693 = OpPhi %40 %1537 %809 %1537 %830 %1535 %835
1616       %1690 = OpPhi %6 %812 %809 %833 %830 %1534 %835
1617               OpBranch %759
1618        %837 = OpLabel
1619       %1538 = OpPhi %40 %1537 %759 %1535 %806 %325 %819
1620               OpSelectionMerge %839 None
1621               OpBranchConditional %1538 %840 %839
1622        %839 = OpLabel
1623               OpBranch %840
1624        %840 = OpLabel
1625               OpSelectionMerge %942 None
1626               OpSwitch %70 %860
1627        %860 = OpLabel
1628               OpBranch %861
1629        %861 = OpLabel
1630       %1548 = OpPhi %40 %322 %860 %1697 %938
1631       %1545 = OpPhi %6 %24 %860 %1694 %938
1632        %865 = OpSLessThanEqual %40 %1545 %255
1633               OpLoopMerge %939 %938 None
1634               OpBranchConditional %865 %866 %939
1635        %866 = OpLabel
1636        %869 = OpAccessChain %9 %47 %1545 %24
1637        %870 = OpLoad %6 %869
1638        %871 = OpSLessThanEqual %40 %30 %870
1639               OpSelectionMerge %937 None
1640               OpBranchConditional %871 %872 %916
1641        %916 = OpLabel
1642        %918 = OpAccessChain %9 %47 %1545 %30
1643        %919 = OpLoad %6 %918
1644        %920 = OpIEqual %40 %919 %28
1645               OpSelectionMerge %936 None
1646               OpBranchConditional %920 %921 %932
1647        %932 = OpLabel
1648        %935 = OpLoad %6 %918
1649               OpBranch %938
1650        %921 = OpLabel
1651               OpStore %918 %255
1652        %931 = OpAccessChain %8 %47 %255
1653               OpStore %931 %1735
1654               OpBranch %939
1655        %936 = OpLabel
1656               OpUnreachable
1657        %872 = OpLabel
1658        %874 = OpAccessChain %9 %47 %1545 %27
1659        %875 = OpLoad %6 %874
1660        %876 = OpIEqual %40 %875 %28
1661               OpSelectionMerge %915 None
1662               OpBranchConditional %876 %877 %911
1663        %911 = OpLabel
1664        %914 = OpLoad %6 %874
1665               OpBranch %938
1666        %877 = OpLabel
1667        %878 = OpAccessChain %67 %65 %24 %66
1668        %879 = OpLoad %61 %878
1669        %880 = OpAccessChain %67 %65 %24 %70
1670        %881 = OpLoad %61 %880
1671        %882 = OpFOrdLessThan %40 %879 %881
1672               OpSelectionMerge %888 None
1673               OpBranchConditional %882 %883 %888
1674        %883 = OpLabel
1675               OpBranch %884
1676        %884 = OpLabel
1677               OpLoopMerge %887 %886 None
1678               OpBranch %885
1679        %885 = OpLabel
1680               OpKill
1681        %886 = OpLabel
1682               OpBranch %884
1683        %887 = OpLabel
1684               OpUnreachable
1685        %888 = OpLabel
1686               OpStore %874 %255
1687        %898 = OpAccessChain %8 %47 %255
1688               OpStore %898 %1735
1689               OpBranch %899
1690        %899 = OpLabel
1691        %904 = OpConvertFToS %6 %879
1692        %905 = OpSLessThan %40 %24 %904
1693               OpLoopMerge %908 %907 None
1694               OpBranchConditional %905 %906 %908
1695        %906 = OpLabel
1696               OpBranch %908
1697        %907 = OpLabel
1698               OpBranch %899
1699        %908 = OpLabel
1700       %1546 = OpPhi %40 %1548 %899 %325 %906
1701               OpSelectionMerge %910 None
1702               OpBranchConditional %1546 %939 %910
1703        %910 = OpLabel
1704               OpBranch %915
1705        %915 = OpLabel
1706               OpBranch %937
1707        %937 = OpLabel
1708               OpBranch %938
1709        %938 = OpLabel
1710       %1697 = OpPhi %40 %1548 %911 %1548 %932 %1546 %937
1711       %1694 = OpPhi %6 %914 %911 %935 %932 %1545 %937
1712               OpBranch %861
1713        %939 = OpLabel
1714       %1549 = OpPhi %40 %1548 %861 %1546 %908 %325 %921
1715               OpSelectionMerge %941 None
1716               OpBranchConditional %1549 %942 %941
1717        %941 = OpLabel
1718               OpBranch %942
1719        %942 = OpLabel
1720               OpSelectionMerge %1044 None
1721               OpSwitch %70 %962
1722        %962 = OpLabel
1723               OpBranch %963
1724        %963 = OpLabel
1725       %1559 = OpPhi %40 %322 %962 %1701 %1040
1726       %1556 = OpPhi %6 %24 %962 %1698 %1040
1727        %967 = OpSLessThanEqual %40 %1556 %235
1728               OpLoopMerge %1041 %1040 None
1729               OpBranchConditional %967 %968 %1041
1730        %968 = OpLabel
1731        %971 = OpAccessChain %9 %47 %1556 %24
1732        %972 = OpLoad %6 %971
1733        %973 = OpSLessThanEqual %40 %255 %972
1734               OpSelectionMerge %1039 None
1735               OpBranchConditional %973 %974 %1018
1736       %1018 = OpLabel
1737       %1020 = OpAccessChain %9 %47 %1556 %30
1738       %1021 = OpLoad %6 %1020
1739       %1022 = OpIEqual %40 %1021 %28
1740               OpSelectionMerge %1038 None
1741               OpBranchConditional %1022 %1023 %1034
1742       %1034 = OpLabel
1743       %1037 = OpLoad %6 %1020
1744               OpBranch %1040
1745       %1023 = OpLabel
1746               OpStore %1020 %235
1747       %1033 = OpAccessChain %8 %47 %235
1748               OpStore %1033 %1736
1749               OpBranch %1041
1750       %1038 = OpLabel
1751               OpUnreachable
1752        %974 = OpLabel
1753        %976 = OpAccessChain %9 %47 %1556 %27
1754        %977 = OpLoad %6 %976
1755        %978 = OpIEqual %40 %977 %28
1756               OpSelectionMerge %1017 None
1757               OpBranchConditional %978 %979 %1013
1758       %1013 = OpLabel
1759       %1016 = OpLoad %6 %976
1760               OpBranch %1040
1761        %979 = OpLabel
1762        %980 = OpAccessChain %67 %65 %24 %66
1763        %981 = OpLoad %61 %980
1764        %982 = OpAccessChain %67 %65 %24 %70
1765        %983 = OpLoad %61 %982
1766        %984 = OpFOrdLessThan %40 %981 %983
1767               OpSelectionMerge %990 None
1768               OpBranchConditional %984 %985 %990
1769        %985 = OpLabel
1770               OpBranch %986
1771        %986 = OpLabel
1772               OpLoopMerge %989 %988 None
1773               OpBranch %987
1774        %987 = OpLabel
1775               OpKill
1776        %988 = OpLabel
1777               OpBranch %986
1778        %989 = OpLabel
1779               OpUnreachable
1780        %990 = OpLabel
1781               OpStore %976 %235
1782       %1000 = OpAccessChain %8 %47 %235
1783               OpStore %1000 %1736
1784               OpBranch %1001
1785       %1001 = OpLabel
1786       %1006 = OpConvertFToS %6 %981
1787       %1007 = OpSLessThan %40 %24 %1006
1788               OpLoopMerge %1010 %1009 None
1789               OpBranchConditional %1007 %1008 %1010
1790       %1008 = OpLabel
1791               OpBranch %1010
1792       %1009 = OpLabel
1793               OpBranch %1001
1794       %1010 = OpLabel
1795       %1557 = OpPhi %40 %1559 %1001 %325 %1008
1796               OpSelectionMerge %1012 None
1797               OpBranchConditional %1557 %1041 %1012
1798       %1012 = OpLabel
1799               OpBranch %1017
1800       %1017 = OpLabel
1801               OpBranch %1039
1802       %1039 = OpLabel
1803               OpBranch %1040
1804       %1040 = OpLabel
1805       %1701 = OpPhi %40 %1559 %1013 %1559 %1034 %1557 %1039
1806       %1698 = OpPhi %6 %1016 %1013 %1037 %1034 %1556 %1039
1807               OpBranch %963
1808       %1041 = OpLabel
1809       %1560 = OpPhi %40 %1559 %963 %1557 %1010 %325 %1023
1810               OpSelectionMerge %1043 None
1811               OpBranchConditional %1560 %1044 %1043
1812       %1043 = OpLabel
1813               OpBranch %1044
1814       %1044 = OpLabel
1815               OpSelectionMerge %1146 None
1816               OpSwitch %70 %1064
1817       %1064 = OpLabel
1818               OpBranch %1065
1819       %1065 = OpLabel
1820       %1570 = OpPhi %40 %322 %1064 %1705 %1142
1821       %1567 = OpPhi %6 %24 %1064 %1702 %1142
1822       %1069 = OpSLessThanEqual %40 %1567 %242
1823               OpLoopMerge %1143 %1142 None
1824               OpBranchConditional %1069 %1070 %1143
1825       %1070 = OpLabel
1826       %1073 = OpAccessChain %9 %47 %1567 %24
1827       %1074 = OpLoad %6 %1073
1828       %1075 = OpSLessThanEqual %40 %262 %1074
1829               OpSelectionMerge %1141 None
1830               OpBranchConditional %1075 %1076 %1120
1831       %1120 = OpLabel
1832       %1122 = OpAccessChain %9 %47 %1567 %30
1833       %1123 = OpLoad %6 %1122
1834       %1124 = OpIEqual %40 %1123 %28
1835               OpSelectionMerge %1140 None
1836               OpBranchConditional %1124 %1125 %1136
1837       %1136 = OpLabel
1838       %1139 = OpLoad %6 %1122
1839               OpBranch %1142
1840       %1125 = OpLabel
1841               OpStore %1122 %242
1842       %1135 = OpAccessChain %8 %47 %242
1843               OpStore %1135 %1737
1844               OpBranch %1143
1845       %1140 = OpLabel
1846               OpUnreachable
1847       %1076 = OpLabel
1848       %1078 = OpAccessChain %9 %47 %1567 %27
1849       %1079 = OpLoad %6 %1078
1850       %1080 = OpIEqual %40 %1079 %28
1851               OpSelectionMerge %1119 None
1852               OpBranchConditional %1080 %1081 %1115
1853       %1115 = OpLabel
1854       %1118 = OpLoad %6 %1078
1855               OpBranch %1142
1856       %1081 = OpLabel
1857       %1082 = OpAccessChain %67 %65 %24 %66
1858       %1083 = OpLoad %61 %1082
1859       %1084 = OpAccessChain %67 %65 %24 %70
1860       %1085 = OpLoad %61 %1084
1861       %1086 = OpFOrdLessThan %40 %1083 %1085
1862               OpSelectionMerge %1092 None
1863               OpBranchConditional %1086 %1087 %1092
1864       %1087 = OpLabel
1865               OpBranch %1088
1866       %1088 = OpLabel
1867               OpLoopMerge %1091 %1090 None
1868               OpBranch %1089
1869       %1089 = OpLabel
1870               OpKill
1871       %1090 = OpLabel
1872               OpBranch %1088
1873       %1091 = OpLabel
1874               OpUnreachable
1875       %1092 = OpLabel
1876               OpStore %1078 %242
1877       %1102 = OpAccessChain %8 %47 %242
1878               OpStore %1102 %1737
1879               OpBranch %1103
1880       %1103 = OpLabel
1881       %1108 = OpConvertFToS %6 %1083
1882       %1109 = OpSLessThan %40 %24 %1108
1883               OpLoopMerge %1112 %1111 None
1884               OpBranchConditional %1109 %1110 %1112
1885       %1110 = OpLabel
1886               OpBranch %1112
1887       %1111 = OpLabel
1888               OpBranch %1103
1889       %1112 = OpLabel
1890       %1568 = OpPhi %40 %1570 %1103 %325 %1110
1891               OpSelectionMerge %1114 None
1892               OpBranchConditional %1568 %1143 %1114
1893       %1114 = OpLabel
1894               OpBranch %1119
1895       %1119 = OpLabel
1896               OpBranch %1141
1897       %1141 = OpLabel
1898               OpBranch %1142
1899       %1142 = OpLabel
1900       %1705 = OpPhi %40 %1570 %1115 %1570 %1136 %1568 %1141
1901       %1702 = OpPhi %6 %1118 %1115 %1139 %1136 %1567 %1141
1902               OpBranch %1065
1903       %1143 = OpLabel
1904       %1571 = OpPhi %40 %1570 %1065 %1568 %1112 %325 %1125
1905               OpSelectionMerge %1145 None
1906               OpBranchConditional %1571 %1146 %1145
1907       %1145 = OpLabel
1908               OpBranch %1146
1909       %1146 = OpLabel
1910               OpSelectionMerge %1248 None
1911               OpSwitch %70 %1166
1912       %1166 = OpLabel
1913               OpBranch %1167
1914       %1167 = OpLabel
1915       %1581 = OpPhi %40 %322 %1166 %1709 %1244
1916       %1578 = OpPhi %6 %24 %1166 %1706 %1244
1917       %1171 = OpSLessThanEqual %40 %1578 %179
1918               OpLoopMerge %1245 %1244 None
1919               OpBranchConditional %1171 %1172 %1245
1920       %1172 = OpLabel
1921       %1175 = OpAccessChain %9 %47 %1578 %24
1922       %1176 = OpLoad %6 %1175
1923       %1177 = OpSLessThanEqual %40 %269 %1176
1924               OpSelectionMerge %1243 None
1925               OpBranchConditional %1177 %1178 %1222
1926       %1222 = OpLabel
1927       %1224 = OpAccessChain %9 %47 %1578 %30
1928       %1225 = OpLoad %6 %1224
1929       %1226 = OpIEqual %40 %1225 %28
1930               OpSelectionMerge %1242 None
1931               OpBranchConditional %1226 %1227 %1238
1932       %1238 = OpLabel
1933       %1241 = OpLoad %6 %1224
1934               OpBranch %1244
1935       %1227 = OpLabel
1936               OpStore %1224 %179
1937       %1237 = OpAccessChain %8 %47 %179
1938               OpStore %1237 %1738
1939               OpBranch %1245
1940       %1242 = OpLabel
1941               OpUnreachable
1942       %1178 = OpLabel
1943       %1180 = OpAccessChain %9 %47 %1578 %27
1944       %1181 = OpLoad %6 %1180
1945       %1182 = OpIEqual %40 %1181 %28
1946               OpSelectionMerge %1221 None
1947               OpBranchConditional %1182 %1183 %1217
1948       %1217 = OpLabel
1949       %1220 = OpLoad %6 %1180
1950               OpBranch %1244
1951       %1183 = OpLabel
1952       %1184 = OpAccessChain %67 %65 %24 %66
1953       %1185 = OpLoad %61 %1184
1954       %1186 = OpAccessChain %67 %65 %24 %70
1955       %1187 = OpLoad %61 %1186
1956       %1188 = OpFOrdLessThan %40 %1185 %1187
1957               OpSelectionMerge %1194 None
1958               OpBranchConditional %1188 %1189 %1194
1959       %1189 = OpLabel
1960               OpBranch %1190
1961       %1190 = OpLabel
1962               OpLoopMerge %1193 %1192 None
1963               OpBranch %1191
1964       %1191 = OpLabel
1965               OpKill
1966       %1192 = OpLabel
1967               OpBranch %1190
1968       %1193 = OpLabel
1969               OpUnreachable
1970       %1194 = OpLabel
1971               OpStore %1180 %179
1972       %1204 = OpAccessChain %8 %47 %179
1973               OpStore %1204 %1738
1974               OpBranch %1205
1975       %1205 = OpLabel
1976       %1210 = OpConvertFToS %6 %1185
1977       %1211 = OpSLessThan %40 %24 %1210
1978               OpLoopMerge %1214 %1213 None
1979               OpBranchConditional %1211 %1212 %1214
1980       %1212 = OpLabel
1981               OpBranch %1214
1982       %1213 = OpLabel
1983               OpBranch %1205
1984       %1214 = OpLabel
1985       %1579 = OpPhi %40 %1581 %1205 %325 %1212
1986               OpSelectionMerge %1216 None
1987               OpBranchConditional %1579 %1245 %1216
1988       %1216 = OpLabel
1989               OpBranch %1221
1990       %1221 = OpLabel
1991               OpBranch %1243
1992       %1243 = OpLabel
1993               OpBranch %1244
1994       %1244 = OpLabel
1995       %1709 = OpPhi %40 %1581 %1217 %1581 %1238 %1579 %1243
1996       %1706 = OpPhi %6 %1220 %1217 %1241 %1238 %1578 %1243
1997               OpBranch %1167
1998       %1245 = OpLabel
1999       %1582 = OpPhi %40 %1581 %1167 %1579 %1214 %325 %1227
2000               OpSelectionMerge %1247 None
2001               OpBranchConditional %1582 %1248 %1247
2002       %1247 = OpLabel
2003               OpBranch %1248
2004       %1248 = OpLabel
2005               OpBranch %276
2006        %276 = OpLabel
2007       %1593 = OpPhi %6 %1620 %1248 %1590 %279
2008       %1584 = OpPhi %6 %24 %1248 %1710 %279
2009       %1583 = OpPhi %6 %24 %1248 %309 %279
2010        %283 = OpSLessThan %40 %1583 %282
2011               OpLoopMerge %278 %279 None
2012               OpBranchConditional %283 %277 %278
2013        %277 = OpLabel
2014               OpSelectionMerge %1299 None
2015               OpSwitch %70 %1267
2016       %1267 = OpLabel
2017               OpBranch %1268
2018       %1268 = OpLabel
2019       %1585 = OpPhi %6 %24 %1267 %1739 %1295
2020       %1271 = OpINotEqual %40 %1585 %28
2021               OpLoopMerge %1296 %1295 None
2022               OpBranchConditional %1271 %1272 %1296
2023       %1272 = OpLabel
2024       %1274 = OpAccessChain %8 %47 %1585
2025       %1275 = OpLoad %7 %1274
2026       %1305 = OpCompositeExtract %6 %1275 0
2027       %1306 = OpCompositeExtract %6 %1275 1
2028       %1307 = OpCompositeExtract %6 %1275 2
2029       %1279 = OpIEqual %40 %1305 %1583
2030               OpSelectionMerge %1282 None
2031               OpBranchConditional %1279 %1280 %1282
2032       %1280 = OpLabel
2033               OpBranch %1296
2034       %1282 = OpLabel
2035       %1286 = OpSGreaterThan %40 %1583 %1305
2036       %1739 = OpSelect %6 %1286 %1307 %1306
2037               OpBranch %1295
2038       %1295 = OpLabel
2039               OpBranch %1268
2040       %1296 = OpLabel
2041       %1591 = OpPhi %6 %1593 %1268 %1583 %1280
2042       %1587 = OpPhi %40 %322 %1268 %325 %1280
2043               OpSelectionMerge %1298 None
2044               OpBranchConditional %1587 %1299 %1298
2045       %1298 = OpLabel
2046               OpBranch %1299
2047       %1299 = OpLabel
2048       %1590 = OpPhi %6 %1591 %1296 %28 %1298
2049               OpSelectionMerge %291 None
2050               OpSwitch %1583 %290 9 %289 5 %289 12 %289 15 %289 7 %289 8 %289 2 %289 6 %289 17 %289 13 %289
2051        %289 = OpLabel
2052        %294 = OpIEqual %40 %1590 %1583
2053               OpSelectionMerge %296 None
2054               OpBranchConditional %294 %295 %296
2055        %295 = OpLabel
2056        %298 = OpIAdd %6 %1584 %27
2057               OpBranch %296
2058        %296 = OpLabel
2059       %1712 = OpPhi %6 %1584 %289 %298 %295
2060               OpBranch %291
2061        %290 = OpLabel
2062        %301 = OpIEqual %40 %1590 %28
2063               OpSelectionMerge %303 None
2064               OpBranchConditional %301 %302 %303
2065        %302 = OpLabel
2066        %305 = OpIAdd %6 %1584 %27
2067               OpBranch %303
2068        %303 = OpLabel
2069       %1711 = OpPhi %6 %1584 %290 %305 %302
2070               OpBranch %291
2071        %291 = OpLabel
2072       %1710 = OpPhi %6 %1711 %303 %1712 %296
2073               OpBranch %279
2074        %279 = OpLabel
2075        %309 = OpIAdd %6 %1583 %27
2076               OpBranch %276
2077        %278 = OpLabel
2078        %311 = OpIEqual %40 %1584 %282
2079               OpSelectionMerge %313 None
2080               OpBranchConditional %311 %312 %318
2081        %318 = OpLabel
2082               OpStore %315 %319
2083               OpBranch %313
2084        %312 = OpLabel
2085               OpStore %315 %317
2086               OpBranch %313
2087        %313 = OpLabel
2088               OpReturn
2089               OpFunctionEnd
2090END
2091
2092# uniforms for variant
2093
2094# injectionSwitch
2095BUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA
2096 0.0 1.0
2097END
2098
2099BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
2100
2101PIPELINE graphics variant_pipeline
2102  ATTACH variant_vertex_shader
2103  ATTACH variant_fragment_shader
2104  FRAMEBUFFER_SIZE 256 256
2105  BIND BUFFER variant_framebuffer AS color LOCATION 0
2106  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
2107END
2108CLEAR_COLOR variant_pipeline 0 0 0 255
2109
2110CLEAR variant_pipeline
2111RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
2112
2113EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
2114