| 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
|
|
|