summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Bitcode/Reader
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2009-07-23 01:07:34 +0000
committerDevang Patel <dpatel@apple.com>2009-07-23 01:07:34 +0000
commite059ba6ed246c714495848df111ef85d253152bb (patch)
treea694f76e139f86ee17d2144c01c79b9f36275706 /llvm/lib/Bitcode/Reader
parentc5b4c0ec64b123989c16498b0f18e0c1bdb8f28b (diff)
downloadbcm5719-llvm-e059ba6ed246c714495848df111ef85d253152bb.tar.gz
bcm5719-llvm-e059ba6ed246c714495848df111ef85d253152bb.zip
Derive MDNode from MetadataBase instead of Constant. Emit MDNodes into METADATA_BLOCK in bitcode file.
llvm-svn: 76834
Diffstat (limited to 'llvm/lib/Bitcode/Reader')
-rw-r--r--llvm/lib/Bitcode/Reader/BitcodeReader.cpp33
1 files changed, 17 insertions, 16 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index d22d467476d..8393cd42163 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -734,6 +734,23 @@ bool BitcodeReader::ParseMetadata() {
switch (Stream.ReadRecord(Code, Record)) {
default: // Default behavior: ignore.
break;
+ case bitc::METADATA_NODE: {
+ if (Record.empty() || Record.size() % 2 == 1)
+ return Error("Invalid METADATA_NODE record");
+
+ unsigned Size = Record.size();
+ SmallVector<Value*, 8> Elts;
+ for (unsigned i = 0; i != Size; i += 2) {
+ const Type *Ty = getTypeByID(Record[i], false);
+ if (Ty != Type::VoidTy)
+ Elts.push_back(ValueList.getValueFwdRef(Record[i+1], Ty));
+ else
+ Elts.push_back(NULL);
+ }
+ Value *V = Context.getMDNode(&Elts[0], Elts.size());
+ ValueList.AssignValue(V, NextValueNo++);
+ break;
+ }
case bitc::METADATA_STRING: {
unsigned MDStringLength = Record.size();
SmallString<8> String;
@@ -1078,22 +1095,6 @@ bool BitcodeReader::ParseConstants() {
AsmStr, ConstrStr, HasSideEffects);
break;
}
- case bitc::CST_CODE_MDNODE: {
- if (Record.empty() || Record.size() % 2 == 1)
- return Error("Invalid CST_MDNODE record");
-
- unsigned Size = Record.size();
- SmallVector<Value*, 8> Elts;
- for (unsigned i = 0; i != Size; i += 2) {
- const Type *Ty = getTypeByID(Record[i], false);
- if (Ty != Type::VoidTy)
- Elts.push_back(ValueList.getValueFwdRef(Record[i+1], Ty));
- else
- Elts.push_back(NULL);
- }
- V = Context.getMDNode(&Elts[0], Elts.size());
- break;
- }
}
ValueList.AssignValue(V, NextCstNo);
OpenPOWER on IntegriCloud