| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- // Run: %dxc -T ps_6_0 -E main
- int foo() { return true; }
- void main() {
- int val = 0;
- int i = 0;
- //////////////////////////
- //// Basic while loop ////
- //////////////////////////
- // CHECK: OpBranch %while_check
- // CHECK-NEXT: %while_check = OpLabel
- // CHECK-NEXT: [[i:%\d+]] = OpLoad %int %i
- // CHECK-NEXT: [[i_lt_10:%\d+]] = OpSLessThan %bool [[i]] %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
- // CHECK-NEXT: [[i1:%\d+]] = OpLoad %int %i
- // CHECK-NEXT: OpStore %val [[i1]]
- val = i;
- // CHECK-NEXT: OpBranch %while_continue
- // CHECK-NEXT: %while_continue = OpLabel
- // CHECK-NEXT: OpBranch %while_check
- }
- // CHECK-NEXT: %while_merge = OpLabel
- //////////////////////////
- //// infinite loop ////
- //////////////////////////
- // CHECK-NEXT: OpBranch %while_check_0
- // CHECK-NEXT: %while_check_0 = OpLabel
- // CHECK-NEXT: OpLoopMerge %while_merge_0 %while_continue_0 None
- // CHECK-NEXT: OpBranchConditional %true %while_body_0 %while_merge_0
- while (true) {
- // CHECK-NEXT: %while_body_0 = OpLabel
- // CHECK-NEXT: OpStore %val %int_0
- val = 0;
- // CHECK-NEXT: OpBranch %while_continue_0
- // CHECK-NEXT: %while_continue_0 = OpLabel
- // CHECK-NEXT: OpBranch %while_check_0
- }
- // CHECK-NEXT: %while_merge_0 = OpLabel
- // CHECK-NEXT: OpBranch %while_check_1
- //////////////////////////
- //// Null Body ////
- //////////////////////////
- // CHECK-NEXT: %while_check_1 = OpLabel
- // CHECK-NEXT: [[val1:%\d+]] = OpLoad %int %val
- // CHECK-NEXT: [[val_lt_20:%\d+]] = OpSLessThan %bool [[val1]] %int_20
- // CHECK-NEXT: OpLoopMerge %while_merge_1 %while_continue_1 None
- // CHECK-NEXT: OpBranchConditional [[val_lt_20]] %while_body_1 %while_merge_1
- while (val < 20)
- // CHECK-NEXT: %while_body_1 = OpLabel
- // CHECK-NEXT: OpBranch %while_continue_1
- // CHECK-NEXT: %while_continue_1 = OpLabel
- // CHECK-NEXT: OpBranch %while_check_1
- ;
- // CHECK-NEXT: %while_merge_1 = OpLabel
- // CHECK-NEXT: OpBranch %while_check_2
- ////////////////////////////////////////////////////////////////
- //// Condition variable has VarDecl ////
- //// foo() returns an integer which must be cast to boolean ////
- ////////////////////////////////////////////////////////////////
- // CHECK-NEXT: %while_check_2 = OpLabel
- // CHECK-NEXT: [[foo:%\d+]] = OpFunctionCall %int %foo
- // CHECK-NEXT: OpStore %a [[foo]]
- // CHECK-NEXT: [[a:%\d+]] = OpLoad %int %a
- // CHECK-NEXT: [[is_a_true:%\d+]] = OpINotEqual %bool [[a]] %int_0
- // CHECK-NEXT: OpLoopMerge %while_merge_2 %while_continue_2 None
- // CHECK-NEXT: OpBranchConditional [[is_a_true]] %while_body_2 %while_merge_2
- while (int a = foo()) {
- // CHECK-NEXT: %while_body_2 = OpLabel
- // CHECK-NEXT: [[a1:%\d+]] = OpLoad %int %a
- // CHECK-NEXT: OpStore %val [[a1]]
- val = a;
- // CHECK-NEXT: OpBranch %while_continue_2
- // CHECK-NEXT: %while_continue_2 = OpLabel
- // CHECK-NEXT: OpBranch %while_check_2
- }
- // CHECK-NEXT: %while_merge_2 = OpLabel
- // CHECK-NEXT: OpReturn
- // CHECK-NEXT: OpFunctionEnd
- }
|