summaryrefslogtreecommitdiff
path: root/lib/Bytecode
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2007-02-28 02:25:48 +0000
committerReid Spencer <rspencer@reidspencer.com>2007-02-28 02:25:48 +0000
commitfa1353ca5227645fddc8189051a501bda593d60a (patch)
tree5e4df5b5bcaedd99cffc4c8cf841074b699491b4 /lib/Bytecode
parent9abd138a309d3810ee84e4227ca33091423d9729 (diff)
Implement reading of arbitrary precision integers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34718 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bytecode')
-rw-r--r--lib/Bytecode/Reader/Reader.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index 200f0d7a2fe..0e02c6baba9 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -1264,8 +1264,14 @@ Value *BytecodeReader::ParseConstantPoolValue(unsigned TypeID) {
error("Invalid constant integer read.");
Result = ConstantInt::get(IT, Val);
if (Handler) Handler->handleConstantValue(Result);
- } else
- assert(0 && "Integer types > 64 bits not supported");
+ } else {
+ uint32_t numWords = read_vbr_uint();
+ uint64_t *data = new uint64_t[numWords];
+ for (uint32_t i = 0; i < numWords; ++i)
+ data[i] = read_vbr_uint64();
+ Result = ConstantInt::get(IT, APInt(IT->getBitWidth(), numWords, data));
+ if (Handler) Handler->handleConstantValue(Result);
+ }
break;
}
case Type::FloatTyID: {
@@ -1356,8 +1362,7 @@ Value *BytecodeReader::ParseConstantPoolValue(unsigned TypeID) {
// to a null value in a way that isn't predicted when a .bc file is initially
// produced.
assert((!isa<Constant>(Result) || !cast<Constant>(Result)->isNullValue()) ||
- !hasImplicitNull(TypeID) &&
- "Cannot read null values from bytecode!");
+ !hasImplicitNull(TypeID) && "Cannot read null values from bytecode!");
return Result;
}