• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!amber
2
3# Copyright 2021 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 coverage-gap found by the GraphicsFuzz project.
19
20# Short description: A fragment shader that covers specific BRW code paths
21
22# The test passes because the shader always writes red.
23
24# Optimized using spirv-opt with the following arguments:
25# '-Os'
26# spirv-opt commit hash: a0370efd589be33d5d9a85cfde2f85841b3755af
27
28
29
30SHADER vertex variant_vertex_shader PASSTHROUGH
31
32# variant_fragment_shader is derived from the following GLSL:
33# #version 320 es
34#
35# precision highp float;
36# precision highp int;
37#
38# const int _GLF_global_loop_bound = 100;
39# int _GLF_global_loop_count = 0;
40#
41# layout(location = 0) out vec4 _GLF_color;
42#
43# struct S
44# {
45#     int data[10];
46# };
47#
48# int func(S obj)
49# {
50#     int x = 0;
51#
52#     // Five more iterations as the global loop count has already
53#     // reached its limit.
54#     while(_GLF_global_loop_count < _GLF_global_loop_bound + 5)
55#     {
56#         _GLF_global_loop_count ++;
57#
58#         // Checks if the first five elements are set to the
59#         // correct value inside the inner loop in the main
60#         // function. Return zero if the check fails.
61#         if (obj.data[x] != x)
62#             return 0;
63#
64#         x++;
65#     }
66#
67#     // Return 1 when the check passes.
68#     return 1;
69# }
70#
71# // Global loop counter incrementation cannot be inside the for loop (along with i++) for the coverage points to trigger.
72# #define LOOP _GLF_global_loop_count++; for(int i = 0; i < 5 && _GLF_global_loop_count < _GLF_global_loop_bound; i++)
73#
74# void main()
75# {
76#     S obj = S(int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
77#
78#     LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP {
79#     LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP {
80#     LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP {
81#         // Sets the first five elements to 0, 1, 2, 3, 4.
82#         obj.data[i] = i;
83#     } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } }
84#
85#     int a = 0;
86#     // Always true.
87#     if(gl_FragCoord.y > 0.0)
88#         a = func(obj);
89#
90#     // Always true.
91#     if (a == 1)
92#         _GLF_color = vec4(1, 0, 0, 1);
93#     else
94#         _GLF_color = vec4(0);
95# }
96SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
97; SPIR-V
98; Version: 1.0
99; Generator: Khronos Glslang Reference Front End; 10
100; Bound: 836
101; Schema: 0
102               OpCapability Shader
103          %1 = OpExtInstImport "GLSL.std.450"
104               OpMemoryModel Logical GLSL450
105               OpEntryPoint Fragment %4 "main" %642 %659
106               OpExecutionMode %4 OriginUpperLeft
107               OpSource ESSL 320
108               OpName %4 "main"
109               OpName %642 "gl_FragCoord"
110               OpName %659 "_GLF_color"
111               OpDecorate %642 BuiltIn FragCoord
112               OpDecorate %659 Location 0
113          %2 = OpTypeVoid
114          %3 = OpTypeFunction %2
115          %6 = OpTypeInt 32 1
116          %7 = OpTypeInt 32 0
117          %8 = OpConstant %7 10
118          %9 = OpTypeArray %6 %8
119         %18 = OpConstant %6 0
120         %19 = OpTypePointer Function %6
121         %27 = OpConstant %6 105
122         %28 = OpTypeBool
123         %31 = OpConstant %6 1
124         %46 = OpConstantComposite %9 %18 %18 %18 %18 %18 %18 %18 %18 %18 %18
125         %57 = OpConstant %6 5
126         %60 = OpConstant %6 100
127        %639 = OpTypeFloat 32
128        %640 = OpTypeVector %639 4
129        %641 = OpTypePointer Input %640
130        %642 = OpVariable %641 Input
131        %643 = OpConstant %7 1
132        %644 = OpTypePointer Input %639
133        %647 = OpConstant %639 0
134        %658 = OpTypePointer Output %640
135        %659 = OpVariable %658 Output
136        %660 = OpConstant %639 1
137        %661 = OpConstantComposite %640 %660 %647 %647 %660
138        %663 = OpConstantComposite %640 %647 %647 %647 %647
139        %668 = OpConstant %7 0
140        %669 = OpConstantFalse %28
141        %672 = OpConstantTrue %28
142        %703 = OpTypePointer Function %9
143        %722 = OpUndef %6
144          %4 = OpFunction %2 None %3
145          %5 = OpLabel
146        %709 = OpVariable %703 Function
147        %704 = OpVariable %703 Function
148               OpStore %704 %46
149               OpBranch %51
150         %51 = OpLabel
151        %713 = OpPhi %6 %31 %5 %725 %54
152        %712 = OpPhi %6 %18 %5 %637 %54
153         %58 = OpSLessThan %28 %712 %57
154         %61 = OpSLessThan %28 %713 %60
155         %62 = OpLogicalAnd %28 %58 %61
156               OpLoopMerge %53 %54 None
157               OpBranchConditional %62 %52 %53
158         %52 = OpLabel
159         %64 = OpIAdd %6 %713 %31
160               OpBranch %66
161         %66 = OpLabel
162        %725 = OpPhi %6 %64 %52 %728 %69
163        %724 = OpPhi %6 %18 %52 %635 %69
164         %72 = OpSLessThan %28 %724 %57
165         %74 = OpSLessThan %28 %725 %60
166         %75 = OpLogicalAnd %28 %72 %74
167               OpLoopMerge %68 %69 None
168               OpBranchConditional %75 %67 %68
169         %67 = OpLabel
170         %77 = OpIAdd %6 %725 %31
171               OpBranch %79
172         %79 = OpLabel
173        %728 = OpPhi %6 %77 %67 %731 %82
174        %727 = OpPhi %6 %18 %67 %633 %82
175         %85 = OpSLessThan %28 %727 %57
176         %87 = OpSLessThan %28 %728 %60
177         %88 = OpLogicalAnd %28 %85 %87
178               OpLoopMerge %81 %82 None
179               OpBranchConditional %88 %80 %81
180         %80 = OpLabel
181         %90 = OpIAdd %6 %728 %31
182               OpBranch %92
183         %92 = OpLabel
184        %731 = OpPhi %6 %90 %80 %734 %95
185        %730 = OpPhi %6 %18 %80 %631 %95
186         %98 = OpSLessThan %28 %730 %57
187        %100 = OpSLessThan %28 %731 %60
188        %101 = OpLogicalAnd %28 %98 %100
189               OpLoopMerge %94 %95 None
190               OpBranchConditional %101 %93 %94
191         %93 = OpLabel
192        %103 = OpIAdd %6 %731 %31
193               OpBranch %105
194        %105 = OpLabel
195        %734 = OpPhi %6 %103 %93 %737 %108
196        %733 = OpPhi %6 %18 %93 %629 %108
197        %111 = OpSLessThan %28 %733 %57
198        %113 = OpSLessThan %28 %734 %60
199        %114 = OpLogicalAnd %28 %111 %113
200               OpLoopMerge %107 %108 None
201               OpBranchConditional %114 %106 %107
202        %106 = OpLabel
203        %116 = OpIAdd %6 %734 %31
204               OpBranch %118
205        %118 = OpLabel
206        %737 = OpPhi %6 %116 %106 %740 %121
207        %736 = OpPhi %6 %18 %106 %627 %121
208        %124 = OpSLessThan %28 %736 %57
209        %126 = OpSLessThan %28 %737 %60
210        %127 = OpLogicalAnd %28 %124 %126
211               OpLoopMerge %120 %121 None
212               OpBranchConditional %127 %119 %120
213        %119 = OpLabel
214        %129 = OpIAdd %6 %737 %31
215               OpBranch %131
216        %131 = OpLabel
217        %740 = OpPhi %6 %129 %119 %743 %134
218        %739 = OpPhi %6 %18 %119 %625 %134
219        %137 = OpSLessThan %28 %739 %57
220        %139 = OpSLessThan %28 %740 %60
221        %140 = OpLogicalAnd %28 %137 %139
222               OpLoopMerge %133 %134 None
223               OpBranchConditional %140 %132 %133
224        %132 = OpLabel
225        %142 = OpIAdd %6 %740 %31
226               OpBranch %144
227        %144 = OpLabel
228        %743 = OpPhi %6 %142 %132 %746 %147
229        %742 = OpPhi %6 %18 %132 %623 %147
230        %150 = OpSLessThan %28 %742 %57
231        %152 = OpSLessThan %28 %743 %60
232        %153 = OpLogicalAnd %28 %150 %152
233               OpLoopMerge %146 %147 None
234               OpBranchConditional %153 %145 %146
235        %145 = OpLabel
236        %155 = OpIAdd %6 %743 %31
237               OpBranch %157
238        %157 = OpLabel
239        %746 = OpPhi %6 %155 %145 %749 %160
240        %745 = OpPhi %6 %18 %145 %621 %160
241        %163 = OpSLessThan %28 %745 %57
242        %165 = OpSLessThan %28 %746 %60
243        %166 = OpLogicalAnd %28 %163 %165
244               OpLoopMerge %159 %160 None
245               OpBranchConditional %166 %158 %159
246        %158 = OpLabel
247        %168 = OpIAdd %6 %746 %31
248               OpBranch %170
249        %170 = OpLabel
250        %749 = OpPhi %6 %168 %158 %752 %173
251        %748 = OpPhi %6 %18 %158 %619 %173
252        %176 = OpSLessThan %28 %748 %57
253        %178 = OpSLessThan %28 %749 %60
254        %179 = OpLogicalAnd %28 %176 %178
255               OpLoopMerge %172 %173 None
256               OpBranchConditional %179 %171 %172
257        %171 = OpLabel
258        %181 = OpIAdd %6 %749 %31
259               OpBranch %183
260        %183 = OpLabel
261        %752 = OpPhi %6 %181 %171 %755 %186
262        %751 = OpPhi %6 %18 %171 %617 %186
263        %189 = OpSLessThan %28 %751 %57
264        %191 = OpSLessThan %28 %752 %60
265        %192 = OpLogicalAnd %28 %189 %191
266               OpLoopMerge %185 %186 None
267               OpBranchConditional %192 %184 %185
268        %184 = OpLabel
269        %194 = OpIAdd %6 %752 %31
270               OpBranch %196
271        %196 = OpLabel
272        %755 = OpPhi %6 %194 %184 %758 %199
273        %754 = OpPhi %6 %18 %184 %615 %199
274        %202 = OpSLessThan %28 %754 %57
275        %204 = OpSLessThan %28 %755 %60
276        %205 = OpLogicalAnd %28 %202 %204
277               OpLoopMerge %198 %199 None
278               OpBranchConditional %205 %197 %198
279        %197 = OpLabel
280        %207 = OpIAdd %6 %755 %31
281               OpBranch %209
282        %209 = OpLabel
283        %758 = OpPhi %6 %207 %197 %761 %212
284        %757 = OpPhi %6 %18 %197 %613 %212
285        %215 = OpSLessThan %28 %757 %57
286        %217 = OpSLessThan %28 %758 %60
287        %218 = OpLogicalAnd %28 %215 %217
288               OpLoopMerge %211 %212 None
289               OpBranchConditional %218 %210 %211
290        %210 = OpLabel
291        %220 = OpIAdd %6 %758 %31
292               OpBranch %222
293        %222 = OpLabel
294        %761 = OpPhi %6 %220 %210 %764 %225
295        %760 = OpPhi %6 %18 %210 %611 %225
296        %228 = OpSLessThan %28 %760 %57
297        %230 = OpSLessThan %28 %761 %60
298        %231 = OpLogicalAnd %28 %228 %230
299               OpLoopMerge %224 %225 None
300               OpBranchConditional %231 %223 %224
301        %223 = OpLabel
302        %233 = OpIAdd %6 %761 %31
303               OpBranch %235
304        %235 = OpLabel
305        %764 = OpPhi %6 %233 %223 %767 %238
306        %763 = OpPhi %6 %18 %223 %609 %238
307        %241 = OpSLessThan %28 %763 %57
308        %243 = OpSLessThan %28 %764 %60
309        %244 = OpLogicalAnd %28 %241 %243
310               OpLoopMerge %237 %238 None
311               OpBranchConditional %244 %236 %237
312        %236 = OpLabel
313        %246 = OpIAdd %6 %764 %31
314               OpBranch %248
315        %248 = OpLabel
316        %767 = OpPhi %6 %246 %236 %770 %251
317        %766 = OpPhi %6 %18 %236 %607 %251
318        %254 = OpSLessThan %28 %766 %57
319        %256 = OpSLessThan %28 %767 %60
320        %257 = OpLogicalAnd %28 %254 %256
321               OpLoopMerge %250 %251 None
322               OpBranchConditional %257 %249 %250
323        %249 = OpLabel
324        %259 = OpIAdd %6 %767 %31
325               OpBranch %261
326        %261 = OpLabel
327        %770 = OpPhi %6 %259 %249 %773 %264
328        %769 = OpPhi %6 %18 %249 %605 %264
329        %267 = OpSLessThan %28 %769 %57
330        %269 = OpSLessThan %28 %770 %60
331        %270 = OpLogicalAnd %28 %267 %269
332               OpLoopMerge %263 %264 None
333               OpBranchConditional %270 %262 %263
334        %262 = OpLabel
335        %272 = OpIAdd %6 %770 %31
336               OpBranch %274
337        %274 = OpLabel
338        %773 = OpPhi %6 %272 %262 %776 %277
339        %772 = OpPhi %6 %18 %262 %603 %277
340        %280 = OpSLessThan %28 %772 %57
341        %282 = OpSLessThan %28 %773 %60
342        %283 = OpLogicalAnd %28 %280 %282
343               OpLoopMerge %276 %277 None
344               OpBranchConditional %283 %275 %276
345        %275 = OpLabel
346        %285 = OpIAdd %6 %773 %31
347               OpBranch %287
348        %287 = OpLabel
349        %776 = OpPhi %6 %285 %275 %779 %290
350        %775 = OpPhi %6 %18 %275 %601 %290
351        %293 = OpSLessThan %28 %775 %57
352        %295 = OpSLessThan %28 %776 %60
353        %296 = OpLogicalAnd %28 %293 %295
354               OpLoopMerge %289 %290 None
355               OpBranchConditional %296 %288 %289
356        %288 = OpLabel
357        %298 = OpIAdd %6 %776 %31
358               OpBranch %300
359        %300 = OpLabel
360        %779 = OpPhi %6 %298 %288 %782 %303
361        %778 = OpPhi %6 %18 %288 %599 %303
362        %306 = OpSLessThan %28 %778 %57
363        %308 = OpSLessThan %28 %779 %60
364        %309 = OpLogicalAnd %28 %306 %308
365               OpLoopMerge %302 %303 None
366               OpBranchConditional %309 %301 %302
367        %301 = OpLabel
368        %311 = OpIAdd %6 %779 %31
369               OpBranch %313
370        %313 = OpLabel
371        %782 = OpPhi %6 %311 %301 %785 %316
372        %781 = OpPhi %6 %18 %301 %597 %316
373        %319 = OpSLessThan %28 %781 %57
374        %321 = OpSLessThan %28 %782 %60
375        %322 = OpLogicalAnd %28 %319 %321
376               OpLoopMerge %315 %316 None
377               OpBranchConditional %322 %314 %315
378        %314 = OpLabel
379        %324 = OpIAdd %6 %782 %31
380               OpBranch %326
381        %326 = OpLabel
382        %785 = OpPhi %6 %324 %314 %788 %329
383        %784 = OpPhi %6 %18 %314 %595 %329
384        %332 = OpSLessThan %28 %784 %57
385        %334 = OpSLessThan %28 %785 %60
386        %335 = OpLogicalAnd %28 %332 %334
387               OpLoopMerge %328 %329 None
388               OpBranchConditional %335 %327 %328
389        %327 = OpLabel
390        %337 = OpIAdd %6 %785 %31
391               OpBranch %339
392        %339 = OpLabel
393        %788 = OpPhi %6 %337 %327 %791 %342
394        %787 = OpPhi %6 %18 %327 %593 %342
395        %345 = OpSLessThan %28 %787 %57
396        %347 = OpSLessThan %28 %788 %60
397        %348 = OpLogicalAnd %28 %345 %347
398               OpLoopMerge %341 %342 None
399               OpBranchConditional %348 %340 %341
400        %340 = OpLabel
401        %350 = OpIAdd %6 %788 %31
402               OpBranch %352
403        %352 = OpLabel
404        %791 = OpPhi %6 %350 %340 %794 %355
405        %790 = OpPhi %6 %18 %340 %591 %355
406        %358 = OpSLessThan %28 %790 %57
407        %360 = OpSLessThan %28 %791 %60
408        %361 = OpLogicalAnd %28 %358 %360
409               OpLoopMerge %354 %355 None
410               OpBranchConditional %361 %353 %354
411        %353 = OpLabel
412        %363 = OpIAdd %6 %791 %31
413               OpBranch %365
414        %365 = OpLabel
415        %794 = OpPhi %6 %363 %353 %797 %368
416        %793 = OpPhi %6 %18 %353 %589 %368
417        %371 = OpSLessThan %28 %793 %57
418        %373 = OpSLessThan %28 %794 %60
419        %374 = OpLogicalAnd %28 %371 %373
420               OpLoopMerge %367 %368 None
421               OpBranchConditional %374 %366 %367
422        %366 = OpLabel
423        %376 = OpIAdd %6 %794 %31
424               OpBranch %378
425        %378 = OpLabel
426        %797 = OpPhi %6 %376 %366 %800 %381
427        %796 = OpPhi %6 %18 %366 %587 %381
428        %384 = OpSLessThan %28 %796 %57
429        %386 = OpSLessThan %28 %797 %60
430        %387 = OpLogicalAnd %28 %384 %386
431               OpLoopMerge %380 %381 None
432               OpBranchConditional %387 %379 %380
433        %379 = OpLabel
434        %389 = OpIAdd %6 %797 %31
435               OpBranch %391
436        %391 = OpLabel
437        %800 = OpPhi %6 %389 %379 %803 %394
438        %799 = OpPhi %6 %18 %379 %585 %394
439        %397 = OpSLessThan %28 %799 %57
440        %399 = OpSLessThan %28 %800 %60
441        %400 = OpLogicalAnd %28 %397 %399
442               OpLoopMerge %393 %394 None
443               OpBranchConditional %400 %392 %393
444        %392 = OpLabel
445        %402 = OpIAdd %6 %800 %31
446               OpBranch %404
447        %404 = OpLabel
448        %803 = OpPhi %6 %402 %392 %806 %407
449        %802 = OpPhi %6 %18 %392 %583 %407
450        %410 = OpSLessThan %28 %802 %57
451        %412 = OpSLessThan %28 %803 %60
452        %413 = OpLogicalAnd %28 %410 %412
453               OpLoopMerge %406 %407 None
454               OpBranchConditional %413 %405 %406
455        %405 = OpLabel
456        %415 = OpIAdd %6 %803 %31
457               OpBranch %417
458        %417 = OpLabel
459        %806 = OpPhi %6 %415 %405 %809 %420
460        %805 = OpPhi %6 %18 %405 %581 %420
461        %423 = OpSLessThan %28 %805 %57
462        %425 = OpSLessThan %28 %806 %60
463        %426 = OpLogicalAnd %28 %423 %425
464               OpLoopMerge %419 %420 None
465               OpBranchConditional %426 %418 %419
466        %418 = OpLabel
467        %428 = OpIAdd %6 %806 %31
468               OpBranch %430
469        %430 = OpLabel
470        %809 = OpPhi %6 %428 %418 %812 %433
471        %808 = OpPhi %6 %18 %418 %579 %433
472        %436 = OpSLessThan %28 %808 %57
473        %438 = OpSLessThan %28 %809 %60
474        %439 = OpLogicalAnd %28 %436 %438
475               OpLoopMerge %432 %433 None
476               OpBranchConditional %439 %431 %432
477        %431 = OpLabel
478        %441 = OpIAdd %6 %809 %31
479               OpBranch %443
480        %443 = OpLabel
481        %812 = OpPhi %6 %441 %431 %815 %446
482        %811 = OpPhi %6 %18 %431 %577 %446
483        %449 = OpSLessThan %28 %811 %57
484        %451 = OpSLessThan %28 %812 %60
485        %452 = OpLogicalAnd %28 %449 %451
486               OpLoopMerge %445 %446 None
487               OpBranchConditional %452 %444 %445
488        %444 = OpLabel
489        %454 = OpIAdd %6 %812 %31
490               OpBranch %456
491        %456 = OpLabel
492        %815 = OpPhi %6 %454 %444 %818 %459
493        %814 = OpPhi %6 %18 %444 %575 %459
494        %462 = OpSLessThan %28 %814 %57
495        %464 = OpSLessThan %28 %815 %60
496        %465 = OpLogicalAnd %28 %462 %464
497               OpLoopMerge %458 %459 None
498               OpBranchConditional %465 %457 %458
499        %457 = OpLabel
500        %467 = OpIAdd %6 %815 %31
501               OpBranch %469
502        %469 = OpLabel
503        %818 = OpPhi %6 %467 %457 %821 %472
504        %817 = OpPhi %6 %18 %457 %573 %472
505        %475 = OpSLessThan %28 %817 %57
506        %477 = OpSLessThan %28 %818 %60
507        %478 = OpLogicalAnd %28 %475 %477
508               OpLoopMerge %471 %472 None
509               OpBranchConditional %478 %470 %471
510        %470 = OpLabel
511        %480 = OpIAdd %6 %818 %31
512               OpBranch %482
513        %482 = OpLabel
514        %821 = OpPhi %6 %480 %470 %824 %485
515        %820 = OpPhi %6 %18 %470 %571 %485
516        %488 = OpSLessThan %28 %820 %57
517        %490 = OpSLessThan %28 %821 %60
518        %491 = OpLogicalAnd %28 %488 %490
519               OpLoopMerge %484 %485 None
520               OpBranchConditional %491 %483 %484
521        %483 = OpLabel
522        %493 = OpIAdd %6 %821 %31
523               OpBranch %495
524        %495 = OpLabel
525        %824 = OpPhi %6 %493 %483 %827 %498
526        %823 = OpPhi %6 %18 %483 %569 %498
527        %501 = OpSLessThan %28 %823 %57
528        %503 = OpSLessThan %28 %824 %60
529        %504 = OpLogicalAnd %28 %501 %503
530               OpLoopMerge %497 %498 None
531               OpBranchConditional %504 %496 %497
532        %496 = OpLabel
533        %506 = OpIAdd %6 %824 %31
534               OpBranch %508
535        %508 = OpLabel
536        %827 = OpPhi %6 %506 %496 %830 %511
537        %826 = OpPhi %6 %18 %496 %567 %511
538        %514 = OpSLessThan %28 %826 %57
539        %516 = OpSLessThan %28 %827 %60
540        %517 = OpLogicalAnd %28 %514 %516
541               OpLoopMerge %510 %511 None
542               OpBranchConditional %517 %509 %510
543        %509 = OpLabel
544        %519 = OpIAdd %6 %827 %31
545               OpBranch %521
546        %521 = OpLabel
547        %830 = OpPhi %6 %519 %509 %833 %524
548        %829 = OpPhi %6 %18 %509 %565 %524
549        %527 = OpSLessThan %28 %829 %57
550        %529 = OpSLessThan %28 %830 %60
551        %530 = OpLogicalAnd %28 %527 %529
552               OpLoopMerge %523 %524 None
553               OpBranchConditional %530 %522 %523
554        %522 = OpLabel
555        %532 = OpIAdd %6 %830 %31
556               OpBranch %534
557        %534 = OpLabel
558        %833 = OpPhi %6 %532 %522 %545 %537
559        %832 = OpPhi %6 %18 %522 %563 %537
560        %540 = OpSLessThan %28 %832 %57
561        %542 = OpSLessThan %28 %833 %60
562        %543 = OpLogicalAnd %28 %540 %542
563               OpLoopMerge %536 %537 None
564               OpBranchConditional %543 %535 %536
565        %535 = OpLabel
566        %545 = OpIAdd %6 %833 %31
567               OpBranch %547
568        %547 = OpLabel
569        %835 = OpPhi %6 %18 %535 %561 %548
570        %553 = OpSLessThan %28 %835 %57
571        %555 = OpSLessThan %28 %545 %60
572        %556 = OpLogicalAnd %28 %553 %555
573               OpLoopMerge %549 %548 None
574               OpBranchConditional %556 %548 %549
575        %548 = OpLabel
576        %706 = OpAccessChain %19 %704 %835
577               OpStore %706 %835
578        %561 = OpIAdd %6 %835 %31
579               OpBranch %547
580        %549 = OpLabel
581               OpBranch %537
582        %537 = OpLabel
583        %563 = OpIAdd %6 %832 %31
584               OpBranch %534
585        %536 = OpLabel
586               OpBranch %524
587        %524 = OpLabel
588        %565 = OpIAdd %6 %829 %31
589               OpBranch %521
590        %523 = OpLabel
591               OpBranch %511
592        %511 = OpLabel
593        %567 = OpIAdd %6 %826 %31
594               OpBranch %508
595        %510 = OpLabel
596               OpBranch %498
597        %498 = OpLabel
598        %569 = OpIAdd %6 %823 %31
599               OpBranch %495
600        %497 = OpLabel
601               OpBranch %485
602        %485 = OpLabel
603        %571 = OpIAdd %6 %820 %31
604               OpBranch %482
605        %484 = OpLabel
606               OpBranch %472
607        %472 = OpLabel
608        %573 = OpIAdd %6 %817 %31
609               OpBranch %469
610        %471 = OpLabel
611               OpBranch %459
612        %459 = OpLabel
613        %575 = OpIAdd %6 %814 %31
614               OpBranch %456
615        %458 = OpLabel
616               OpBranch %446
617        %446 = OpLabel
618        %577 = OpIAdd %6 %811 %31
619               OpBranch %443
620        %445 = OpLabel
621               OpBranch %433
622        %433 = OpLabel
623        %579 = OpIAdd %6 %808 %31
624               OpBranch %430
625        %432 = OpLabel
626               OpBranch %420
627        %420 = OpLabel
628        %581 = OpIAdd %6 %805 %31
629               OpBranch %417
630        %419 = OpLabel
631               OpBranch %407
632        %407 = OpLabel
633        %583 = OpIAdd %6 %802 %31
634               OpBranch %404
635        %406 = OpLabel
636               OpBranch %394
637        %394 = OpLabel
638        %585 = OpIAdd %6 %799 %31
639               OpBranch %391
640        %393 = OpLabel
641               OpBranch %381
642        %381 = OpLabel
643        %587 = OpIAdd %6 %796 %31
644               OpBranch %378
645        %380 = OpLabel
646               OpBranch %368
647        %368 = OpLabel
648        %589 = OpIAdd %6 %793 %31
649               OpBranch %365
650        %367 = OpLabel
651               OpBranch %355
652        %355 = OpLabel
653        %591 = OpIAdd %6 %790 %31
654               OpBranch %352
655        %354 = OpLabel
656               OpBranch %342
657        %342 = OpLabel
658        %593 = OpIAdd %6 %787 %31
659               OpBranch %339
660        %341 = OpLabel
661               OpBranch %329
662        %329 = OpLabel
663        %595 = OpIAdd %6 %784 %31
664               OpBranch %326
665        %328 = OpLabel
666               OpBranch %316
667        %316 = OpLabel
668        %597 = OpIAdd %6 %781 %31
669               OpBranch %313
670        %315 = OpLabel
671               OpBranch %303
672        %303 = OpLabel
673        %599 = OpIAdd %6 %778 %31
674               OpBranch %300
675        %302 = OpLabel
676               OpBranch %290
677        %290 = OpLabel
678        %601 = OpIAdd %6 %775 %31
679               OpBranch %287
680        %289 = OpLabel
681               OpBranch %277
682        %277 = OpLabel
683        %603 = OpIAdd %6 %772 %31
684               OpBranch %274
685        %276 = OpLabel
686               OpBranch %264
687        %264 = OpLabel
688        %605 = OpIAdd %6 %769 %31
689               OpBranch %261
690        %263 = OpLabel
691               OpBranch %251
692        %251 = OpLabel
693        %607 = OpIAdd %6 %766 %31
694               OpBranch %248
695        %250 = OpLabel
696               OpBranch %238
697        %238 = OpLabel
698        %609 = OpIAdd %6 %763 %31
699               OpBranch %235
700        %237 = OpLabel
701               OpBranch %225
702        %225 = OpLabel
703        %611 = OpIAdd %6 %760 %31
704               OpBranch %222
705        %224 = OpLabel
706               OpBranch %212
707        %212 = OpLabel
708        %613 = OpIAdd %6 %757 %31
709               OpBranch %209
710        %211 = OpLabel
711               OpBranch %199
712        %199 = OpLabel
713        %615 = OpIAdd %6 %754 %31
714               OpBranch %196
715        %198 = OpLabel
716               OpBranch %186
717        %186 = OpLabel
718        %617 = OpIAdd %6 %751 %31
719               OpBranch %183
720        %185 = OpLabel
721               OpBranch %173
722        %173 = OpLabel
723        %619 = OpIAdd %6 %748 %31
724               OpBranch %170
725        %172 = OpLabel
726               OpBranch %160
727        %160 = OpLabel
728        %621 = OpIAdd %6 %745 %31
729               OpBranch %157
730        %159 = OpLabel
731               OpBranch %147
732        %147 = OpLabel
733        %623 = OpIAdd %6 %742 %31
734               OpBranch %144
735        %146 = OpLabel
736               OpBranch %134
737        %134 = OpLabel
738        %625 = OpIAdd %6 %739 %31
739               OpBranch %131
740        %133 = OpLabel
741               OpBranch %121
742        %121 = OpLabel
743        %627 = OpIAdd %6 %736 %31
744               OpBranch %118
745        %120 = OpLabel
746               OpBranch %108
747        %108 = OpLabel
748        %629 = OpIAdd %6 %733 %31
749               OpBranch %105
750        %107 = OpLabel
751               OpBranch %95
752         %95 = OpLabel
753        %631 = OpIAdd %6 %730 %31
754               OpBranch %92
755         %94 = OpLabel
756               OpBranch %82
757         %82 = OpLabel
758        %633 = OpIAdd %6 %727 %31
759               OpBranch %79
760         %81 = OpLabel
761               OpBranch %69
762         %69 = OpLabel
763        %635 = OpIAdd %6 %724 %31
764               OpBranch %66
765         %68 = OpLabel
766               OpBranch %54
767         %54 = OpLabel
768        %637 = OpIAdd %6 %712 %31
769               OpBranch %51
770         %53 = OpLabel
771        %645 = OpAccessChain %644 %642 %643
772        %646 = OpLoad %639 %645
773        %648 = OpFOrdGreaterThan %28 %646 %647
774               OpSelectionMerge %650 None
775               OpBranchConditional %648 %649 %650
776        %649 = OpLabel
777        %707 = OpLoad %9 %704
778               OpStore %709 %707
779               OpSelectionMerge %701 None
780               OpSwitch %668 %680
781        %680 = OpLabel
782               OpBranch %681
783        %681 = OpLabel
784        %715 = OpPhi %6 %18 %680 %696 %697
785        %714 = OpPhi %6 %713 %680 %687 %697
786        %684 = OpSLessThan %28 %714 %27
787               OpLoopMerge %698 %697 None
788               OpBranchConditional %684 %685 %698
789        %685 = OpLabel
790        %687 = OpIAdd %6 %714 %31
791        %711 = OpAccessChain %19 %709 %715
792        %690 = OpLoad %6 %711
793        %692 = OpINotEqual %28 %690 %715
794               OpSelectionMerge %694 None
795               OpBranchConditional %692 %693 %694
796        %693 = OpLabel
797               OpBranch %698
798        %694 = OpLabel
799        %696 = OpIAdd %6 %715 %31
800               OpBranch %697
801        %697 = OpLabel
802               OpBranch %681
803        %698 = OpLabel
804        %719 = OpPhi %6 %722 %681 %18 %693
805        %716 = OpPhi %28 %669 %681 %672 %693
806               OpSelectionMerge %700 None
807               OpBranchConditional %716 %701 %700
808        %700 = OpLabel
809               OpBranch %701
810        %701 = OpLabel
811        %718 = OpPhi %6 %719 %698 %31 %700
812               OpBranch %650
813        %650 = OpLabel
814        %723 = OpPhi %6 %18 %53 %718 %701
815        %655 = OpIEqual %28 %723 %31
816               OpSelectionMerge %657 None
817               OpBranchConditional %655 %656 %662
818        %656 = OpLabel
819               OpStore %659 %661
820               OpBranch %657
821        %662 = OpLabel
822               OpStore %659 %663
823               OpBranch %657
824        %657 = OpLabel
825               OpReturn
826               OpFunctionEnd
827END
828
829
830BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
831
832PIPELINE graphics variant_pipeline
833  ATTACH variant_vertex_shader
834  ATTACH variant_fragment_shader
835  FRAMEBUFFER_SIZE 256 256
836  BIND BUFFER variant_framebuffer AS color LOCATION 0
837END
838CLEAR_COLOR variant_pipeline 0 0 0 255
839
840CLEAR variant_pipeline
841RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
842
843EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
844