Added two new overloaded versions of BatchEmitOwnedPtrs and
authorTed Kremenek <kremenek@apple.com>
Wed, 14 Nov 2007 08:05:03 +0000 (08:05 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 14 Nov 2007 08:05:03 +0000 (08:05 +0000)
BatchReadOwnedPtrs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44105 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bitcode/Deserialize.h
include/llvm/Bitcode/Serialize.h
lib/Bitcode/Reader/Deserialize.cpp

index 0f745d9054b7791f4a8ff9e52b408dc2ec2eaa38..68d94b773d171e651372304ad6d1b5814052e917 100644 (file)
@@ -230,6 +230,32 @@ public:
     }
   }
   
+  template <typename T1, typename T2>
+  void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs, T2*& P2,
+                          bool A1=true, bool A2=true) {
+    
+    BatchIDVec.clear();
+    
+    for (unsigned i = 0; i < NumT1Ptrs; ++i)
+      BatchIDVec.push_back(ReadPtrID());
+    
+    SerializedPtrID ID2 = ReadPtrID();
+    
+    for (unsigned i = 0; i < NumT1Ptrs; ++i) {
+      SerializedPtrID& PtrID = BatchIDVec[i];
+      
+      T1* p = PtrID ? SerializeTrait<T1>::Create(*this) : NULL;
+      
+      if (PtrID && A1)
+        RegisterPtr(PtrID,p);
+      
+      Ptrs[i] = p;
+    }
+    
+    P2 = (ID2) ? SerializeTrait<T2>::Create(*this) : NULL;
+    if (ID2 && A2) RegisterPtr(ID2,P2);    
+  }    
+  
   template <typename T1, typename T2, typename T3>
   void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs, 
                           T2*& P2, T3*& P3,
index 0b99c575436f1e71d64d30876aa946afa78a099b..60d9cb2c992d39054e00823efcf3445e7cf9ef56 100644 (file)
@@ -94,6 +94,20 @@ public:
       if (Ptrs[i]) SerializeTrait<T>::Emit(*this,*Ptrs[i]);
   }
   
+  template <typename T1, typename T2>
+  void BatchEmitOwnedPtrs(unsigned NumT1Ptrs, T1* const * Ptrs, T2* p2) {
+    
+    for (unsigned i = 0; i < NumT1Ptrs; ++i)
+      EmitPtr(Ptrs[i]);
+    
+    EmitPtr(p2);
+    
+    for (unsigned i = 0; i < NumT1Ptrs; ++i)
+      if (Ptrs[i]) SerializeTrait<T1>::Emit(*this,*Ptrs[i]);
+    
+    if (p2) SerializeTrait<T2>::Emit(*this,*p2);
+  }
+  
   template <typename T1, typename T2, typename T3>
   void BatchEmitOwnedPtrs(unsigned NumT1Ptrs, T1* const * Ptrs,
                           T2* p2, T3* p3) {
index ea6b27a62e989330e44e693f92ac85b3a4ae24b2..965ff708a2c99393c5e43923f0ed1b9431f0265a 100644 (file)
@@ -13,6 +13,8 @@
 
 #include "llvm/Bitcode/Deserialize.h"
 
+#define DEBUG_BACKPATCH
+
 #ifdef DEBUG_BACKPATCH
 #include "llvm/Support/Streams.h"
 #endif
@@ -346,18 +348,24 @@ void Deserializer::ReadUIntPtr(uintptr_t& PtrRef,
     return;
   }
   
-#ifdef DEBUG_BACKPATCH
-  llvm::cerr << "ReadUintPtr: " << PtrId << "\n";
-#endif
-  
   MapTy::value_type& E = BPatchMap.FindAndConstruct(BPKey(PtrId));
   
-  if (HasFinalPtr(E))
+  if (HasFinalPtr(E)) {
     PtrRef = GetFinalPtr(E);
+
+#ifdef DEBUG_BACKPATCH
+    llvm::cerr << "ReadUintPtr: " << PtrId
+               << " <-- " <<  (void*) GetFinalPtr(E) << '\n';
+#endif    
+  }
   else {
     assert (AllowBackpatch &&
             "Client forbids backpatching for this pointer.");
     
+#ifdef DEBUG_BACKPATCH
+    llvm::cerr << "ReadUintPtr: " << PtrId << " (NO PTR YET)\n";
+#endif
+    
     // Register backpatch.  Check the freelist for a BPNode.
     BPNode* N;