Add removeMD().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83107 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2009-09-29 20:42:25 +00:00
parent 58a230a491
commit 74da40a96f
2 changed files with 42 additions and 16 deletions

View File

@ -345,6 +345,12 @@ public:
/// addMD - Attach the metadata of given kind with an Instruction.
void addMD(unsigned Kind, MDNode *Node, Instruction *Inst);
/// removeMD - Remove metadata of given kind attached with an instuction.
void removeMD(unsigned Kind, Instruction *Inst);
/// removeMDs - Remove all metadata attached with an instruction.
void removeMDs(const Instruction *Inst);
/// getHandlerNames - Get handler names. This is used by bitcode
/// writer.
const StringMap<unsigned> *getHandlerNames();
@ -352,7 +358,9 @@ public:
/// ValueIsDeleted - This handler is used to update metadata store
/// when a value is deleted.
void ValueIsDeleted(const Value *V) {}
void ValueIsDeleted(const Instruction *Inst);
void ValueIsDeleted(const Instruction *Inst) {
removeMDs(Inst);
}
/// ValueIsCloned - This handler is used to update metadata store
/// when In1 is cloned to create In2.

View File

@ -327,6 +327,39 @@ void MetadataContext::addMD(unsigned MDKind, MDNode *Node, Instruction *Inst) {
return;
}
/// removeMD - Remove metadata of given kind attached with an instuction.
void MetadataContext::removeMD(unsigned Kind, Instruction *Inst) {
MDStoreTy::iterator I = MetadataStore.find(Inst);
if (I == MetadataStore.end())
return;
MDMapTy &Info = I->second;
for (MDMapTy::iterator MI = Info.begin(), ME = Info.end(); MI != ME; ++MI) {
MDPairTy &P = *MI;
if (P.first == Kind) {
Info.erase(MI);
return;
}
}
return;
}
/// removeMDs - Remove all metadata attached with an instruction.
void MetadataContext::removeMDs(const Instruction *Inst) {
// Find Metadata handles for this instruction.
MDStoreTy::iterator I = MetadataStore.find(Inst);
assert (I != MetadataStore.end() && "Invalid custom metadata info!");
MDMapTy &Info = I->second;
// FIXME : Give all metadata handlers a chance to adjust.
// Remove the entries for this instruction.
Info.clear();
MetadataStore.erase(I);
}
/// getMD - Get the metadata of given kind attached with an Instruction.
/// If the metadata is not found then return 0.
MDNode *MetadataContext::getMD(unsigned MDKind, const Instruction *Inst) {
@ -356,21 +389,6 @@ const StringMap<unsigned> *MetadataContext::getHandlerNames() {
return &MDHandlerNames;
}
/// ValueIsDeleted - This handler is used to update metadata store
/// when a value is deleted.
void MetadataContext::ValueIsDeleted(const Instruction *Inst) {
// Find Metadata handles for this instruction.
MDStoreTy::iterator I = MetadataStore.find(Inst);
assert (I != MetadataStore.end() && "Invalid custom metadata info!");
MDMapTy &Info = I->second;
// FIXME : Give all metadata handlers a chance to adjust.
// Remove the entries for this instruction.
Info.clear();
MetadataStore.erase(I);
}
/// ValueIsCloned - This handler is used to update metadata store
/// when In1 is cloned to create In2.
void MetadataContext::ValueIsCloned(const Instruction *In1, Instruction *In2) {