diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-11-22 04:52:38 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-11-22 04:52:38 +0000 |
commit | 027bc80928e00f143db3de878b4cf828f305a92a (patch) | |
tree | 23069a5443c063a8a4ed2ea5fca28132e2a46400 /llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp | |
parent | 88f45490a0beeebd69856b6099a23ce41b909fdd (diff) | |
download | llvm-027bc80928e00f143db3de878b4cf828f305a92a.zip llvm-027bc80928e00f143db3de878b4cf828f305a92a.tar.gz llvm-027bc80928e00f143db3de878b4cf828f305a92a.tar.bz2 |
InstCombine: Preserve nsw for (mul %V, -1) -> (sub 0, %V)
llvm-svn: 222604
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp b/llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp index 8c48dce..c96c2d6 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp @@ -136,8 +136,13 @@ Instruction *InstCombiner::visitMul(BinaryOperator &I) { if (Value *V = SimplifyUsingDistributiveLaws(I)) return ReplaceInstUsesWith(I, V); - if (match(Op1, m_AllOnes())) // X * -1 == 0 - X - return BinaryOperator::CreateNeg(Op0, I.getName()); + // X * -1 == 0 - X + if (match(Op1, m_AllOnes())) { + BinaryOperator *BO = BinaryOperator::CreateNeg(Op0, I.getName()); + if (I.hasNoSignedWrap()) + BO->setHasNoSignedWrap(); + return BO; + } // Also allow combining multiply instructions on vectors. { |