| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // Run: %dxc -T ps_6_0 -E main
- void main() {
- // CHECK-LABEL: %bb_entry = OpLabel
- int val = 0;
- // CHECK: OpStore %val %int_0
- // CHECK-NEXT: OpStore %i %int_0
- // CHECK-NEXT: OpBranch %for_check
- // CHECK-LABEL: %for_check = OpLabel
- // CHECK-NEXT: [[i0:%\d+]] = OpLoad %int %i
- // CHECK-NEXT: [[lt0:%\d+]] = OpSLessThan %bool [[i0]] %int_10
- // CHECK-NEXT: OpLoopMerge %for_merge_1 %for_continue_1 Unroll
- // CHECK-NEXT: OpBranchConditional [[lt0]] %for_body %for_merge_1
- [unroll] for (int i = 0; i < 10; ++i) {
- // CHECK-LABEL: %for_body = OpLabel
- // CHECK-NEXT: [[val0:%\d+]] = OpLoad %int %val
- // CHECK-NEXT: [[i1:%\d+]] = OpLoad %int %i
- // CHECK-NEXT: [[add0:%\d+]] = OpIAdd %int [[val0]] [[i1]]
- // CHECK-NEXT: OpStore %val [[add0]]
- val = val + i;
- // CHECK-NEXT: OpStore %j %int_0
- // CHECK-NEXT: OpBranch %for_check_0
- // CHECK-LABEL: %for_check_0 = OpLabel
- // CHECK-NEXT: [[j0:%\d+]] = OpLoad %int %j
- // CHECK-NEXT: [[lt1:%\d+]] = OpSLessThan %bool [[j0]] %int_10
- // CHECK-NEXT: OpLoopMerge %for_merge_0 %for_continue_0 DontUnroll
- // CHECK-NEXT: OpBranchConditional [[lt1]] %for_body_0 %for_merge_0
- [loop] for (int j = 0; j < 10; ++j) {
- // CHECK-LABEL: %for_body_0 = OpLabel
- // CHECK-NEXT: OpStore %k %int_0
- // CHECK-NEXT: OpBranch %for_check_1
- // CHECK-LABEL: %for_check_1 = OpLabel
- // CHECK-NEXT: [[k0:%\d+]] = OpLoad %int %k
- // CHECK-NEXT: [[lt2:%\d+]] = OpSLessThan %bool [[k0]] %int_10
- // CHECK-NEXT: OpLoopMerge %for_merge %for_continue DontUnroll
- // CHECK-NEXT: OpBranchConditional [[lt2]] %for_body_1 %for_merge
- [fastopt] for (int k = 0; k < 10; ++k) {
- // CHECK-LABEL: %for_body_1 = OpLabel
- // CHECK-NEXT: [[val1:%\d+]] = OpLoad %int %val
- // CHECK-NEXT: [[k1:%\d+]] = OpLoad %int %k
- // CHECK-NEXT: [[add1:%\d+]] = OpIAdd %int [[val1]] [[k1]]
- // CHECK-NEXT: OpStore %val [[add1]]
- // CHECK-NEXT: OpBranch %for_continue
- val = val + k;
- // CHECK-LABEL: %for_continue = OpLabel
- // CHECK-NEXT: [[k2:%\d+]] = OpLoad %int %k
- // CHECK-NEXT: [[add2:%\d+]] = OpIAdd %int [[k2]] %int_1
- // CHECK-NEXT: OpStore %k [[add2]]
- // CHECK-NEXT: OpBranch %for_check_1
- }
- // CHECK-LABEL: %for_merge = OpLabel
- // CHECK-NEXT: [[val2:%\d+]] = OpLoad %int %val
- // CHECK-NEXT: [[mul0:%\d+]] = OpIMul %int [[val2]] %int_2
- // CHECK-NEXT: OpStore %val [[mul0]]
- // CHECK-NEXT: OpBranch %for_continue_0
- val = val * 2;
- // CHECK-LABEL: %for_continue_0 = OpLabel
- // CHECK-NEXT: [[j1:%\d+]] = OpLoad %int %j
- // CHECK-NEXT: [[add3:%\d+]] = OpIAdd %int [[j1]] %int_1
- // CHECK-NEXT: OpStore %j [[add3]]
- // CHECK-NEXT: OpBranch %for_check_0
- }
- // CHECK-LABEL: %for_merge_0 = OpLabel
- // CHECK-NEXT: OpBranch %for_continue_1
- // CHECK-LABEL: %for_continue_1 = OpLabel
- // CHECK-NEXT: [[i2:%\d+]] = OpLoad %int %i
- // CHECK-NEXT: [[add4:%\d+]] = OpIAdd %int [[i2]] %int_1
- // CHECK-NEXT: OpStore %i [[add4]]
- // CHECK-NEXT: OpBranch %for_check
- }
- // CHECK-LABEL: %for_merge_1 = OpLabel
- // CHECK-NEXT: OpReturn
- }
|