| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // Run: %dxc -T ps_6_0 -E main
- int foo() { return true; }
- void main() {
- int val = 0;
- int i = 0;
-
- // CHECK: OpBranch %while_check
- // CHECK: %while_check = OpLabel
- // CHECK: [[i_lt_10:%\d+]] = OpSLessThan %bool {{%\d+}} %int_10
- // CHECK-NEXT: OpLoopMerge %while_merge %while_continue None
- // CHECK-NEXT: OpBranchConditional [[i_lt_10]] %while_body %while_merge
- while (i < 10) {
- // CHECK-NEXT: %while_body = OpLabel
- val = i;
- // CHECK: [[val_gt_5:%\d+]] = OpSGreaterThan %bool {{%\d+}} %int_5
- // CHECK-NEXT: OpSelectionMerge %if_merge None
- // CHECK-NEXT: OpBranchConditional [[val_gt_5]] %if_true %if_merge
- if (val > 5) {
- // CHECK-NEXT: %if_true = OpLabel
- // CHECK-NEXT: OpBranch %while_continue
- continue;
- }
- // CHECK-NEXT: %if_merge = OpLabel
- // CHECK: [[val_gt_6:%\d+]] = OpSGreaterThan %bool {{%\d+}} %int_6
- // CHECK-NEXT: OpSelectionMerge %if_merge_0 None
- // CHECK-NEXT: OpBranchConditional [[val_gt_6]] %if_true_0 %if_merge_0
- if (val > 6) {
- // CHECK-NEXT: %if_true_0 = OpLabel
- // CHECK-NEXT: OpBranch %while_continue
- {{continue;}}
- val++; // No SPIR-V should be emitted for this statement.
- continue; // No SPIR-V should be emitted for this statement.
- while(true); // No SPIR-V should be emitted for this statement.
- --i; // No SPIR-V should be emitted for this statement.
- }
- // CHECK-NEXT: %if_merge_0 = OpLabel
- // CHECK-NEXT: OpBranch %while_continue
- // CHECK-NEXT: %while_continue = OpLabel
- // CHECK-NEXT: OpBranch %while_check
- }
- // CHECK-NEXT: %while_merge = OpLabel
- //////////////////////////////////////////////////////////////////////////////////////
- // Nested while loops with continue statements //
- // Each continue statement should branch to the corresponding loop's continue block //
- //////////////////////////////////////////////////////////////////////////////////////
- // CHECK-NEXT: OpBranch %while_check_0
- // CHECK-NEXT: %while_check_0 = OpLabel
- // CHECK-NEXT: OpLoopMerge %while_merge_1 %while_continue_1 None
- // CHECK-NEXT: OpBranchConditional %true %while_body_0 %while_merge_1
- while (true) {
- // CHECK-NEXT: %while_body_0 = OpLabel
- i++;
- // CHECK: OpBranch %while_check_1
- // CHECK-NEXT: %while_check_1 = OpLabel
- // CHECK: [[i_lt_20:%\d+]] = OpSLessThan %bool {{%\d+}} %int_20
- // CHECK-NEXT: OpLoopMerge %while_merge_0 %while_continue_0 None
- // CHECK-NEXT: OpBranchConditional [[i_lt_20]] %while_body_1 %while_merge_0
- while(i<20) {
- // CHECK-NEXT: %while_body_1 = OpLabel
- val = i;
- // CHECK: OpBranch %while_continue_0
- continue;
- // CHECK-NEXT: %while_continue_0 = OpLabel
- // CHECK-NEXT: OpBranch %while_check_1
- }
- // CHECK-NEXT: %while_merge_0 = OpLabel
- --i;
- // CHECK: OpBranch %while_continue_1
- continue;
- continue; // No SPIR-V should be emitted for this statement.
- // CHECK-NEXT: %while_continue_1 = OpLabel
- // CHECK-NEXT: OpBranch %while_check_0
- }
- // CHECK-NEXT: %while_merge_1 = OpLabel
- }
|