select.ll 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. ; RUN: opt < %s -correlated-propagation -S | FileCheck %s
  2. ; CHECK-LABEL: @simple(
  3. define i8 @simple(i1) {
  4. entry:
  5. %s = select i1 %0, i8 0, i8 1
  6. br i1 %0, label %then, label %else
  7. then:
  8. ; CHECK: ret i8 0
  9. %a = phi i8 [ %s, %entry ]
  10. ret i8 %a
  11. else:
  12. ; CHECK: ret i8 1
  13. %b = phi i8 [ %s, %entry ]
  14. ret i8 %b
  15. }
  16. ; CHECK-LABEL: @loop(
  17. define void @loop(i32) {
  18. entry:
  19. br label %loop
  20. loop:
  21. %idx = phi i32 [ %0, %entry ], [ %sel, %loop ]
  22. ; CHECK: %idx = phi i32 [ %0, %entry ], [ %2, %loop ]
  23. %1 = icmp eq i32 %idx, 0
  24. %2 = add i32 %idx, -1
  25. %sel = select i1 %1, i32 0, i32 %2
  26. br i1 %1, label %out, label %loop
  27. out:
  28. ret void
  29. }
  30. ; CHECK-LABEL: @not_correlated(
  31. define i8 @not_correlated(i1, i1) {
  32. entry:
  33. %s = select i1 %0, i8 0, i8 1
  34. br i1 %1, label %then, label %else
  35. then:
  36. ; CHECK: ret i8 %s
  37. %a = phi i8 [ %s, %entry ]
  38. ret i8 %a
  39. else:
  40. ; CHECK: ret i8 %s
  41. %b = phi i8 [ %s, %entry ]
  42. ret i8 %b
  43. }
  44. @c = global i32 0, align 4
  45. @b = global i32 0, align 4
  46. ; CHECK-LABEL: @PR23752(
  47. define i32 @PR23752() {
  48. entry:
  49. br label %for.body
  50. for.body:
  51. %phi = phi i32 [ 0, %entry ], [ %sel, %for.body ]
  52. %sel = select i1 icmp sgt (i32* @b, i32* @c), i32 %phi, i32 1
  53. %cmp = icmp ne i32 %sel, 1
  54. br i1 %cmp, label %for.body, label %if.end
  55. ; CHECK: %[[sel:.*]] = select i1 icmp sgt (i32* @b, i32* @c), i32 0, i32 1
  56. ; CHECK-NEXT: %[[cmp:.*]] = icmp ne i32 %[[sel]], 1
  57. ; CHECK-NEXT: br i1 %[[cmp]]
  58. if.end:
  59. ret i32 %sel
  60. ; CHECK: ret i32 %[[sel]]
  61. }