cf.do.plain.hlsl 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Run: %dxc -T ps_6_0 -E main
  2. int foo() { return true; }
  3. void main() {
  4. int val = 0;
  5. int i = 0;
  6. /////////////////////////////
  7. //// Basic do-while loop ////
  8. /////////////////////////////
  9. // CHECK: OpBranch %do_while_header
  10. // CHECK-NEXT: %do_while_header = OpLabel
  11. // CHECK-NEXT: OpLoopMerge %do_while_merge %do_while_continue None
  12. // CHECK-NEXT: OpBranch %do_while_body
  13. do {
  14. // CHECK-NEXT: %do_while_body = OpLabel
  15. // CHECK-NEXT: [[i0:%\d+]] = OpLoad %int %i
  16. // CHECK-NEXT: OpStore %val [[i0]]
  17. // CHECK-NEXT: OpBranch %do_while_continue
  18. val = i;
  19. // CHECK-NEXT: %do_while_continue = OpLabel
  20. // CHECK-NEXT: [[i1:%\d+]] = OpLoad %int %i
  21. // CHECK-NEXT: [[i_lt_10:%\d+]] = OpSLessThan %bool [[i1]] %int_10
  22. // CHECK-NEXT: OpBranchConditional [[i_lt_10]] %do_while_header %do_while_merge
  23. } while (i < 10);
  24. // CHECK-NEXT: %do_while_merge = OpLabel
  25. //////////////////////////
  26. //// infinite loop ////
  27. //////////////////////////
  28. // CHECK-NEXT: OpBranch %do_while_header_0
  29. // CHECK-NEXT: %do_while_header_0 = OpLabel
  30. // CHECK-NEXT: OpLoopMerge %do_while_merge_0 %do_while_continue_0 None
  31. // CHECK-NEXT: OpBranch %do_while_body_0
  32. do {
  33. // CHECK-NEXT: %do_while_body_0 = OpLabel
  34. // CHECK-NEXT: OpStore %val %int_0
  35. // CHECK-NEXT: OpBranch %do_while_continue_0
  36. val = 0;
  37. // CHECK-NEXT: %do_while_continue_0 = OpLabel
  38. // CHECK-NEXT: OpBranchConditional %true %do_while_header_0 %do_while_merge_0
  39. } while (true);
  40. // CHECK-NEXT: %do_while_merge_0 = OpLabel
  41. //////////////////////////
  42. //// Null Body ////
  43. //////////////////////////
  44. // CHECK-NEXT: OpBranch %do_while_header_1
  45. // CHECK-NEXT: %do_while_header_1 = OpLabel
  46. // CHECK-NEXT: OpLoopMerge %do_while_merge_1 %do_while_continue_1 None
  47. // CHECK-NEXT: OpBranch %do_while_body_1
  48. do {
  49. // CHECK-NEXT: %do_while_body_1 = OpLabel
  50. // CHECK-NEXT: OpBranch %do_while_continue_1
  51. // CHECK-NEXT: %do_while_continue_1 = OpLabel
  52. // CHECK-NEXT: [[val:%\d+]] = OpLoad %int %val
  53. // CHECK-NEXT: [[val_lt_20:%\d+]] = OpSLessThan %bool [[val]] %int_20
  54. // CHECK-NEXT: OpBranchConditional [[val_lt_20]] %do_while_header_1 %do_while_merge_1
  55. } while (val < 20);
  56. // CHECK-NEXT: %do_while_merge_1 = OpLabel
  57. // CHECK-NEXT: OpReturn
  58. // CHECK-NEXT: OpFunctionEnd
  59. }