summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2013-05-06 21:21:31 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2013-05-06 21:21:31 +0000
commit70f286d95fb9c6ff5483a75097404d61b302727c (patch)
tree913c1455b8050ac0827b8b0e852758dac8ad4fc6 /llvm/lib/Transforms
parent0cdce8351a28bdeef853a69c127803e74875c942 (diff)
downloadbcm5719-llvm-70f286d95fb9c6ff5483a75097404d61b302727c.tar.gz
bcm5719-llvm-70f286d95fb9c6ff5483a75097404d61b302727c.zip
InstCombine: (X ^ signbit) + C -> X + (signbit ^ C)
llvm-svn: 181249
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
index 1aa51d06cb0..166f8dfdb4a 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
@@ -974,6 +974,11 @@ Instruction *InstCombiner::visitAdd(BinaryOperator &I) {
return BinaryOperator::CreateSub(ConstantExpr::getAdd(XorRHS, CI),
XorLHS);
}
+ // (X + signbit) + C could have gotten canonicalized to (X ^ signbit) + C,
+ // transform them into (X + (signbit ^ C))
+ if (XorRHS->getValue().isSignBit())
+ return BinaryOperator::CreateAdd(XorLHS,
+ ConstantExpr::getXor(XorRHS, CI));
}
}
OpenPOWER on IntegriCloud