[llvm-commits] [llvm] r84885 - in /llvm/trunk: include/llvm/Metadata.h lib/Bitcode/Writer/BitcodeWriter.cpp lib/Bitcode/Writer/ValueEnumerator.cpp lib/VMCore/AsmWriter.cpp lib/VMCore/Metadata.cpp
Devang Patel
dpatel at apple.com
Thu Oct 22 11:55:16 PDT 2009
Author: dpatel
Date: Thu Oct 22 13:55:16 2009
New Revision: 84885
URL: http://llvm.org/viewvc/llvm-project?rev=84885&view=rev
Log:
Fix getMDs() interface such that it does not expose implementation details.
Modified:
llvm/trunk/include/llvm/Metadata.h
llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp
llvm/trunk/lib/VMCore/AsmWriter.cpp
llvm/trunk/lib/VMCore/Metadata.cpp
Modified: llvm/trunk/include/llvm/Metadata.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Metadata.h?rev=84885&r1=84884&r2=84885&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Metadata.h (original)
+++ llvm/trunk/include/llvm/Metadata.h Thu Oct 22 13:55:16 2009
@@ -254,7 +254,7 @@
MDNode *getMD(unsigned Kind, const Instruction *Inst);
/// getMDs - Get the metadata attached to an Instruction.
- const MDMapTy *getMDs(const Instruction *Inst);
+ void getMDs(const Instruction *Inst, SmallVectorImpl<MDPairTy> &MDs) const;
/// addMD - Attach the metadata of given kind to an Instruction.
void addMD(unsigned Kind, MDNode *Node, Instruction *Inst);
Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=84885&r1=84884&r2=84885&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
+++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Thu Oct 22 13:55:16 2009
@@ -561,14 +561,16 @@
// Write metadata attachments
// METADATA_ATTACHMENT - [m x [value, [n x [id, mdnode]]]
MetadataContext &TheMetadata = F.getContext().getMetadata();
+ typedef SmallVector<std::pair<unsigned, TrackingVH<MDNode> >, 2> MDMapTy;
+ MDMapTy MDs;
for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
I != E; ++I) {
- const MetadataContext::MDMapTy *P = TheMetadata.getMDs(I);
- if (!P) continue;
+ MDs.clear();
+ TheMetadata.getMDs(I, MDs);
bool RecordedInstruction = false;
- for (MetadataContext::MDMapTy::const_iterator PI = P->begin(),
- PE = P->end(); PI != PE; ++PI) {
+ for (MDMapTy::const_iterator PI = MDs.begin(), PE = MDs.end();
+ PI != PE; ++PI) {
if (RecordedInstruction == false) {
Record.push_back(VE.getInstructionID(I));
RecordedInstruction = true;
Modified: llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp?rev=84885&r1=84884&r2=84885&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp (original)
+++ llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp Thu Oct 22 13:55:16 2009
@@ -87,6 +87,8 @@
EnumerateType(I->getType());
MetadataContext &TheMetadata = F->getContext().getMetadata();
+ typedef SmallVector<std::pair<unsigned, TrackingVH<MDNode> >, 2> MDMapTy;
+ MDMapTy MDs;
for (Function::const_iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E;++I){
for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
@@ -99,11 +101,11 @@
EnumerateAttributes(II->getAttributes());
// Enumerate metadata attached with this instruction.
- const MetadataContext::MDMapTy *MDs = TheMetadata.getMDs(I);
- if (MDs)
- for (MetadataContext::MDMapTy::const_iterator MI = MDs->begin(),
- ME = MDs->end(); MI != ME; ++MI)
- EnumerateMetadata(MI->second);
+ MDs.clear();
+ TheMetadata.getMDs(I, MDs);
+ for (MDMapTy::const_iterator MI = MDs.begin(), ME = MDs.end(); MI != ME;
+ ++MI)
+ EnumerateMetadata(MI->second);
}
}
Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AsmWriter.cpp?rev=84885&r1=84884&r2=84885&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/AsmWriter.cpp (original)
+++ llvm/trunk/lib/VMCore/AsmWriter.cpp Thu Oct 22 13:55:16 2009
@@ -680,6 +680,8 @@
ST_DEBUG("Inserting Instructions:\n");
MetadataContext &TheMetadata = TheFunction->getContext().getMetadata();
+ typedef SmallVector<std::pair<unsigned, TrackingVH<MDNode> >, 2> MDMapTy;
+ MDMapTy MDs;
// Add all of the basic blocks and instructions with no names.
for (Function::const_iterator BB = TheFunction->begin(),
@@ -696,11 +698,11 @@
CreateMetadataSlot(N);
// Process metadata attached with this instruction.
- const MetadataContext::MDMapTy *MDs = TheMetadata.getMDs(I);
- if (MDs)
- for (MetadataContext::MDMapTy::const_iterator MI = MDs->begin(),
- ME = MDs->end(); MI != ME; ++MI)
- CreateMetadataSlot(MI->second);
+ MDs.clear();
+ TheMetadata.getMDs(I, MDs);
+ for (MDMapTy::const_iterator MI = MDs.begin(), ME = MDs.end(); MI != ME;
+ ++MI)
+ CreateMetadataSlot(MI->second);
}
}
@@ -2034,12 +2036,13 @@
// Print Metadata info
if (!MDNames.empty()) {
MetadataContext &TheMetadata = I.getContext().getMetadata();
- const MetadataContext::MDMapTy *MDMap = TheMetadata.getMDs(&I);
- if (MDMap)
- for (MetadataContext::MDMapTy::const_iterator MI = MDMap->begin(),
- ME = MDMap->end(); MI != ME; ++MI)
- Out << ", !" << MDNames[MI->first]
- << " !" << Machine.getMetadataSlot(MI->second);
+ typedef SmallVector<std::pair<unsigned, TrackingVH<MDNode> >, 2> MDMapTy;
+ MDMapTy MDs;
+ TheMetadata.getMDs(&I, MDs);
+ for (MDMapTy::const_iterator MI = MDs.begin(), ME = MDs.end(); MI != ME;
+ ++MI)
+ Out << ", !" << MDNames[MI->first]
+ << " !" << Machine.getMetadataSlot(MI->second);
}
printInfoComment(I);
}
Modified: llvm/trunk/lib/VMCore/Metadata.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Metadata.cpp?rev=84885&r1=84884&r2=84885&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/Metadata.cpp (original)
+++ llvm/trunk/lib/VMCore/Metadata.cpp Thu Oct 22 13:55:16 2009
@@ -294,13 +294,15 @@
}
/// getMDs - Get the metadata attached to an Instruction.
-const MetadataContext::MDMapTy *
-MetadataContext::getMDs(const Instruction *Inst) {
+void MetadataContext::
+getMDs(const Instruction *Inst, SmallVectorImpl<MDPairTy> &MDs) const {
MDStoreTy::iterator I = MetadataStore.find(Inst);
if (I == MetadataStore.end())
- return NULL;
-
- return &I->second;
+ return;
+ for (MDMapTy::iterator MI = I->second.begin(), ME = I->second.end();
+ MI != ME; ++MI)
+ MDs.push_back(std::make_pair(MI->first, MI->second));
+ std::sort(MDs.begin(), MDs.end());
}
/// getHandlerNames - Populate client supplied smallvector using custome
More information about the llvm-commits
mailing list