aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Bitcode
diff options
context:
space:
mode:
authorDale Johannesen <dalej@apple.com>2007-09-06 18:13:44 +0000
committerDale Johannesen <dalej@apple.com>2007-09-06 18:13:44 +0000
commitb9de9f07d611823ea3371b65f87035f482ace2ad (patch)
treeb314e17b0444f33dc3be37eaeaeaa8ea7dd1d17e /lib/Bitcode
parent6d2c506cce46d4edcc314ca363b5e4ec4584cc38 (diff)
downloadexternal_llvm-b9de9f07d611823ea3371b65f87035f482ace2ad.zip
external_llvm-b9de9f07d611823ea3371b65f87035f482ace2ad.tar.gz
external_llvm-b9de9f07d611823ea3371b65f87035f482ace2ad.tar.bz2
Next round of APFloat changes.
Use APFloat in UpgradeParser and AsmParser. Change all references to ConstantFP to use the APFloat interface rather than double. Remove the ConstantFP double interfaces. Use APFloat functions for constant folding arithmetic and comparisons. (There are still way too many places APFloat is just a wrapper around host float/double, but we're getting there.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41747 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bitcode')
-rw-r--r--lib/Bitcode/Reader/BitcodeReader.cpp15
-rw-r--r--lib/Bitcode/Writer/BitcodeWriter.cpp5
2 files changed, 12 insertions, 8 deletions
diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp
index 6ad1fd5..fcf2e51 100644
--- a/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -626,13 +626,16 @@ bool BitcodeReader::ParseConstants() {
if (Record.empty())
return Error("Invalid FLOAT record");
if (CurTy == Type::FloatTy)
- V = ConstantFP::get(CurTy, BitsToFloat(Record[0]));
+ V = ConstantFP::get(CurTy, APFloat((float)BitsToDouble(Record[0])));
else if (CurTy == Type::DoubleTy)
- V = ConstantFP::get(CurTy, BitsToDouble(Record[0]));
- // FIXME: Make long double constants work.
- else if (CurTy == Type::X86_FP80Ty ||
- CurTy == Type::FP128Ty || CurTy == Type::PPC_FP128Ty)
- assert(0 && "Long double constants not handled yet.");
+ V = ConstantFP::get(CurTy, APFloat(BitsToDouble(Record[0])));
+ // FIXME: Make long double constants work. BitsToDouble does not make it.
+ else if (CurTy == Type::X86_FP80Ty)
+ V = ConstantFP::get(CurTy, APFloat(BitsToDouble(Record[0])));
+ else if (CurTy == Type::FP128Ty)
+ V = ConstantFP::get(CurTy, APFloat(BitsToDouble(Record[0])));
+ else if (CurTy == Type::PPC_FP128Ty)
+ assert(0 && "PowerPC long double constants not handled yet.");
else
V = UndefValue::get(CurTy);
break;
diff --git a/lib/Bitcode/Writer/BitcodeWriter.cpp b/lib/Bitcode/Writer/BitcodeWriter.cpp
index 17c14f0..ab3d983 100644
--- a/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -527,9 +527,10 @@ static void WriteConstants(unsigned FirstVal, unsigned LastVal,
Code = bitc::CST_CODE_FLOAT;
const Type *Ty = CFP->getType();
if (Ty == Type::FloatTy) {
- Record.push_back(FloatToBits((float)CFP->getValue()));
+ Record.push_back(DoubleToBits((double)CFP->getValueAPF().
+ convertToFloat()));
} else if (Ty == Type::DoubleTy) {
- Record.push_back(DoubleToBits((double)CFP->getValue()));
+ Record.push_back(DoubleToBits(CFP->getValueAPF().convertToDouble()));
// FIXME: make long double constants work.
} else if (Ty == Type::X86_FP80Ty ||
Ty == Type::FP128Ty || Ty == Type::PPC_FP128Ty) {