remove some unneeded Metadata interfaces.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92252 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-12-29 07:44:16 +00:00
parent 7f29dfd75c
commit 508b19a5a4
4 changed files with 19 additions and 55 deletions

View File

@ -160,6 +160,7 @@ private:
MDNode *getMetadataImpl(unsigned KindID) const;
MDNode *getMetadataImpl(const char *Kind) const;
void getAllMetadataImpl(SmallVectorImpl<std::pair<unsigned,MDNode*> > &)const;
void removeAllMetadata();
public:
//===--------------------------------------------------------------------===//
// Predicates and helper methods.

View File

@ -231,14 +231,6 @@ public:
/// getMDKindNames - Populate client supplied SmallVector with the name for
/// each custom metadata ID. ID #0 is not used, so it is filled in as empty.
void getMDKindNames(SmallVectorImpl<StringRef> &) const;
/// ValueIsDeleted - This handler is used to update metadata store
/// when a value is deleted.
void ValueIsDeleted(Instruction *Inst);
/// ValueIsCloned - This handler is used to update metadata store
/// when In1 is cloned to create In2.
void ValueIsCloned(const Instruction *In1, Instruction *In2);
};
} // end llvm namespace

View File

@ -11,12 +11,10 @@
//
//===----------------------------------------------------------------------===//
#include "LLVMContextImpl.h"
#include "llvm/Instruction.h"
#include "llvm/Type.h"
#include "llvm/Instructions.h"
#include "llvm/Function.h"
#include "llvm/Constants.h"
#include "llvm/GlobalVariable.h"
#include "llvm/Module.h"
#include "llvm/Support/CallSite.h"
#include "llvm/Support/LeakDetector.h"
@ -52,7 +50,7 @@ Instruction::Instruction(const Type *ty, unsigned it, Use *Ops, unsigned NumOps,
Instruction::~Instruction() {
assert(Parent == 0 && "Instruction still linked in the program!");
if (hasMetadata())
getContext().pImpl->TheMetadata.ValueIsDeleted(this);
removeAllMetadata();
}
@ -462,7 +460,14 @@ bool Instruction::isSafeToSpeculativelyExecute() const {
Instruction *Instruction::clone() const {
Instruction *New = clone_impl();
New->SubclassOptionalData = SubclassOptionalData;
if (hasMetadata())
getContext().pImpl->TheMetadata.ValueIsCloned(this, New);
if (!hasMetadata())
return New;
// Otherwise, enumerate and copy over metadata from the old instruction to the
// new one.
SmallVector<std::pair<unsigned, MDNode*>, 4> TheMDs;
getAllMetadata(TheMDs);
for (unsigned i = 0, e = TheMDs.size(); i != e; ++i)
New->setMetadata(TheMDs[i].first, TheMDs[i].second);
return New;
}

View File

@ -273,26 +273,12 @@ public:
void setMetadata(Instruction *Inst, unsigned Kind, MDNode *Node);
/// removeAllMetadata - Remove all metadata attached with an instruction.
/// removeAllMetadata - Remove all metadata attached to an instruction.
void removeAllMetadata(Instruction *Inst);
/// copyMD - If metadata is attached with Instruction In1 then attach
/// the same metadata to In2.
void copyMD(Instruction *In1, Instruction *In2);
/// ValueIsDeleted - This handler is used to update metadata store
/// when a value is deleted.
void ValueIsDeleted(const Value *) {}
void ValueIsDeleted(Instruction *Inst) {
removeAllMetadata(Inst);
}
/// ValueIsCloned - This handler is used to update metadata store
/// when In1 is cloned to create In2.
void ValueIsCloned(const Instruction *In1, Instruction *In2);
};
}
@ -413,20 +399,6 @@ void MetadataContextImpl::copyMD(Instruction *In1, Instruction *In2) {
In2->setMetadata(I->first, I->second);
}
/// ValueIsCloned - This handler is used to update metadata store
/// when In1 is cloned to create In2.
void MetadataContextImpl::ValueIsCloned(const Instruction *In1,
Instruction *In2) {
// Find Metadata handles for In1.
MDStoreTy::iterator I = MetadataStore.find(In1);
assert(I != MetadataStore.end() && "Invalid custom metadata info!");
// FIXME: Give all metadata handlers a chance to adjust.
MDMapTy &In1Info = I->second;
for (MDMapTy::iterator I = In1Info.begin(), E = In1Info.end(); I != E; ++I)
In2->setMetadata(I->first, I->second);
}
//===----------------------------------------------------------------------===//
// MetadataContext implementation.
//
@ -466,18 +438,6 @@ void MetadataContext::getMDKindNames(SmallVectorImpl<StringRef> &N) const {
pImpl->getMDKindNames(N);
}
/// ValueIsDeleted - This handler is used to update metadata store
/// when a value is deleted.
void MetadataContext::ValueIsDeleted(Instruction *Inst) {
pImpl->ValueIsDeleted(Inst);
}
/// ValueIsCloned - This handler is used to update metadata store
/// when In1 is cloned to create In2.
void MetadataContext::ValueIsCloned(const Instruction *In1, Instruction *In2) {
pImpl->ValueIsCloned(In1, In2);
}
//===----------------------------------------------------------------------===//
// Instruction Metadata method implementations.
//
@ -509,3 +469,9 @@ void Instruction::getAllMetadataImpl(SmallVectorImpl<std::pair<unsigned,
getContext().getMetadata().pImpl->getAllMetadata(this, Result);
}
/// removeAllMetadata - Remove all metadata from this instruction.
void Instruction::removeAllMetadata() {
assert(hasMetadata() && "Caller should check");
getContext().getMetadata().pImpl->removeAllMetadata(this);
}