canonicalize_branch.ll 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. ; RUN: opt < %s -instcombine -S | FileCheck %s
  2. ; Test an already canonical branch to make sure we don't flip those.
  3. define i32 @test0(i32 %X, i32 %Y) {
  4. %C = icmp eq i32 %X, %Y
  5. br i1 %C, label %T, label %F, !prof !0
  6. ; CHECK-LABEL: @test0(
  7. ; CHECK: %C = icmp eq i32 %X, %Y
  8. ; CHECK: br i1 %C, label %T, label %F
  9. T:
  10. ret i32 12
  11. F:
  12. ret i32 123
  13. }
  14. define i32 @test1(i32 %X, i32 %Y) {
  15. %C = icmp ne i32 %X, %Y
  16. br i1 %C, label %T, label %F, !prof !1
  17. ; CHECK-LABEL: @test1(
  18. ; CHECK: %C = icmp eq i32 %X, %Y
  19. ; CHECK: br i1 %C, label %F, label %T
  20. T:
  21. ret i32 12
  22. F:
  23. ret i32 123
  24. }
  25. define i32 @test2(i32 %X, i32 %Y) {
  26. %C = icmp ule i32 %X, %Y
  27. br i1 %C, label %T, label %F, !prof !2
  28. ; CHECK-LABEL: @test2(
  29. ; CHECK: %C = icmp ugt i32 %X, %Y
  30. ; CHECK: br i1 %C, label %F, label %T
  31. T:
  32. ret i32 12
  33. F:
  34. ret i32 123
  35. }
  36. define i32 @test3(i32 %X, i32 %Y) {
  37. %C = icmp uge i32 %X, %Y
  38. br i1 %C, label %T, label %F, !prof !3
  39. ; CHECK-LABEL: @test3(
  40. ; CHECK: %C = icmp ult i32 %X, %Y
  41. ; CHECK: br i1 %C, label %F, label %T
  42. T:
  43. ret i32 12
  44. F:
  45. ret i32 123
  46. }
  47. !0 = !{!"branch_weights", i32 1, i32 2}
  48. !1 = !{!"branch_weights", i32 3, i32 4}
  49. !2 = !{!"branch_weights", i32 5, i32 6}
  50. !3 = !{!"branch_weights", i32 7, i32 8}
  51. ; Base case shouldn't change.
  52. ; CHECK: !0 = {{.*}} i32 1, i32 2}
  53. ; Ensure that the branch metadata is reversed to match the reversals above.
  54. ; CHECK: !1 = {{.*}} i32 4, i32 3}
  55. ; CHECK: !2 = {{.*}} i32 6, i32 5}
  56. ; CHECK: !3 = {{.*}} i32 8, i32 7}