mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Remove the IsStreamed member variable.
Having different code paths for streamed and regular bitcode reading was a source of bugs in the past and this defines them away. It has a small but noticeable impact on performance. I timed running "opt -disable-output -disable-verify" on a ltoed clang. It goes from 14.752845231 seconds time elapsed ( +- 0.16% ) to 15.012463721 seconds time elapsed ( +- 0.11% ) Extracted from a patch by Karl Schimpf. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240305 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e0ef46e5e7
commit
21a540abc4
@ -136,7 +136,6 @@ class BitcodeReader : public GVMaterializer {
|
||||
std::unique_ptr<MemoryBuffer> Buffer;
|
||||
std::unique_ptr<BitstreamReader> StreamFile;
|
||||
BitstreamCursor Stream;
|
||||
bool IsStreamed;
|
||||
uint64_t NextUnreadBit = 0;
|
||||
bool SeenValueSymbolTable = false;
|
||||
|
||||
@ -428,15 +427,13 @@ BitcodeReader::BitcodeReader(MemoryBuffer *Buffer, LLVMContext &Context,
|
||||
DiagnosticHandlerFunction DiagnosticHandler)
|
||||
: Context(Context),
|
||||
DiagnosticHandler(getDiagHandler(DiagnosticHandler, Context)),
|
||||
Buffer(Buffer), IsStreamed(false), ValueList(Context),
|
||||
MDValueList(Context) {}
|
||||
Buffer(Buffer), ValueList(Context), MDValueList(Context) {}
|
||||
|
||||
BitcodeReader::BitcodeReader(LLVMContext &Context,
|
||||
DiagnosticHandlerFunction DiagnosticHandler)
|
||||
: Context(Context),
|
||||
DiagnosticHandler(getDiagHandler(DiagnosticHandler, Context)),
|
||||
Buffer(nullptr), IsStreamed(true), ValueList(Context),
|
||||
MDValueList(Context) {}
|
||||
Buffer(nullptr), ValueList(Context), MDValueList(Context) {}
|
||||
|
||||
std::error_code BitcodeReader::materializeForwardReferencedFunctions() {
|
||||
if (WillMaterializeAllForwardRefs)
|
||||
@ -2789,13 +2786,11 @@ std::error_code BitcodeReader::parseModule(bool Resume,
|
||||
|
||||
if (std::error_code EC = rememberAndSkipFunctionBody())
|
||||
return EC;
|
||||
// For streaming bitcode, suspend parsing when we reach the function
|
||||
// bodies. Subsequent materialization calls will resume it when
|
||||
// necessary. For streaming, the function bodies must be at the end of
|
||||
// the bitcode. If the bitcode file is old, the symbol table will be
|
||||
// at the end instead and will not have been seen yet. In this case,
|
||||
// just finish the parse now.
|
||||
if (IsStreamed && SeenValueSymbolTable) {
|
||||
// Suspend parsing when we reach the function bodies. Subsequent
|
||||
// materialization calls will resume it when necessary. If the bitcode
|
||||
// file is old, the symbol table will be at the end instead and will not
|
||||
// have been seen yet. In this case, just finish the parse now.
|
||||
if (SeenValueSymbolTable) {
|
||||
NextUnreadBit = Stream.GetCurrentBitNo();
|
||||
return std::error_code();
|
||||
}
|
||||
@ -3049,8 +3044,7 @@ std::error_code BitcodeReader::parseModule(bool Resume,
|
||||
if (!isProto) {
|
||||
Func->setIsMaterializable(true);
|
||||
FunctionsWithBodies.push_back(Func);
|
||||
if (IsStreamed)
|
||||
DeferredFunctionInfo[Func] = 0;
|
||||
DeferredFunctionInfo[Func] = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -4434,7 +4428,7 @@ std::error_code BitcodeReader::materialize(GlobalValue *GV) {
|
||||
assert(DFII != DeferredFunctionInfo.end() && "Deferred function not found!");
|
||||
// If its position is recorded as 0, its body is somewhere in the stream
|
||||
// but we haven't seen it yet.
|
||||
if (DFII->second == 0 && IsStreamed)
|
||||
if (DFII->second == 0)
|
||||
if (std::error_code EC = findFunctionInStream(F, DFII))
|
||||
return EC;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user