mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-17 06:33:21 +00:00
Big programs have tons of global variable initializers, and most passes don't care
about them. Try to delete them if it doesn't affect the passes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5918 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
16608b4c85
commit
5f73e38548
@ -244,6 +244,36 @@ bool BugDriver::debugCrash() {
|
||||
<< getPassesString(PassesToRun) << "\n";
|
||||
|
||||
EmitProgressBytecode("passinput");
|
||||
|
||||
// See if we can get away with nuking all of the global variable initializers
|
||||
// in the program...
|
||||
if (Program->gbegin() != Program->gend()) {
|
||||
Module *M = CloneModule(Program);
|
||||
bool DeletedInit = false;
|
||||
for (Module::giterator I = M->gbegin(), E = M->gend(); I != E; ++I)
|
||||
if (I->hasInitializer()) {
|
||||
I->setInitializer(0);
|
||||
I->setLinkage(GlobalValue::ExternalLinkage);
|
||||
DeletedInit = true;
|
||||
}
|
||||
|
||||
if (!DeletedInit) {
|
||||
delete M; // No change made...
|
||||
} else {
|
||||
// See if the program still causes a crash...
|
||||
std::cout << "\nChecking to see if we can delete global inits: ";
|
||||
std::swap(Program, M);
|
||||
if (runPasses(PassesToRun)) { // Still crashes?
|
||||
AnyReduction = true;
|
||||
delete M;
|
||||
std::cout << "\n*** Able to remove all global initializers!\n";
|
||||
} else { // No longer crashes?
|
||||
delete Program; // Restore program.
|
||||
Program = M;
|
||||
std::cout << " - Removing all global inits hides problem!\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Now try to reduce the number of functions in the module to something small.
|
||||
std::vector<Function*> Functions;
|
||||
|
Loading…
x
Reference in New Issue
Block a user