avoid temporary CallbackVH's.
authorChris Lattner <sabre@nondot.org>
Mon, 28 Dec 2009 09:10:16 +0000 (09:10 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 28 Dec 2009 09:10:16 +0000 (09:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92218 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Metadata.cpp

index c1213a3d3a9d789c537fa894ebf9b6a5ee08d937..2bf2c60f7ce11423082c75ceadf09aea71d230b1 100644 (file)
@@ -64,6 +64,11 @@ public:
   MDNodeElement(Value *V, MDNode *P) : CallbackVH(V), Parent(P) {}
   ~MDNodeElement() {}
   
+  void set(Value *V, MDNode *P) {
+    setValPtr(V);
+    Parent = P;
+  }
+  
   virtual void deleted();
   virtual void allUsesReplacedWith(Value *NV);
 };
@@ -91,7 +96,7 @@ MDNode::MDNode(LLVMContext &C, Value *const *Vals, unsigned NumVals,
   Operands = new MDNodeElement[NumOperands];
   MDNodeElement *Ptr = Operands;
   for (unsigned i = 0; i != NumVals; ++i) 
-    Ptr[i] = MDNodeElement(Vals[i], this);
+    Ptr[i].set(Vals[i], this);
     
   if (isFunctionLocal)
     SubclassData |= FunctionLocalBit;
@@ -161,9 +166,8 @@ void MDNode::replaceElement(Value *From, Value *To) {
 
   // Replace From element(s) in place.
   for (SmallVector<unsigned, 4>::iterator I = Indexes.begin(), E = Indexes.end(); 
-       I != E; ++I) {
-    Operands[*I] = MDNodeElement(To, this);
-  }
+       I != E; ++I)
+    Operands[*I].set(To, this);
 
   // Insert updated "this" into the context's folding node set.
   // If a node with same element list already exist then before inserting