common-dest-folding.ll 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. ; RUN: opt < %s -simplifycfg -S | FileCheck %s
  2. ;CHECK: @foo
  3. ;CHECK: and i32 %c1, %k
  4. ;CHECK: icmp eq i32
  5. ;CHECK: and i32 %c2, %k
  6. ;CHECK: icmp eq i32
  7. ;CHECK: or i1
  8. ;CHECK: ret
  9. define i32 @foo(i32 %k, i32 %c1, i32 %c2) {
  10. %1 = and i32 %c1, %k
  11. %2 = icmp eq i32 %1, 0
  12. br i1 %2, label %8, label %3
  13. ; <label>:3 ; preds = %0
  14. %4 = and i32 %c2, %k
  15. %5 = icmp eq i32 %4, 0
  16. br i1 %5, label %8, label %6
  17. ; <label>:6 ; preds = %3
  18. %7 = tail call i32 (...) @bar() nounwind
  19. br label %8
  20. ; <label>:8 ; preds = %3, %0, %6
  21. ret i32 undef
  22. }
  23. ;CHECK: @conduse
  24. ;CHECK: shl i32 1, %c1
  25. ;CHECK-NEXT: shl i32 1, %c2
  26. ;CHECK-NEXT: and i32
  27. ;CHECK-NEXT: icmp eq i32
  28. ;CHECK-NEXT: and i32
  29. ;CHECK-NEXT: icmp eq i32
  30. ;CHECK: ret
  31. define i32 @conduse(i32 %k, i32 %c1, i32 %c2) #0 {
  32. bb:
  33. %tmp = shl i32 1, %c1
  34. %tmp4 = shl i32 1, %c2
  35. %tmp1 = and i32 %tmp, %k
  36. %tmp2 = icmp eq i32 %tmp1, 0
  37. br i1 %tmp2, label %bb9, label %bb3
  38. bb3: ; preds = %bb
  39. %tmp5 = and i32 %tmp4, %k
  40. %tmp6 = icmp eq i32 %tmp5, 0
  41. br i1 %tmp6, label %bb9, label %bb7
  42. bb7: ; preds = %bb3
  43. %tmp8 = tail call i32 (...) @bar() #1
  44. br label %bb9
  45. bb9: ; preds = %bb7, %bb3, %bb
  46. ret i32 undef
  47. }
  48. declare i32 @bar(...)