Oops, X+0.0 isn't foldable, but X+-0.0 is.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23772 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2005-10-17 17:56:38 +00:00
parent 560a17d3bc
commit 5e678e03b7

View File

@ -694,11 +694,12 @@ Instruction *InstCombiner::visitAdd(BinaryOperator &I) {
return ReplaceInstUsesWith(I, RHS);
// X + 0 --> X
// NOTE: -0 + +0 = +0 in non-default rounding modes. When we support them
// we must disable this. Note that 0.0-0.0 = -0.0, so this doesn't hold
// for SUB.
if (RHSC->isNullValue())
if (!I.getType()->isFloatingPoint()) { // NOTE: -0 + +0 = +0.
if (RHSC->isNullValue())
return ReplaceInstUsesWith(I, LHS);
} else if (cast<ConstantFP>(RHSC)->isExactlyValue(-0.0)) {
return ReplaceInstUsesWith(I, LHS);
}
// X + (signbit) --> X ^ signbit
if (ConstantInt *CI = dyn_cast<ConstantInt>(RHSC)) {