preserve NUW/NSW when transforming add x,x

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125711 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2011-02-17 02:23:02 +00:00
parent 3e468e1efa
commit 41429e3f1e
2 changed files with 15 additions and 2 deletions

View File

@@ -147,8 +147,13 @@ Instruction *InstCombiner::visitAdd(BinaryOperator &I) {
return BinaryOperator::CreateXor(LHS, RHS);
// X + X --> X << 1
if (LHS == RHS && I.getType()->isIntegerTy())
return BinaryOperator::CreateShl(LHS, ConstantInt::get(I.getType(), 1));
if (LHS == RHS && I.getType()->isIntegerTy()) {
BinaryOperator *New =
BinaryOperator::CreateShl(LHS, ConstantInt::get(I.getType(), 1));
New->setHasNoSignedWrap(I.hasNoSignedWrap());
New->setHasNoUnsignedWrap(I.hasNoUnsignedWrap());
return New;
}
// -A + B --> B - A
// -A + -B --> -(A + B)