cf.if.nested.hlsl 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Run: %dxc -T ps_6_0 -E main
  2. void main() {
  3. // CHECK-LABEL: %bb_entry = OpLabel
  4. bool c1, c2, c3, c4;
  5. int val = 0;
  6. // CHECK: [[c1:%\d+]] = OpLoad %bool %c1
  7. // CHECK-NEXT: OpSelectionMerge %if_merge_2 None
  8. // CHECK-NEXT: OpBranchConditional [[c1]] %if_true %if_false
  9. if (c1) {
  10. // CHECK-LABEL: %if_true = OpLabel
  11. // CHECK-NEXT: [[c2:%\d+]] = OpLoad %bool %c2
  12. // CHECK-NEXT: OpSelectionMerge %if_merge None
  13. // CHECK-NEXT: OpBranchConditional [[c2]] %if_true_0 %if_merge
  14. if (c2)
  15. // CHECK-LABEL: %if_true_0 = OpLabel
  16. // CHECK-NEXT: OpStore %val %int_1
  17. // CHECK-NEXT: OpBranch %if_merge
  18. val = 1;
  19. // CHECK-LABEL: %if_merge = OpLabel
  20. // CHECK-NEXT: OpBranch %if_merge_2
  21. } else {
  22. // CHECK-LABEL: %if_false = OpLabel
  23. // CHECK-NEXT: [[c3:%\d+]] = OpLoad %bool %c3
  24. // CHECK-NEXT: OpSelectionMerge %if_merge_1 None
  25. // CHECK-NEXT: OpBranchConditional [[c3]] %if_true_1 %if_false_0
  26. if (c3) {
  27. // CHECK-LABEL: %if_true_1 = OpLabel
  28. // CHECK-NEXT: OpStore %val %int_2
  29. // CHECK-NEXT: OpBranch %if_merge_1
  30. val = 2;
  31. } else {
  32. // CHECK-LABEL: %if_false_0 = OpLabel
  33. // CHECK-NEXT: [[c4:%\d+]] = OpLoad %bool %c4
  34. // CHECK-NEXT: OpSelectionMerge %if_merge_0 None
  35. // CHECK-NEXT: OpBranchConditional [[c4]] %if_true_2 %if_merge_0
  36. if (c4) {
  37. // CHECK-LABEL: %if_true_2 = OpLabel
  38. // CHECK-NEXT: OpStore %val %int_3
  39. // CHECK-NEXT: OpBranch %if_merge_0
  40. val = 3;
  41. }
  42. // CHECK-LABEL: %if_merge_0 = OpLabel
  43. // CHECK-NEXT: OpBranch %if_merge_1
  44. }
  45. // CHECK-LABEL: %if_merge_1 = OpLabel
  46. // CHECK-NEXT: OpBranch %if_merge_2
  47. }
  48. // CHECK-LABEL: %if_merge_2 = OpLabel
  49. // CHECK-NEXT: OpReturn
  50. }