We can simplify ule/ugt -> eq/ne and we can remove the `Or` in some
cases of eq/ne.
`icmp (X | Y) u<= X` --> `(X | Y) == X`
- https://alive2.llvm.org/ce/z/qnbbPv
`icmp (X | Y) u> X` --> `(X | Y) != X`
- https://alive2.llvm.org/ce/z/fvLqg3
`icmp (X | Y) eq/ne X`
- --> `(~X & Y) eq/ne 0` iff X is freely invertible
- --> `(X & ~Y) eq/ne -1` iff Y is freely invertible
- https://alive2.llvm.org/ce/z/cpPV_W
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D144610
300 KiB
300 KiB