Using TrackingVH instead of WeakVH or WeakMetadataVH.
authorDevang Patel <dpatel@apple.com>
Thu, 22 Oct 2009 18:25:28 +0000 (18:25 +0000)
committerDevang Patel <dpatel@apple.com>
Thu, 22 Oct 2009 18:25:28 +0000 (18:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84884 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineModuleInfo.h
include/llvm/Metadata.h
lib/Bitcode/Writer/BitcodeWriter.cpp
lib/Bitcode/Writer/ValueEnumerator.cpp
lib/VMCore/AsmWriter.cpp
lib/VMCore/Metadata.cpp

index 5878d67b939d6fcb757b311e4cf742f9db419b80..1b924f286959ef1f9cd3e4eee4277a29befdb9ad 100644 (file)
@@ -150,7 +150,8 @@ class MachineModuleInfo : public ImmutablePass {
 public:
   static char ID; // Pass identification, replacement for typeid
 
-  typedef SmallVector< std::pair< WeakMetadataVH, unsigned>, 4 > VariableDbgInfoMapTy;
+  typedef SmallVector< std::pair<TrackingVH<MDNode>, unsigned>, 4 > 
+    VariableDbgInfoMapTy;
   VariableDbgInfoMapTy VariableDbgInfo;
 
   MachineModuleInfo();
index 93207b18cc7b86e54add3330e35dcb1cc9720a02..63b9e5ae83b18c1448ca0a62be3a3131652e48ff 100644 (file)
@@ -143,23 +143,6 @@ public:
   }
 };
 
-//===----------------------------------------------------------------------===//
-/// WeakMetadataVH - a weak value handle for metadata.
-class WeakMetadataVH : public WeakVH {
-public:
-  WeakMetadataVH() : WeakVH() {}
-  WeakMetadataVH(MetadataBase *M) : WeakVH(M) {}
-  WeakMetadataVH(const WeakMetadataVH &RHS) : WeakVH(RHS) {}
-  
-  operator Value*() const {
-    llvm_unreachable("WeakMetadataVH only handles Metadata");
-  }
-
-  operator MetadataBase*() const {
-   return dyn_cast_or_null<MetadataBase>(getValPtr());
-  }
-};
-
 //===----------------------------------------------------------------------===//
 /// NamedMDNode - a tuple of other metadata. 
 /// NamedMDNode is always named. All NamedMDNode element has a type of metadata.
