diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2017-10-13 17:47:25 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2017-10-13 17:47:25 +0000 |
| commit | c419c9f640deeeccc7de8afd84f5d54aa05c7136 (patch) | |
| tree | 38899221854c98390b424621941518fa789675e9 /llvm/lib | |
| parent | 399fcbea37afc33f9609652e4b085affa9164d83 (diff) | |
| download | bcm5719-llvm-c419c9f640deeeccc7de8afd84f5d54aa05c7136.tar.gz bcm5719-llvm-c419c9f640deeeccc7de8afd84f5d54aa05c7136.zip | |
[InstCombine] add hasOneUse check to add-zext-add fold to prevent increasing instructions
llvm-svn: 315718
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp index 92452d7df73..3921ab4374e 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +++ b/llvm/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); |

