From 5f73e38548c57636ad0ef8c719d040e166761962 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 25 Apr 2003 00:53:05 +0000 Subject: [PATCH] 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 --- tools/bugpoint/CrashDebugger.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tools/bugpoint/CrashDebugger.cpp b/tools/bugpoint/CrashDebugger.cpp index 2d224f3fbad..fd711d99fc3 100644 --- a/tools/bugpoint/CrashDebugger.cpp +++ b/tools/bugpoint/CrashDebugger.cpp @@ -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 Functions;