aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2017-10-13 17:47:25 +0000
committerSanjay Patel <spatel@rotateright.com>2017-10-13 17:47:25 +0000
commita7bbf63f800a8976d3636d5d9f55fbee24f0baf7 (patch)
tree47e8ffade934c3e058a9483d8f487b9722b0d785 /lib/Transforms
parent5860eabc2fd220ad9d3ade38cfd05091cf18a31a (diff)
downloadllvm-a7bbf63f800a8976d3636d5d9f55fbee24f0baf7.tar.gz
[InstCombine] add hasOneUse check to add-zext-add fold to prevent increasing instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315718 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/InstCombine/InstCombineAddSub.cpp6
1 files changed, 2 insertions, 4 deletions
diff --git a/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/lib/Transforms/InstCombine/InstCombineAddSub.cpp
index 92452d7df73..3921ab4374e 100644
--- a/lib/Transforms/InstCombine/InstCombineAddSub.cpp
+++ b/lib/Transforms/InstCombine/InstCombineAddSub.cpp
@@ -988,10 +988,8 @@ Instruction *InstCombiner::foldAddWithConstant(BinaryOperator &Add) {
return CastInst::Create(Instruction::SExt, X, Ty);
// (add (zext (add nuw X, C2)), C) --> (zext (add nuw X, C2 + C))
- // FIXME: This should check hasOneUse to not increase the instruction count?
- if (C->isNegative() &&
- match(Op0, m_ZExt(m_NUWAdd(m_Value(X), m_APInt(C2)))) &&
- C->sge(-C2->sext(C->getBitWidth()))) {
+ if (match(Op0, m_OneUse(m_ZExt(m_NUWAdd(m_Value(X), m_APInt(C2))))) &&
+ C->isNegative() && C->sge(-C2->sext(C->getBitWidth()))) {
Constant *NewC =
ConstantInt::get(X->getType(), *C2 + C->trunc(C2->getBitWidth()));
return new ZExtInst(Builder.CreateNUWAdd(X, NewC), Ty);