Just use APFloat for const / const. Fixes

-1. / -0.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42254 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dale Johannesen 2007-09-24 00:32:45 +00:00
parent 04fa569320
commit 79653fcdc2

View File

@ -699,23 +699,6 @@ Constant *llvm::ConstantFoldBinaryInstruction(unsigned Opcode,
(void)C3V.multiply(C2V, APFloat::rmNearestTiesToEven);
return ConstantFP::get(CFP1->getType(), C3V);
case Instruction::FDiv:
// FIXME better to look at the return code
if (C2V.isZero())
if (C1V.isZero())
// IEEE 754, Section 7.1, #4
return ConstantFP::get(CFP1->getType(), isDouble ?
APFloat(std::numeric_limits<double>::quiet_NaN()) :
APFloat(std::numeric_limits<float>::quiet_NaN()));
else if (C2V.isNegZero() || C1V.isNegative())
// IEEE 754, Section 7.2, negative infinity case
return ConstantFP::get(CFP1->getType(), isDouble ?
APFloat(-std::numeric_limits<double>::infinity()) :
APFloat(-std::numeric_limits<float>::infinity()));
else
// IEEE 754, Section 7.2, positive infinity case
return ConstantFP::get(CFP1->getType(), isDouble ?
APFloat(std::numeric_limits<double>::infinity()) :
APFloat(std::numeric_limits<float>::infinity()));
(void)C3V.divide(C2V, APFloat::rmNearestTiesToEven);
return ConstantFP::get(CFP1->getType(), C3V);
case Instruction::FRem: