mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 03:24:09 +00:00
Don't ever call materializeAllPermanently during LTO.
To do this, change the representation of lazy loaded functions. The previous representation cannot differentiate between a function whose body has been removed and one whose body hasn't been read from the .bc file. That means that in order to drop a function, the entire body had to be read. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220580 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -2070,6 +2070,7 @@ std::error_code BitcodeReader::ParseModule(bool Resume) {
|
||||
// If this is a function with a body, remember the prototype we are
|
||||
// creating now, so that we can match up the body with them later.
|
||||
if (!isProto) {
|
||||
Func->setIsMaterializable(true);
|
||||
FunctionsWithBodies.push_back(Func);
|
||||
if (LazyStreamer)
|
||||
DeferredFunctionInfo[Func] = 0;
|
||||
@ -3281,14 +3282,6 @@ std::error_code BitcodeReader::FindFunctionInStream(
|
||||
|
||||
void BitcodeReader::releaseBuffer() { Buffer.release(); }
|
||||
|
||||
bool BitcodeReader::isMaterializable(const GlobalValue *GV) const {
|
||||
if (const Function *F = dyn_cast<Function>(GV)) {
|
||||
return F->isDeclaration() &&
|
||||
DeferredFunctionInfo.count(const_cast<Function*>(F));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
std::error_code BitcodeReader::Materialize(GlobalValue *GV) {
|
||||
Function *F = dyn_cast<Function>(GV);
|
||||
// If it's not a function or is already material, ignore the request.
|
||||
@ -3308,6 +3301,7 @@ std::error_code BitcodeReader::Materialize(GlobalValue *GV) {
|
||||
|
||||
if (std::error_code EC = ParseFunctionBody(F))
|
||||
return EC;
|
||||
F->setIsMaterializable(false);
|
||||
|
||||
// Upgrade any old intrinsic calls in the function.
|
||||
for (UpgradedIntrinsicMap::iterator I = UpgradedIntrinsics.begin(),
|
||||
@ -3349,6 +3343,7 @@ void BitcodeReader::Dematerialize(GlobalValue *GV) {
|
||||
|
||||
// Just forget the function body, we can remat it later.
|
||||
F->dropAllReferences();
|
||||
F->setIsMaterializable(true);
|
||||
}
|
||||
|
||||
std::error_code BitcodeReader::MaterializeModule(Module *M) {
|
||||
|
Reference in New Issue
Block a user