summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-09-15 18:54:10 +0000
committerCraig Topper <craig.topper@intel.com>2018-09-15 18:54:10 +0000
commit2da738167886d4a56a74d351f9586f309c1bfb2e (patch)
treeaf1618c250b0a4c9d0e0b1c37159c48414ca9cdd /llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
parent0bd2d304e672c4a573affa2b10f67304d03f415a (diff)
downloadbcm5719-llvm-2da738167886d4a56a74d351f9586f309c1bfb2e.tar.gz
bcm5719-llvm-2da738167886d4a56a74d351f9586f309c1bfb2e.zip
[InstCombine] Support (sub (sext x), (sext y)) --> (sext (sub x, y)) and (sub (zext x), (zext y)) --> (zext (sub x, y))
Summary: If the sub doesn't overflow in the original type we can move it above the sext/zext. This is similar to what we do for add. The overflow checking for sub is currently weaker than add, so the test cases are constructed for what is supported. Reviewers: spatel Reviewed By: spatel Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D52075 llvm-svn: 342335
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp')
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
index acb62b6ad9e..910ec835c5a 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
@@ -1697,6 +1697,9 @@ Instruction *InstCombiner::visitSub(BinaryOperator &I) {
return SelectInst::Create(Cmp, Neg, A);
}
+ if (Instruction *Ext = narrowMathIfNoOverflow(I))
+ return Ext;
+
bool Changed = false;
if (!I.hasNoSignedWrap() && willNotOverflowSignedSub(Op0, Op1, I)) {
Changed = true;
OpenPOWER on IntegriCloud