inverses.ll 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. ; RUN: opt < %s -reassociate -die -S | FileCheck %s
  2. define i32 @test1(i32 %a, i32 %b) {
  3. %tmp.2 = and i32 %b, %a
  4. %tmp.4 = xor i32 %a, -1
  5. ; (A&B)&~A == 0
  6. %tmp.5 = and i32 %tmp.2, %tmp.4
  7. ret i32 %tmp.5
  8. ; CHECK-LABEL: @test1(
  9. ; CHECK: ret i32 0
  10. }
  11. define i32 @test2(i32 %a, i32 %b) {
  12. %tmp.1 = and i32 %a, 1234
  13. %tmp.2 = and i32 %b, %tmp.1
  14. %tmp.4 = xor i32 %a, -1
  15. ; A&~A == 0
  16. %tmp.5 = and i32 %tmp.2, %tmp.4
  17. ret i32 %tmp.5
  18. ; CHECK-LABEL: @test2(
  19. ; CHECK: ret i32 0
  20. }
  21. define i32 @test3(i32 %b, i32 %a) {
  22. %tmp.1 = add i32 %a, 1234
  23. %tmp.2 = add i32 %b, %tmp.1
  24. %tmp.4 = sub i32 0, %a
  25. ; (b+(a+1234))+-a -> b+1234
  26. %tmp.5 = add i32 %tmp.2, %tmp.4
  27. ret i32 %tmp.5
  28. ; CHECK-LABEL: @test3(
  29. ; CHECK: %tmp.5 = add i32 %b, 1234
  30. ; CHECK: ret i32 %tmp.5
  31. }
  32. define i32 @test4(i32 %b, i32 %a) {
  33. %tmp.1 = add i32 %a, 1234
  34. %tmp.2 = add i32 %b, %tmp.1
  35. %tmp.4 = xor i32 %a, -1
  36. ; (b+(a+1234))+~a -> b+1233
  37. %tmp.5 = add i32 %tmp.2, %tmp.4
  38. ret i32 %tmp.5
  39. ; CHECK-LABEL: @test4(
  40. ; CHECK: %tmp.5 = add i32 %b, 1233
  41. ; CHECK: ret i32 %tmp.5
  42. }