@@ -173,8 +156,7 @@ class NamedMDNode : public MetadataBase, public ilist_node<NamedMDNode> {
   NamedMDNode(const NamedMDNode &);      // DO NOT IMPLEMENT
 
   Module *Parent;
-  SmallVector<WeakMetadataVH, 4> Node;
-  typedef SmallVectorImpl<WeakMetadataVH>::iterator elem_iterator;
+  SmallVector<TrackingVH<MetadataBase>, 4> Node;
 
   void setParent(Module *M) { Parent = M; }
 protected:
@@ -216,10 +198,12 @@ public:
 
   /// addElement - Add metadata element.
   void addElement(MetadataBase *M) {
-    Node.push_back(WeakMetadataVH(M));
+    Node.push_back(TrackingVH<MetadataBase>(M));
   }
 
-  typedef SmallVectorImpl<WeakMetadataVH>::const_iterator const_elem_iterator;
+  typedef SmallVectorImpl<TrackingVH<MetadataBase> >::iterator elem_iterator;
+  typedef SmallVectorImpl<TrackingVH<MetadataBase> >::const_iterator 
+    const_elem_iterator;
   bool elem_empty() const                { return Node.empty(); }
   const_elem_iterator elem_begin() const { return Node.begin(); }
   const_elem_iterator elem_end() const   { return Node.end();   }
@@ -241,7 +225,7 @@ public:
 /// is [a-zA-Z$._][a-zA-Z$._0-9]*
 class MetadataContext {
 public:
-  typedef std::pair<unsigned, WeakVH> MDPairTy;
+  typedef std::pair<unsigned, TrackingVH<MDNode> > MDPairTy;
   typedef SmallVector<MDPairTy, 2> MDMapTy;
   typedef DenseMap<const Instruction *, MDMapTy> MDStoreTy;
   friend class BitcodeReader;
index 947b8958a12d0d1e5108a63a25ddf90030392818..c8cb59527d3efba2bfd5e311a741f2ee192f5db2 100644 (file)
@@ -569,14 +569,12 @@ static void WriteMetadataAttachment(const Function &F,
       bool RecordedInstruction = false;
       for (MetadataContext::MDMapTy::const_iterator PI = P->begin(), 
              PE = P->end(); PI != PE; ++PI) {
-        if (MDNode *ND = dyn_cast_or_null<MDNode>(PI->second)) {
-          if (RecordedInstruction == false) {
-            Record.push_back(VE.getInstructionID(I));
-            RecordedInstruction = true;
-          }
-          Record.push_back(PI->first);
-          Record.push_back(VE.getValueID(ND));
+        if (RecordedInstruction == false) {
+          Record.push_back(VE.getInstructionID(I));
+          RecordedInstruction = true;
         }
+        Record.push_back(PI->first);
+        Record.push_back(VE.getValueID(PI->second));
       }
       if (!Record.empty()) {
         if (!StartedMetadataBlock)  {
index ca9fc776bf07fc45d47eacc3820a1e34b9c759e8..4257281a3aa1265adc9a98058c9f696e64c661d2 100644 (file)
@@ -103,8 +103,7 @@ ValueEnumerator::ValueEnumerator(const Module *M) {
         if (MDs)
           for (MetadataContext::MDMapTy::const_iterator MI = MDs->begin(),
                  ME = MDs->end(); MI != ME; ++MI)
-            if (MDNode *MDN = dyn_cast_or_null<MDNode>(MI->second))
-              EnumerateMetadata(MDN);
+            EnumerateMetadata(MI->second);
       }
   }
 
index e6ed81ede02c2b2a055fd04cb52e34dd0930796c..fb1b1ac41c26e6d98355d77d201a68f733ebf43b 100644 (file)
@@ -700,8 +700,7 @@ void SlotTracker::processFunction() {
       if (MDs)
         for (MetadataContext::MDMapTy::const_iterator MI = MDs->begin(),
                ME = MDs->end(); MI != ME; ++MI)
-          if (MDNode *MDN = dyn_cast_or_null<MDNode>(MI->second))
-            CreateMetadataSlot(MDN);
+          CreateMetadataSlot(MI->second);
     }
   }
 
@@ -2039,9 +2038,8 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
     if (MDMap)
       for (MetadataContext::MDMapTy::const_iterator MI = MDMap->begin(),
              ME = MDMap->end(); MI != ME; ++MI)
-        if (const MDNode *MD = dyn_cast_or_null<MDNode>(MI->second))
-          Out << ", !" << MDNames[MI->first]
-              << " !" << Machine.getMetadataSlot(MD);
+        Out << ", !" << MDNames[MI->first]
+            << " !" << Machine.getMetadataSlot(MI->second);
   }
   printInfoComment(I);
 }
index 69b2c6f3f37a09ecd03ccb96da3ca3d48608878a..f4d60714f997cde2071f5fd0f83e988122bdb57c 100644 (file)
@@ -34,7 +34,7 @@ MDString *MDString::get(LLVMContext &Context, StringRef Str) {
   if (S) return S;
   
   return S = 
-    new MDString(Context, StringRef(Entry.getKeyData(), Entry.getKeyLength()));
+    new MDString(Context, Entry.getKey());
 }
 
 //===----------------------------------------------------------------------===//
@@ -151,7 +151,7 @@ NamedMDNode::NamedMDNode(LLVMContext &C, const Twine &N,
   setName(N);
 
   for (unsigned i = 0; i != NumMDs; ++i)
-    Node.push_back(WeakMetadataVH(MDs[i]));
+    Node.push_back(TrackingVH<MetadataBase>(MDs[i]));
 
   if (ParentModule)
     ParentModule->getNamedMDList().push_back(this);
@@ -277,8 +277,7 @@ void MetadataContext::copyMD(Instruction *In1, Instruction *In2) {
     return;
 
   for (MDMapTy::iterator I = In1Info.begin(), E = In1Info.end(); I != E; ++I)
-    if (MDNode *MD = dyn_cast_or_null<MDNode>(I->second))
-      addMD(I->first, MD, In2);
+    addMD(I->first, I->second, In2);
 }
 
 /// getMD - Get the metadata of given kind attached to an Instruction.
@@ -290,7 +289,7 @@ MDNode *MetadataContext::getMD(unsigned MDKind, const Instruction *Inst) {
 
   for (MDMapTy::iterator I = Info.begin(), E = Info.end(); I != E; ++I)
     if (I->first == MDKind)
-      return dyn_cast_or_null<MDNode>(I->second);
+      return I->second;
   return NULL;
 }
 
@@ -326,8 +325,7 @@ void MetadataContext::ValueIsCloned(const Instruction *In1, Instruction *In2) {
   MDMapTy &In1Info = I->second;
   MDMapTy In2Info;
   for (MDMapTy::iterator I = In1Info.begin(), E = In1Info.end(); I != E; ++I)
-    if (MDNode *MD = dyn_cast_or_null<MDNode>(I->second))
-      addMD(I->first, MD, In2);
+    addMD(I->first, I->second, In2);
 }
 
 /// ValueIsRAUWd - This handler is used when V1's all uses are replaced by