diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2009-11-15 17:51:23 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2009-11-15 17:51:23 +0000 |
commit | 78799101733621457222fe31d32291664e8aa350 (patch) | |
tree | c86d2e00d34cfeefd9f4bc99855c4fd72f6a981d | |
parent | 0e3a24525cce403014d8bf531017cf632f6a1a06 (diff) | |
download | external_llvm-78799101733621457222fe31d32291664e8aa350.zip external_llvm-78799101733621457222fe31d32291664e8aa350.tar.gz external_llvm-78799101733621457222fe31d32291664e8aa350.tar.bz2 |
Add a complex missed optimization opportunity I came across while investigating
bug 5438.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88855 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/README.txt | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/Target/README.txt b/lib/Target/README.txt index bcc55b4..aad621f 100644 --- a/lib/Target/README.txt +++ b/lib/Target/README.txt @@ -1719,3 +1719,18 @@ static int foo(const char *X) { return strlen(X); } int bar() { return foo("abcd"); } //===---------------------------------------------------------------------===// + +InstCombine should use SimplifyDemandedBits to remove the or instruction: + +define i1 @test(i8 %x, i8 %y) { + %A = or i8 %x, 1 + %B = icmp ugt i8 %A, 3 + ret i1 %B +} + +Currently instcombine calls SimplifyDemandedBits with either all bits or just +the sign bit, if the comparison is obviously a sign test. In this case, we only +need all but the bottom two bits from %A, and if we gave that mask to SDB it +would delete the or instruction for us. + +//===---------------------------------------------------------------------===// |