summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Bytecode/Reader/Reader.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-01-15 18:45:25 +0000
committerChris Lattner <sabre@nondot.org>2004-01-15 18:45:25 +0000
commite2f63174364087b019600f5a14587990bfcfb787 (patch)
tree8632f304f0a4b7388c834f2ff14bbed9d09fb1cd /llvm/lib/Bytecode/Reader/Reader.cpp
parent980ff78e3c67cb660eb88a390581f5c4fc1d3517 (diff)
downloadbcm5719-llvm-e2f63174364087b019600f5a14587990bfcfb787.tar.gz
bcm5719-llvm-e2f63174364087b019600f5a14587990bfcfb787.zip
Allow bytecode files to refer directly to global values as constants, instead
of forcing them to go through ConstantPointerRef's. This allows bytecode files to mirror .ll files, allows more efficient encoding, and makes it easier to eventually eliminate CPR's. llvm-svn: 10883
Diffstat (limited to 'llvm/lib/Bytecode/Reader/Reader.cpp')
-rw-r--r--llvm/lib/Bytecode/Reader/Reader.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Bytecode/Reader/Reader.cpp b/llvm/lib/Bytecode/Reader/Reader.cpp
index bc84135a96f..9cc24b32cda 100644
--- a/llvm/lib/Bytecode/Reader/Reader.cpp
+++ b/llvm/lib/Bytecode/Reader/Reader.cpp
@@ -151,6 +151,10 @@ Constant *BytecodeParser::getConstantValue(unsigned TypeSlot, unsigned Slot) {
if (Value *V = getValue(TypeSlot, Slot, false))
if (Constant *C = dyn_cast<Constant>(V))
return C; // If we already have the value parsed, just return it
+ else if (GlobalValue *GV = dyn_cast<GlobalValue>(V))
+ // ConstantPointerRef's are an abomination, but at least they don't have
+ // to infest bytecode files.
+ return ConstantPointerRef::get(GV);
else
throw std::string("Reference of a value is expected to be a constant!");
@@ -637,10 +641,10 @@ void BytecodeParser::ParseModule(const unsigned char *Buf,
// Look up the initializer value...
// FIXME: Preserve this type ID!
unsigned TypeSlot = getTypeSlot(GV->getType()->getElementType());
- if (Value *V = getValue(TypeSlot, Slot, false)) {
+ if (Constant *CV = getConstantValue(TypeSlot, Slot)) {
if (GV->hasInitializer())
throw std::string("Global *already* has an initializer?!");
- GV->setInitializer(cast<Constant>(V));
+ GV->setInitializer(CV);
} else
throw std::string("Cannot find initializer value.");
}
OpenPOWER on IntegriCloud