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:
Chris Lattner 2003-04-25 00:53:05 +00:00
parent 16608b4c85
commit 5f73e38548

View File

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