Files
clang-p2996/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
Noah Goldstein 5532ab1732 [InstCombine] Make the (icmp eq/ne (and X, Y), X) canonicalization work for non-const operands
We currently do:
    `(icmp eq/ne (and X, Y), Y)` -> `(icmp eq/ne (and ~X, Y), 0)`
if `X` is constant. We can make this more general and do it if `X` is
freely invertable (i.e say `X = ~Z`).

As well, we can also do:
    `(icmp eq/ne (and X, Y), Y)` -> `(icmp eq/ne (or X, ~Y), -1)`
If `Y` is freely invertible.

Proofs: https://alive2.llvm.org/ce/z/yeWH3E

Differential Revision: https://reviews.llvm.org/D159059

Closes #84688
2024-05-29 02:38:23 -05:00

318 KiB