summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorAnna Thomas <anna@azul.com>2017-06-23 13:41:45 +0000
committerAnna Thomas <anna@azul.com>2017-06-23 13:41:45 +0000
commitd67165c93c65b5874a4af301914e861f86727b57 (patch)
tree0b01edf21419ba0b0bd42d4ad8f82e03d4672503 /clang/lib/Frontend/CompilerInvocation.cpp
parent78811c2c07ee6da9aa4b00ba5a8da2604624264f (diff)
downloadbcm5719-llvm-d67165c93c65b5874a4af301914e861f86727b57.tar.gz
bcm5719-llvm-d67165c93c65b5874a4af301914e861f86727b57.zip
[InstCombine] Recognize and simplify three way comparison idioms
Summary: Many languages have a three way comparison idiom where comparing two values produces not a boolean, but a tri-state value. Typical values (e.g. as used in the lcmp/fcmp bytecodes from Java) are -1 for less than, 0 for equality, and +1 for greater than. We actually do a great job already of converting three way comparisons into binary comparisons when the result produced has one a single use. Unfortunately, such values can have more than one use, and in that case, our existing optimizations break down. The patch adds a peephole which converts a three-way compare + test idiom into a binary comparison on the original inputs. It focused on replacing the test on the result of the three way compare and does nothing about removing the three way compare itself. That's left to other optimizations (which do actually kick in commonly.) We currently recognize one idiom on signed integer compare. In the future, we plan to recognize and simplify other comparison idioms on other signed/unsigned datatypes such as floats, vectors etc. This is a resurrection of Philip Reames' original patch: https://reviews.llvm.org/D19452 Reviewers: majnemer, apilipenko, reames, sanjoy, mkazantsev Reviewed by: mkazantsev Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D34278 llvm-svn: 306100
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud