cf.for.plain.hlsl 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Run: %dxc -T ps_6_0 -E main
  2. void main() {
  3. // CHECK-LABEL: %bb_entry = OpLabel
  4. int val = 0;
  5. // CHECK: OpBranch %for_check
  6. // CHECK-LABEL: %for_check = OpLabel
  7. // CHECK-NEXT: [[i0:%\d+]] = OpLoad %int %i
  8. // CHECK-NEXT: [[lt0:%\d+]] = OpSLessThan %bool [[i0]] %int_10
  9. // CHECK-NEXT: OpLoopMerge %for_merge %for_continue None
  10. // CHECK-NEXT: OpBranchConditional [[lt0]] %for_body %for_merge
  11. for (int i = 0; i < 10; ++i) {
  12. // CHECK-LABEL: %for_body = OpLabel
  13. // CHECK-NEXT: [[i1:%\d+]] = OpLoad %int %i
  14. // CHECK-NEXT: OpStore %val [[i1]]
  15. // CHECK-NEXT: OpBranch %for_continue
  16. val = i;
  17. // CHECK-LABEL: %for_continue = OpLabel
  18. // CHECK-NEXT: [[i2:%\d+]] = OpLoad %int %i
  19. // CHECK-NEXT: [[add0:%\d+]] = OpIAdd %int [[i2]] %int_1
  20. // CHECK-NEXT: OpStore %i [[add0]]
  21. // CHECK-NEXT: OpBranch %for_check
  22. }
  23. // CHECK-LABEL: %for_merge = OpLabel
  24. // CHECK-NEXT: OpBranch %for_check_0
  25. // CHECK-LABEL: %for_check_0 = OpLabel
  26. // CHECK-NEXT: OpLoopMerge %for_merge_0 %for_continue_0 None
  27. // CHECK-NEXT: OpBranchConditional %true %for_body_0 %for_merge_0
  28. // Infinite loop
  29. for ( ; ; ) {
  30. // CHECK-LABEL: %for_body_0 = OpLabel
  31. // CHECK-NEXT: OpStore %val %int_0
  32. // CHECK-NEXT: OpBranch %for_continue_0
  33. val = 0;
  34. // CHECK-LABEL: %for_continue_0 = OpLabel
  35. // CHECK-NEXT: OpBranch %for_check_0
  36. }
  37. // CHECK-LABEL: %for_merge_0 = OpLabel
  38. // CHECK: OpBranch %for_check_1
  39. // Null body
  40. // CHECK-LABEL: %for_check_1 = OpLabel
  41. // CHECK-NEXT: [[j0:%\d+]] = OpLoad %int %j
  42. // CHECK-NEXT: [[lt1:%\d+]] = OpSLessThan %bool [[j0]] %int_10
  43. // CHECK-NEXT: OpLoopMerge %for_merge_1 %for_continue_1 None
  44. // CHECK-NEXT: OpBranchConditional [[lt1]] %for_body_1 %for_merge_1
  45. for (int j = 0; j < 10; ++j)
  46. // CHECK-LABEL: %for_body_1 = OpLabel
  47. // CHECK-NEXT: OpBranch %for_continue_1
  48. ;
  49. // CHECK-LABEL: %for_continue_1 = OpLabel
  50. // CHECK-NEXT: [[j1:%\d+]] = OpLoad %int %j
  51. // CHECK-NEXT: [[add1:%\d+]] = OpIAdd %int [[j1]] %int_1
  52. // CHECK-NEXT: OpStore %j [[add1]]
  53. // CHECK-NEXT: OpBranch %for_check_1
  54. // CHECK-LABEL: %for_merge_1 = OpLabel
  55. // CHECK-NEXT: OpReturn
  56. }