diff options
author | Neil Booth <neil@daikokuya.co.uk> | 2007-10-07 11:45:55 +0000 |
---|---|---|
committer | Neil Booth <neil@daikokuya.co.uk> | 2007-10-07 11:45:55 +0000 |
commit | ccf596a53e16ea221a9bf8b3874a7d6afa71f1f4 (patch) | |
tree | 8323d17a395d8dbbb4d9c91239fc92e1ebb439fa | |
parent | 33d4c92e78a32a8e07ab3ebc1487b07304875ddd (diff) |
convertFromInteger, as originally written, expected sign-extended
input. APInt unfortunately zero-extends signed integers, so Dale
modified the function to expect zero-extended input. Make this
assumption explicit in the function name.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42732 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/ADT/APFloat.h | 4 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 4 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 2 | ||||
-rw-r--r-- | lib/ExecutionEngine/ExecutionEngine.cpp | 4 | ||||
-rw-r--r-- | lib/Support/APFloat.cpp | 10 | ||||
-rw-r--r-- | lib/VMCore/ConstantFold.cpp | 2 |
6 files changed, 14 insertions, 12 deletions
diff --git a/include/llvm/ADT/APFloat.h b/include/llvm/ADT/APFloat.h index d62b5c20c6..7505269c68 100644 --- a/include/llvm/ADT/APFloat.h +++ b/include/llvm/ADT/APFloat.h @@ -194,8 +194,8 @@ namespace llvm { opStatus convert(const fltSemantics &, roundingMode); opStatus convertToInteger(integerPart *, unsigned int, bool, roundingMode) const; - opStatus convertFromInteger(const integerPart *, unsigned int, bool, - roundingMode); + opStatus convertFromZeroExtendedInteger(const integerPart *, unsigned int, + bool, roundingMode); opStatus convertFromString(const char *, roundingMode); APInt convertToAPInt() const; double convertToDouble() const; diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index a928968ef9..09f45d2ce7 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -3234,8 +3234,8 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) { const uint64_t zero[] = {0, 0}; APFloat apf = APFloat(APInt(MVT::getSizeInBits(VT), 2, zero)); uint64_t x = 1ULL << ShiftAmt; - (void)apf.convertFromInteger(&x, MVT::getSizeInBits(NVT), false, - APFloat::rmNearestTiesToEven); + (void)apf.convertFromZeroExtendedInteger + (&x, MVT::getSizeInBits(NVT), false, APFloat::rmNearestTiesToEven); Tmp2 = DAG.getConstantFP(apf, VT); Tmp3 = DAG.getSetCC(TLI.getSetCCResultTy(), Node->getOperand(0), Tmp2, ISD::SETLT); diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 1e76435b07..6a9b14907a 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -1595,7 +1595,7 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT, case ISD::SINT_TO_FP: { const uint64_t zero[] = {0, 0}; APFloat apf = APFloat(APInt(MVT::getSizeInBits(VT), 2, zero)); - (void)apf.convertFromInteger(&Val, + (void)apf.convertFromZeroExtendedInteger(&Val, MVT::getSizeInBits(Operand.getValueType()), Opcode==ISD::SINT_TO_FP, APFloat::rmNearestTiesToEven); diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp index 61be35097b..96604f10bc 100644 --- a/lib/ExecutionEngine/ExecutionEngine.cpp +++ b/lib/ExecutionEngine/ExecutionEngine.cpp @@ -396,7 +396,7 @@ GenericValue ExecutionEngine::getConstantValue(const Constant *C) { else if (CE->getType() == Type::X86_FP80Ty) { const uint64_t zero[] = {0, 0}; APFloat apf = APFloat(APInt(80, 2, zero)); - (void)apf.convertFromInteger(GV.IntVal.getRawData(), + (void)apf.convertFromZeroExtendedInteger(GV.IntVal.getRawData(), GV.IntVal.getBitWidth(), false, APFloat::rmNearestTiesToEven); GV.IntVal = apf.convertToAPInt(); @@ -412,7 +412,7 @@ GenericValue ExecutionEngine::getConstantValue(const Constant *C) { else if (CE->getType() == Type::X86_FP80Ty) { const uint64_t zero[] = { 0, 0}; APFloat apf = APFloat(APInt(80, 2, zero)); - (void)apf.convertFromInteger(GV.IntVal.getRawData(), + (void)apf.convertFromZeroExtendedInteger(GV.IntVal.getRawData(), GV.IntVal.getBitWidth(), true, APFloat::rmNearestTiesToEven); GV.IntVal = apf.convertToAPInt(); diff --git a/lib/Support/APFloat.cpp b/lib/Support/APFloat.cpp index 2037210e05..5e3504b19a 100644 --- a/lib/Support/APFloat.cpp +++ b/lib/Support/APFloat.cpp @@ -1247,8 +1247,8 @@ APFloat::mod(const APFloat &rhs, roundingMode rounding_mode) if (fs==opInvalidOp) return fs; - fs = V.convertFromInteger(x, parts * integerPartWidth, true, - rmNearestTiesToEven); + fs = V.convertFromZeroExtendedInteger(x, parts * integerPartWidth, true, + rmNearestTiesToEven); assert(fs==opOK); // should always work fs = V.multiply(rhs, rounding_mode); @@ -1576,9 +1576,11 @@ APFloat::convertFromUnsignedInteger(integerPart *parts, return normalize(rounding_mode, lost_fraction); } +/* FIXME: should this just take a const APInt reference? */ APFloat::opStatus -APFloat::convertFromInteger(const integerPart *parts, unsigned int width, - bool isSigned, roundingMode rounding_mode) +APFloat::convertFromZeroExtendedInteger(const integerPart *parts, + unsigned int width, bool isSigned, + roundingMode rounding_mode) { unsigned int partCount = partCountForBits(width); opStatus status; diff --git a/lib/VMCore/ConstantFold.cpp b/lib/VMCore/ConstantFold.cpp index 72077db378..8234900032 100644 --- a/lib/VMCore/ConstantFold.cpp +++ b/lib/VMCore/ConstantFold.cpp @@ -216,7 +216,7 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, const Constant *V, uint32_t BitWidth = cast<IntegerType>(SrcTy)->getBitWidth(); APFloat apf = APFloat(APInt(DestTy->getPrimitiveSizeInBits(), 2, zero)); - (void)apf.convertFromInteger(api.getRawData(), BitWidth, + (void)apf.convertFromZeroExtendedInteger(api.getRawData(), BitWidth, opc==Instruction::SIToFP, APFloat::rmNearestTiesToEven); return ConstantFP::get(DestTy, apf); |