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