summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Testing
diff options
context:
space:
mode:
authorRoman Lebedev <lebedev.ri@gmail.com>2018-09-19 13:35:27 +0000
committerRoman Lebedev <lebedev.ri@gmail.com>2018-09-19 13:35:27 +0000
commit183a465dc60b9ca87841bd0b7c34bc74deef74b4 (patch)
tree3deae2eceb3d7273e6d5e303cea098e1363c76b3 /llvm/lib/Testing
parent0b835be7bb3e84dbb3efe7bab32a33166d94db8e (diff)
downloadbcm5719-llvm-183a465dc60b9ca87841bd0b7c34bc74deef74b4.tar.gz
bcm5719-llvm-183a465dc60b9ca87841bd0b7c34bc74deef74b4.zip
[InstCombine] foldICmpWithLowBitMaskedVal(): handle ~(-1 << y) mask
Summary: Two folds are happening here: 1. https://rise4fun.com/Alive/oaFX 2. And then `foldICmpWithHighBitMask()` (D52001): https://rise4fun.com/Alive/wsP4 This change doesn't just add the handling for eq/ne predicates, it actually builds upon the previous `foldICmpWithLowBitMaskedVal()` work, so **all** the 16 fold variants* are immediately supported. I'm indeed only testing these two predicates. I do not feel like re-proving all 16 folds*, because they were already proven for the general case of constant with all-ones in low bits. So as long as the mask produces all-ones in low bits, i'm pretty sure the fold is valid. But required, i can re-prove, let me know. * eq/ne are commutative - 4 folds; ult/ule/ugt/uge - are not commutative (the commuted variant is InstSimplified), 4 folds; slt/sle/sgt/sge are not commutative - 4 folds. 12 folds in total. https://bugs.llvm.org/show_bug.cgi?id=38123 https://bugs.llvm.org/show_bug.cgi?id=38708 Reviewers: spatel, craig.topper, RKSimon Reviewed By: spatel Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D52146 llvm-svn: 342546
Diffstat (limited to 'llvm/lib/Testing')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud