aboutsummaryrefslogtreecommitdiff
path: root/lib/Bitcode
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
commit0386f01e061513094504bc11f8352a40173cada7 (patch)
tree94c2edcbcfba8906e22099dcf3a2c6ef2ebc8897 /lib/Bitcode
parent3c37bb8dbe886993dcd8f37dec0d94762393f3d4 (diff)
Use separate namespace for named metadata.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92931 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bitcode')
-rw-r--r--lib/Bitcode/Writer/BitcodeWriter.cpp7
-rw-r--r--lib/Bitcode/Writer/ValueEnumerator.cpp13
-rw-r--r--lib/Bitcode/Writer/ValueEnumerator.h2
3 files changed, 16 insertions, 6 deletions
diff --git a/lib/Bitcode/Writer/BitcodeWriter.cpp b/lib/Bitcode/Writer/BitcodeWriter.cpp
index ce9036bd06..d34e24ccb5 100644
--- a/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/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/lib/Bitcode/Writer/ValueEnumerator.cpp b/lib/Bitcode/Writer/ValueEnumerator.cpp
index c409c2066d..54bf84d261 100644
--- a/lib/Bitcode/Writer/ValueEnumerator.cpp
+++ b/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/lib/Bitcode/Writer/ValueEnumerator.h b/lib/Bitcode/Writer/ValueEnumerator.h
index 3c83e35695..a1b188ef9b 100644
--- a/lib/Bitcode/Writer/ValueEnumerator.h
+++ b/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