Index: lib/Bitcode/Reader/BitcodeReader.h |
diff --git a/lib/Bitcode/Reader/BitcodeReader.h b/lib/Bitcode/Reader/BitcodeReader.h |
index add8ac56ccb986289163c50b58c746754790cd40..174509f5f310bd13919a13a5a7741579d9feed8c 100644 |
--- a/lib/Bitcode/Reader/BitcodeReader.h |
+++ b/lib/Bitcode/Reader/BitcodeReader.h |
@@ -126,8 +126,10 @@ class BitcodeReader : public GVMaterializer { |
Module *TheModule; |
MemoryBuffer *Buffer; |
bool BufferOwned; |
- BitstreamReader StreamFile; |
+ OwningPtr<BitstreamReader> StreamFile; |
BitstreamCursor Stream; |
+ BitcodeStreamer *LazyStreamer; |
+ uint64_t NextUnreadBit; |
const char *ErrorString; |
@@ -160,9 +162,10 @@ class BitcodeReader : public GVMaterializer { |
// Map the bitcode's custom MDKind ID to the Module's MDKind ID. |
DenseMap<unsigned, unsigned> MDKindMap; |
- // After the module header has been read, the FunctionsWithBodies list is |
- // reversed. This keeps track of whether we've done this yet. |
- bool HasReversedFunctionsWithBodies; |
+ // Several operations happen after the module header has been read, but |
+ // before function bodies are processed. This keeps track of whether |
+ // we've done this yet. |
+ bool SeenFirstFunctionBody; |
/// DeferredFunctionInfo - When function bodies are initially scanned, this |
/// map contains info about where to find deferred function body in the |
@@ -177,8 +180,13 @@ class BitcodeReader : public GVMaterializer { |
public: |
explicit BitcodeReader(MemoryBuffer *buffer, LLVMContext &C) |
: Context(C), TheModule(0), Buffer(buffer), BufferOwned(false), |
- ErrorString(0), ValueList(C), MDValueList(C) { |
- HasReversedFunctionsWithBodies = false; |
+ LazyStreamer(0), ErrorString(0), ValueList(C), MDValueList(C), |
+ SeenFirstFunctionBody(false) { |
+ } |
+ explicit BitcodeReader(BitcodeStreamer *streamer, LLVMContext &C) |
+ : Context(C), TheModule(0), Buffer(0), BufferOwned(false), |
+ LazyStreamer(streamer), ErrorString(0), ValueList(C), MDValueList(C), |
+ SeenFirstFunctionBody(false) { |
} |
~BitcodeReader() { |
FreeState(); |
@@ -255,7 +263,7 @@ private: |
} |
- bool ParseModule(); |
+ bool ParseModule(bool Resume); |
bool ParseAttributeBlock(); |
bool ParseTypeTable(); |
bool ParseTypeTableBody(); |
@@ -264,10 +272,17 @@ private: |
bool ParseConstants(); |
bool RememberAndSkipFunctionBody(); |
bool ParseFunctionBody(Function *F); |
+ bool GlobalCleanup(); |
bool ResolveGlobalAndAliasInits(); |
bool ParseMetadata(); |
bool ParseMetadataAttachment(); |
bool ParseModuleTriple(std::string &Triple); |
+ bool InitStream(); |
+ bool InitStreamFromBuffer(); |
+ bool InitLazyStream(); |
+ bool SuspendModuleParse(); |
+ bool FindFunctionInStream(Function *F, |
+ DenseMap<Function*, uint64_t>::iterator DeferredFunctionInfoIterator); |
}; |
} // End llvm namespace |