X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FBitcode%2FDeserialize.h;h=8c9ea89d15225817f73fd14b3bbeee0262be7262;hb=5eca075b74d62c621b160aa216b4cd50829a2cc7;hp=8a9be99199ff39fae24705b67354b65004e95697;hpb=1a8a08a690a06194653f54453ac41e0e0e7bd3a4;p=oota-llvm.git diff --git a/include/llvm/Bitcode/Deserialize.h b/include/llvm/Bitcode/Deserialize.h index 8a9be99199f..8c9ea89d152 100644 --- a/include/llvm/Bitcode/Deserialize.h +++ b/include/llvm/Bitcode/Deserialize.h @@ -2,8 +2,8 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by Ted Kremenek and is distributed under the -// University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // @@ -125,7 +125,7 @@ private: llvm::SmallVector BlockStack; unsigned AbbrevNo; unsigned RecordCode; - Location StreamStart; + uint64_t StreamStart; //===----------------------------------------------------------===// // Public Interface. @@ -151,12 +151,12 @@ public: } template - inline T* Materialize() { - return SerializeTrait::Materialize(*this); + inline T* Create() { + return SerializeTrait::Create(*this); } char* ReadCStr(char* cstr = NULL, unsigned MaxLen=0, bool isNullTerm=true); - void ReadCStr(std::vector& buff, bool isNullTerm=false); + void ReadCStr(std::vector& buff, bool isNullTerm=false, unsigned Idx=0); template inline T* ReadOwnedPtr(bool AutoRegister = true) { @@ -165,14 +165,29 @@ public: if (!PtrID) return NULL; - T* x = SerializeTrait::Materialize(*this); + T* x = SerializeTrait::Create(*this); if (AutoRegister) RegisterPtr(PtrID,x); return x; } - + + template + inline T* ReadOwnedPtr(Arg1& arg1, bool AutoRegister = true) { + SerializedPtrID PtrID = ReadPtrID(); + + if (!PtrID) + return NULL; + + T* x = SerializeTrait::Create(*this, arg1); + + if (AutoRegister) + RegisterPtr(PtrID,x); + + return x; + } + template inline void ReadOwnedPtr(T*& Ptr, bool AutoRegister = true) { Ptr = ReadOwnedPtr(AutoRegister); @@ -185,10 +200,24 @@ public: SerializedPtrID ID1 = ReadPtrID(); SerializedPtrID ID2 = ReadPtrID(); - P1 = (ID1) ? SerializeTrait::Materialize(*this) : NULL; + P1 = (ID1) ? SerializeTrait::Create(*this) : NULL; + if (ID1 && A1) RegisterPtr(ID1,P1); + + P2 = (ID2) ? SerializeTrait::Create(*this) : NULL; + if (ID2 && A2) RegisterPtr(ID2,P2); + } + + template + void BatchReadOwnedPtrs(T1*& P1, T2*& P2, Arg1& arg1, + bool A1=true, bool A2=true) { + + SerializedPtrID ID1 = ReadPtrID(); + SerializedPtrID ID2 = ReadPtrID(); + + P1 = (ID1) ? SerializeTrait::Create(*this, arg1) : NULL; if (ID1 && A1) RegisterPtr(ID1,P1); - P2 = (ID2) ? SerializeTrait::Materialize(*this) : NULL; + P2 = (ID2) ? SerializeTrait::Create(*this, arg1) : NULL; if (ID2 && A2) RegisterPtr(ID2,P2); } @@ -200,32 +229,188 @@ public: SerializedPtrID ID2 = ReadPtrID(); SerializedPtrID ID3 = ReadPtrID(); - P1 = (ID1) ? SerializeTrait::Materialize(*this) : NULL; + P1 = (ID1) ? SerializeTrait::Create(*this) : NULL; if (ID1 && A1) RegisterPtr(ID1,P1); - P2 = (ID2) ? SerializeTrait::Materialize(*this) : NULL; + P2 = (ID2) ? SerializeTrait::Create(*this) : NULL; if (ID2 && A2) RegisterPtr(ID2,P2); - P3 = (ID3) ? SerializeTrait::Materialize(*this) : NULL; + P3 = (ID3) ? SerializeTrait::Create(*this) : NULL; if (ID3 && A3) RegisterPtr(ID3,P3); } - + + template + void BatchReadOwnedPtrs(T1*& P1, T2*& P2, T3*& P3, Arg1& arg1, + bool A1=true, bool A2=true, bool A3=true) { + + SerializedPtrID ID1 = ReadPtrID(); + SerializedPtrID ID2 = ReadPtrID(); + SerializedPtrID ID3 = ReadPtrID(); + + P1 = (ID1) ? SerializeTrait::Create(*this, arg1) : NULL; + if (ID1 && A1) RegisterPtr(ID1,P1); + + P2 = (ID2) ? SerializeTrait::Create(*this, arg1) : NULL; + if (ID2 && A2) RegisterPtr(ID2,P2); + + P3 = (ID3) ? SerializeTrait::Create(*this, arg1) : NULL; + if (ID3 && A3) RegisterPtr(ID3,P3); + } + template void BatchReadOwnedPtrs(unsigned NumPtrs, T** Ptrs, bool AutoRegister=true) { + llvm::SmallVector BatchIDVec; + for (unsigned i = 0; i < NumPtrs; ++i) - reinterpret_cast(Ptrs[i]) = ReadPtrID(); + BatchIDVec.push_back(ReadPtrID()); for (unsigned i = 0; i < NumPtrs; ++i) { - SerializedPtrID PtrID = reinterpret_cast(Ptrs[i]); - T* p = PtrID ? SerializeTrait::Materialize(*this) : NULL; + SerializedPtrID& PtrID = BatchIDVec[i]; + + T* p = PtrID ? SerializeTrait::Create(*this) : NULL; if (PtrID && AutoRegister) RegisterPtr(PtrID,p); Ptrs[i] = p; } + } + + template + void BatchReadOwnedPtrs(unsigned NumPtrs, T** Ptrs, Arg1& arg1, + bool AutoRegister=true) { + + llvm::SmallVector BatchIDVec; + + for (unsigned i = 0; i < NumPtrs; ++i) + BatchIDVec.push_back(ReadPtrID()); + + for (unsigned i = 0; i < NumPtrs; ++i) { + SerializedPtrID& PtrID = BatchIDVec[i]; + + T* p = PtrID ? SerializeTrait::Create(*this, arg1) : NULL; + + if (PtrID && AutoRegister) + RegisterPtr(PtrID,p); + + Ptrs[i] = p; + } + } + + template + void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs, T2*& P2, + bool A1=true, bool A2=true) { + + llvm::SmallVector BatchIDVec; + + 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::Create(*this) : NULL; + + if (PtrID && A1) + RegisterPtr(PtrID,p); + + Ptrs[i] = p; + } + + P2 = (ID2) ? SerializeTrait::Create(*this) : NULL; + if (ID2 && A2) RegisterPtr(ID2,P2); } + template + void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs, T2*& P2, Arg1& arg1, + bool A1=true, bool A2=true) { + + llvm::SmallVector BatchIDVec; + + 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::Create(*this, arg1) : NULL; + + if (PtrID && A1) + RegisterPtr(PtrID,p); + + Ptrs[i] = p; + } + + P2 = (ID2) ? SerializeTrait::Create(*this, arg1) : NULL; + if (ID2 && A2) RegisterPtr(ID2,P2); + } + + template + void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs, + T2*& P2, T3*& P3, + bool A1=true, bool A2=true, bool A3=true) { + + llvm::SmallVector BatchIDVec; + + for (unsigned i = 0; i < NumT1Ptrs; ++i) + BatchIDVec.push_back(ReadPtrID()); + + SerializedPtrID ID2 = ReadPtrID(); + SerializedPtrID ID3 = ReadPtrID(); + + for (unsigned i = 0; i < NumT1Ptrs; ++i) { + SerializedPtrID& PtrID = BatchIDVec[i]; + + T1* p = PtrID ? SerializeTrait::Create(*this) : NULL; + + if (PtrID && A1) + RegisterPtr(PtrID,p); + + Ptrs[i] = p; + } + + P2 = (ID2) ? SerializeTrait::Create(*this) : NULL; + if (ID2 && A2) RegisterPtr(ID2,P2); + + P3 = (ID3) ? SerializeTrait::Create(*this) : NULL; + if (ID3 && A3) RegisterPtr(ID3,P3); + } + + template + void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs, + T2*& P2, T3*& P3, Arg1& arg1, + bool A1=true, bool A2=true, bool A3=true) { + + llvm::SmallVector BatchIDVec; + + for (unsigned i = 0; i < NumT1Ptrs; ++i) + BatchIDVec.push_back(ReadPtrID()); + + SerializedPtrID ID2 = ReadPtrID(); + SerializedPtrID ID3 = ReadPtrID(); + + for (unsigned i = 0; i < NumT1Ptrs; ++i) { + SerializedPtrID& PtrID = BatchIDVec[i]; + + T1* p = PtrID ? SerializeTrait::Create(*this, arg1) : NULL; + + if (PtrID && A1) + RegisterPtr(PtrID,p); + + Ptrs[i] = p; + } + + P2 = (ID2) ? SerializeTrait::Create(*this, arg1) : NULL; + if (ID2 && A2) RegisterPtr(ID2,P2); + + P3 = (ID3) ? SerializeTrait::Create(*this, arg1) : NULL; + if (ID3 && A3) RegisterPtr(ID3,P3); + } + template void ReadPtr(T*& PtrRef, bool AllowBackpatch = true) { ReadUIntPtr(reinterpret_cast(PtrRef), AllowBackpatch); @@ -236,10 +421,29 @@ public: ReadPtr(const_cast(PtrRef), AllowBackpatch); } + + template + void ReadPtr(T*& PtrRef, const SerializedPtrID& PtrID, + bool AllowBackpatch = true) { + ReadUIntPtr(reinterpret_cast(PtrRef), PtrID, AllowBackpatch); + } + + template + void ReadPtr(const T*& PtrRef, const SerializedPtrID& PtrID, + bool AllowBackpatch = true) { + + ReadPtr(const_cast(PtrRef), PtrID, AllowBackpatch); + } + template - T* ReadPtr() { T* x; ReadPtr(x,false); return x; } + T* ReadPtr() { T* x = 0; ReadPtr(x,false); return x; } - void ReadUIntPtr(uintptr_t& PtrRef, bool AllowBackpatch = true); + void ReadUIntPtr(uintptr_t& PtrRef, const SerializedPtrID& PtrID, + bool AllowBackpatch = true); + + void ReadUIntPtr(uintptr_t& PtrRef, bool AllowBackpatch = true) { + ReadUIntPtr(PtrRef,ReadPtrID(),AllowBackpatch); + } template T& ReadRef() { @@ -247,7 +451,7 @@ public: return *p; } - void RegisterPtr(SerializedPtrID PtrId, const void* Ptr); + void RegisterPtr(const SerializedPtrID& PtrID, const void* Ptr); void RegisterPtr(const void* Ptr) { RegisterPtr(ReadPtrID(),Ptr); @@ -259,7 +463,7 @@ public: } template - void RegisterRef(SerializedPtrID PtrID, const T& x) { + void RegisterRef(const SerializedPtrID& PtrID, const T& x) { RegisterPtr(PtrID,&x); } @@ -269,7 +473,7 @@ public: bool FinishedBlock(Location BlockLoc); bool JumpTo(const Location& BlockLoc); - void Rewind() { JumpTo(StreamStart); } + void Rewind(); bool AtEnd(); bool inRecord();