From: Ted Kremenek Date: Wed, 7 Nov 2007 22:30:29 +0000 (+0000) Subject: Added methods to batch emit and deserialize owned pointers. This allows X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=6d8ab4ae81f0dd8ac80f25b31a3a1eff55126121;p=oota-llvm.git Added methods to batch emit and deserialize owned pointers. This allows to group the pointer IDs together in the bitstream before their referenced contents (which will lend itself to more efficient encoding). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43845 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Bitcode/Deserialize.h b/include/llvm/Bitcode/Deserialize.h index 9808a152c0b..e77c6c9fa7f 100644 --- a/include/llvm/Bitcode/Deserialize.h +++ b/include/llvm/Bitcode/Deserialize.h @@ -117,15 +117,15 @@ public: template inline T* ReadOwnedPtr(bool AutoRegister = true) { - unsigned PtrId = ReadInt(); + unsigned PtrID = ReadInt(); - if (PtrId == 0) + if (!PtrID) return NULL; T* x = SerializeTrait::Materialize(*this); - + if (AutoRegister) - RegisterPtr(PtrId,x); + RegisterPtr(PtrID,x); return x; } @@ -135,6 +135,39 @@ public: Ptr = ReadOwnedPtr(AutoRegister); } + template + void BatchReadOwnedPtrs(T1*& P1, T2*& P2, + bool A1=true, bool A2=true) { + + unsigned ID1 = ReadInt(); + unsigned ID2 = ReadInt(); + + P1 = (ID1) ? SerializeTrait::Materialize(*this) : NULL; + if (ID1 && A1) RegisterPtr(ID1,P1); + + P2 = (ID2) ? SerializeTrait::Materialize(*this) : NULL; + if (ID2 && A2) RegisterPtr(ID2,P2); + } + + template + void BatchReadOwnedPtrs(T1*& P1, T2*& P2, T3*& P3, + bool A1=true, bool A2=true, bool A3=true) { + + unsigned ID1 = ReadInt(); + unsigned ID2 = ReadInt(); + unsigned ID3 = ReadInt(); + + P1 = (ID1) ? SerializeTrait::Materialize(*this) : NULL; + if (ID1 && A1) RegisterPtr(ID1,P1); + + P2 = (ID2) ? SerializeTrait::Materialize(*this) : NULL; + if (ID2 && A2) RegisterPtr(ID2,P2); + + P3 = (ID3) ? SerializeTrait::Materialize(*this) : NULL; + if (ID3 && A3) RegisterPtr(ID3,P3); + } + + template void ReadPtr(T*& PtrRef, bool AllowBackpatch = true) { ReadUIntPtr(reinterpret_cast(PtrRef), AllowBackpatch); diff --git a/include/llvm/Bitcode/Serialize.h b/include/llvm/Bitcode/Serialize.h index 8431898deb4..b92d49a7ea0 100644 --- a/include/llvm/Bitcode/Serialize.h +++ b/include/llvm/Bitcode/Serialize.h @@ -54,6 +54,36 @@ public: EmitPtr(ptr); if (ptr) SerializeTrait::Emit(*this,*ptr); } + + template + void BatchEmitOwnedPtrs(T1* p1, T2* p2) { + EmitPtr(p1); + EmitPtr(p2); + if (p1) SerializeTrait::Emit(*this,*p1); + if (p2) SerializeTrait::Emit(*this,*p2); + } + + template + void BatchEmitOwnedPtrs(T1* p1, T2* p2, T3* p3) { + EmitPtr(p1); + EmitPtr(p2); + EmitPtr(p3); + if (p1) SerializeTrait::Emit(*this,*p1); + if (p2) SerializeTrait::Emit(*this,*p2); + if (p3) SerializeTrait::Emit(*this,*p3); + } + + template + void BatchEmitOwnedPtrs(T1* p1, T2* p2, T3* p3, T4& p4) { + EmitPtr(p1); + EmitPtr(p2); + EmitPtr(p3); + EmitPtr(p4); + if (p1) SerializeTrait::Emit(*this,*p1); + if (p2) SerializeTrait::Emit(*this,*p2); + if (p3) SerializeTrait::Emit(*this,*p3); + if (p4) SerializeTrait::Emit(*this,*p4); + } void FlushRecord() { if (inRecord()) EmitRecord(); }