From 508b19a5a41a4b82be4ae71e6ea5c691bea99b96 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 29 Dec 2009 07:44:16 +0000 Subject: [PATCH] remove some unneeded Metadata interfaces. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92252 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Instruction.h | 1 + include/llvm/Metadata.h | 8 ------- lib/VMCore/Instruction.cpp | 17 +++++++++----- lib/VMCore/Metadata.cpp | 48 ++++++-------------------------------- 4 files changed, 19 insertions(+), 55 deletions(-) diff --git a/include/llvm/Instruction.h b/include/llvm/Instruction.h index b5d5510d7c2..d7161cf3f2f 100644 --- a/include/llvm/Instruction.h +++ b/include/llvm/Instruction.h @@ -160,6 +160,7 @@ private: MDNode *getMetadataImpl(unsigned KindID) const; MDNode *getMetadataImpl(const char *Kind) const; void getAllMetadataImpl(SmallVectorImpl > &)const; + void removeAllMetadata(); public: //===--------------------------------------------------------------------===// // Predicates and helper methods. diff --git a/include/llvm/Metadata.h b/include/llvm/Metadata.h index 1f185369a8d..f45bdb50d80 100644 --- a/include/llvm/Metadata.h +++ b/include/llvm/Metadata.h @@ -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 &) 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 diff --git a/lib/VMCore/Instruction.cpp b/lib/VMCore/Instruction.cpp index 85fd0e85514..a5500e6de48 100644 --- a/lib/VMCore/Instruction.cpp +++ b/lib/VMCore/Instruction.cpp @@ -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, 4> TheMDs; + getAllMetadata(TheMDs); + for (unsigned i = 0, e = TheMDs.size(); i != e; ++i) + New->setMetadata(TheMDs[i].first, TheMDs[i].second); return New; } diff --git a/lib/VMCore/Metadata.cpp b/lib/VMCore/Metadata.cpp index 8fa8d375a14..eb352896e8d 100644 --- a/lib/VMCore/Metadata.cpp +++ b/lib/VMCore/Metadata.cpp @@ -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 &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(SmallVectorImplgetAllMetadata(this, Result); } +/// removeAllMetadata - Remove all metadata from this instruction. +void Instruction::removeAllMetadata() { + assert(hasMetadata() && "Caller should check"); + getContext().getMetadata().pImpl->removeAllMetadata(this); +} +