summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Bitcode/Writer
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2010-01-07 19:39:36 +0000
committerDevang Patel <dpatel@apple.com>2010-01-07 19:39:36 +0000
commitfcfee0ff35ccc293621412a10426c0e222aaba14 (patch)
tree9cd3773a0c29673632ae1a3d3da4d87b4de81ca4 /llvm/lib/Bitcode/Writer
parent64fe23370481d2c18460367ff8b933a7e4884c52 (diff)
downloadbcm5719-llvm-fcfee0ff35ccc293621412a10426c0e222aaba14.tar.gz
bcm5719-llvm-fcfee0ff35ccc293621412a10426c0e222aaba14.zip
Use separate namespace for named metadata.
llvm-svn: 92931
Diffstat (limited to 'llvm/lib/Bitcode/Writer')
-rw-r--r--llvm/lib/Bitcode/Writer/BitcodeWriter.cpp7
-rw-r--r--llvm/lib/Bitcode/Writer/ValueEnumerator.cpp13
-rw-r--r--llvm/lib/Bitcode/Writer/ValueEnumerator.h2
3 files changed, 16 insertions, 6 deletions
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
index ce9036bd06e..d34e24ccb5a 100644
--- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -528,10 +528,9 @@ static void WriteModuleMetadata(const ValueEnumerator &VE,
}
// Write name.
- std::string Str = NMD->getNameStr();
- const char *StrBegin = Str.c_str();
- for (unsigned i = 0, e = Str.length(); i != e; ++i)
- Record.push_back(StrBegin[i]);
+ StringRef Str = NMD->getName();
+ for (unsigned i = 0, e = Str.size(); i != e; ++i)
+ Record.push_back(Str[i]);
Stream.EmitRecord(bitc::METADATA_NAME, Record, 0/*TODO*/);
Record.clear();
diff --git a/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp b/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
index c409c2066d1..54bf84d261d 100644
--- a/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
+++ b/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
@@ -74,9 +74,10 @@ ValueEnumerator::ValueEnumerator(const Module *M) {
// Enumerate types used by the type symbol table.
EnumerateTypeSymbolTable(M->getTypeSymbolTable());
- // Insert constants that are named at module level into the slot pool so that
- // the module symbol table can refer to them...
+ // Insert constants and metadata that are named at module level into the slot
+ // pool so that the module symbol table can refer to them...
EnumerateValueSymbolTable(M->getValueSymbolTable());
+ EnumerateMDSymbolTable(M->getMDSymbolTable());
SmallVector<std::pair<unsigned, MDNode*>, 8> MDs;
@@ -196,6 +197,14 @@ void ValueEnumerator::EnumerateValueSymbolTable(const ValueSymbolTable &VST) {
EnumerateValue(VI->getValue());
}
+/// EnumerateMDSymbolTable - Insert all of the values in the specified metadata
+/// table.
+void ValueEnumerator::EnumerateMDSymbolTable(const MDSymbolTable &MST) {
+ for (MDSymbolTable::const_iterator MI = MST.begin(), ME = MST.end();
+ MI != ME; ++MI)
+ EnumerateValue(MI->getValue());
+}
+
void ValueEnumerator::EnumerateMetadata(const MetadataBase *MD) {
// Check to see if it's already in!
unsigned &MDValueID = MDValueMap[MD];
diff --git a/llvm/lib/Bitcode/Writer/ValueEnumerator.h b/llvm/lib/Bitcode/Writer/ValueEnumerator.h
index 3c83e356956..a1b188ef9ba 100644
--- a/llvm/lib/Bitcode/Writer/ValueEnumerator.h
+++ b/llvm/lib/Bitcode/Writer/ValueEnumerator.h
@@ -30,6 +30,7 @@ class MetadataBase;
class AttrListPtr;
class TypeSymbolTable;
class ValueSymbolTable;
+class MDSymbolTable;
class ValueEnumerator {
public:
@@ -133,6 +134,7 @@ private:
void EnumerateTypeSymbolTable(const TypeSymbolTable &ST);
void EnumerateValueSymbolTable(const ValueSymbolTable &ST);
+ void EnumerateMDSymbolTable(const MDSymbolTable &ST);
};
} // End llvm namespace
OpenPOWER on IntegriCloud