mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
BitcodeReader: Delay metadata parsing until reading a function body
There's hardly any functionality change here. Instead of calling materializeMetadata on the first call to materialize(GlobalValue*), wait until the first one that's actually going to do something. Noticed by inspection; I don't have a concrete case where this makes a difference. Added an assertion in materializeMetadata to be sure this (or a future change) doesn't delay materializeMetadata after function-level metadata. llvm-svn: 267345
This commit is contained in:
parent
d10e6055f6
commit
e1c776018e
@ -2108,6 +2108,9 @@ void PlaceholderQueue::flush(BitcodeReaderMetadataList &MetadataList) {
|
||||
/// Parse a METADATA_BLOCK. If ModuleLevel is true then we are parsing
|
||||
/// module level metadata.
|
||||
std::error_code BitcodeReader::parseMetadata(bool ModuleLevel) {
|
||||
assert((ModuleLevel || DeferredMetadataInfo.empty()) &&
|
||||
"Must read all module-level metadata before function-level");
|
||||
|
||||
IsMetadataMaterialized = true;
|
||||
unsigned NextMetadataNo = MetadataList.size();
|
||||
|
||||
@ -5547,9 +5550,6 @@ std::error_code BitcodeReader::findFunctionInStream(
|
||||
void BitcodeReader::releaseBuffer() { Buffer.release(); }
|
||||
|
||||
std::error_code BitcodeReader::materialize(GlobalValue *GV) {
|
||||
if (std::error_code EC = materializeMetadata())
|
||||
return EC;
|
||||
|
||||
Function *F = dyn_cast<Function>(GV);
|
||||
// If it's not a function or is already material, ignore the request.
|
||||
if (!F || !F->isMaterializable())
|
||||
@ -5563,6 +5563,10 @@ std::error_code BitcodeReader::materialize(GlobalValue *GV) {
|
||||
if (std::error_code EC = findFunctionInStream(F, DFII))
|
||||
return EC;
|
||||
|
||||
// Materialize metadata before parsing any function bodies.
|
||||
if (std::error_code EC = materializeMetadata())
|
||||
return EC;
|
||||
|
||||
// Move the bit stream to the saved position of the deferred function body.
|
||||
Stream.JumpToBit(DFII->second);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user