[InstCombine] foldICmpWithLowBitMaskedVal(): handle uncanonical ((1 << y)+(-1)) mask
authorRoman Lebedev <lebedev.ri@gmail.com>
Wed, 19 Sep 2018 13:35:40 +0000 (13:35 +0000)
committerRoman Lebedev <lebedev.ri@gmail.com>
Wed, 19 Sep 2018 13:35:40 +0000 (13:35 +0000)
commitca2bdb03d6cfeef068dcae8ae3bf78ead219612a
tree8d46e53c9455809efed0403ea68459948d2aef07
parent183a465dc60b9ca87841bd0b7c34bc74deef74b4
[InstCombine] foldICmpWithLowBitMaskedVal(): handle uncanonical ((1 << y)+(-1)) mask

Summary:
Same as to D52146.
`((1 << y)+(-1))` is simply non-canoniacal version of `~(-1 << y)`: https://rise4fun.com/Alive/0vl
We can not canonicalize it due to the extra uses. But we can handle it here.

Reviewers: spatel, craig.topper, RKSimon

Reviewed By: spatel

Subscribers: llvm-commits

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

llvm-svn: 342547
llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
llvm/test/Transforms/InstCombine/canonicalize-low-bit-mask-v3-and-icmp-eq-to-icmp-ule.ll
llvm/test/Transforms/InstCombine/canonicalize-low-bit-mask-v3-and-icmp-ne-to-icmp-ugt.ll