One more step towards making doInitialization and doFinalization useful for

start up and clean up module passes, now that ASAN and TSAN are fixed the
tests pass



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168905 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Pedro Artigas 2012-11-29 17:47:05 +00:00
parent 6a144e40b0
commit 6eda081345
11 changed files with 19 additions and 84 deletions

View File

@ -180,7 +180,10 @@ public:
const MCObjectFileInfo *MOFI); const MCObjectFileInfo *MOFI);
~MachineModuleInfo(); ~MachineModuleInfo();
using ModulePass::doInitialization;
bool doInitialization(); bool doInitialization();
using ModulePass::doFinalization;
bool doFinalization(); bool doFinalization();
/// EndFunction - Discard function meta information. /// EndFunction - Discard function meta information.

View File

@ -230,7 +230,7 @@ public:
/// doInitialization - Virtual method overridden by subclasses to do /// doInitialization - Virtual method overridden by subclasses to do
/// any necessary initialization before any pass is run. /// any necessary initialization before any pass is run.
/// ///
virtual bool doInitialization() { return false; } virtual bool doInitialization(Module &) { return false; }
/// runOnModule - Virtual method overriden by subclasses to process the module /// runOnModule - Virtual method overriden by subclasses to process the module
/// being operated on. /// being operated on.
@ -239,7 +239,7 @@ public:
/// doFinalization - Virtual method overriden by subclasses to do any /// doFinalization - Virtual method overriden by subclasses to do any
/// necessary clean up after all passes have run. /// necessary clean up after all passes have run.
/// ///
virtual bool doFinalization() { return false; } virtual bool doFinalization(Module &) { return false; }
virtual void assignPassManager(PMStack &PMS, virtual void assignPassManager(PMStack &PMS,
PassManagerType T); PassManagerType T);

View File

@ -58,14 +58,6 @@ public:
/// whether any of the passes modifies the module, and if so, return true. /// whether any of the passes modifies the module, and if so, return true.
bool run(Module &M); bool run(Module &M);
/// doInitialization - Run all of the initializers for the module passes.
///
bool doInitialization();
/// doFinalization - Run all of the finalizers for the module passes.
///
bool doFinalization();
private: private:
/// PassManagerImpl_New is the actual class. PassManager is just the /// PassManagerImpl_New is the actual class. PassManager is just the
/// wraper to publish simple pass manager interface /// wraper to publish simple pass manager interface

View File

@ -1528,12 +1528,12 @@ bool FPPassManager::runOnFunction(Function &F) {
} }
bool FPPassManager::runOnModule(Module &M) { bool FPPassManager::runOnModule(Module &M) {
bool Changed = doInitialization(M); bool Changed = false;
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
Changed |= runOnFunction(*I); Changed |= runOnFunction(*I);
return doFinalization(M) || Changed; return Changed;
} }
bool FPPassManager::doInitialization(Module &M) { bool FPPassManager::doInitialization(Module &M) {
@ -1541,16 +1541,16 @@ bool FPPassManager::doInitialization(Module &M) {
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index)
Changed |= getContainedPass(Index)->doInitialization(M); Changed |= getContainedPass(Index)->doInitialization(M);
return Changed; return Changed;
} }
bool FPPassManager::doFinalization(Module &M) { bool FPPassManager::doFinalization(Module &M) {
bool Changed = false; bool Changed = false;
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index)
Changed |= getContainedPass(Index)->doFinalization(M); Changed |= getContainedPass(Index)->doFinalization(M);
return Changed; return Changed;
} }
@ -1572,6 +1572,10 @@ MPPassManager::runOnModule(Module &M) {
Changed |= FPP->doInitialization(M); Changed |= FPP->doInitialization(M);
} }
// Initialize module passes
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index)
Changed |= getContainedPass(Index)->doInitialization(M);
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
ModulePass *MP = getContainedPass(Index); ModulePass *MP = getContainedPass(Index);
bool LocalChanged = false; bool LocalChanged = false;
@ -1600,6 +1604,10 @@ MPPassManager::runOnModule(Module &M) {
removeDeadPasses(MP, M.getModuleIdentifier(), ON_MODULE_MSG); removeDeadPasses(MP, M.getModuleIdentifier(), ON_MODULE_MSG);
} }
// Finalize module passes
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index)
Changed |= getContainedPass(Index)->doFinalization(M);
// Finalize on-the-fly passes // Finalize on-the-fly passes
for (std::map<Pass *, FunctionPassManagerImpl *>::iterator for (std::map<Pass *, FunctionPassManagerImpl *>::iterator
I = OnTheFlyManagers.begin(), E = OnTheFlyManagers.end(); I = OnTheFlyManagers.begin(), E = OnTheFlyManagers.end();
@ -1610,29 +1618,7 @@ MPPassManager::runOnModule(Module &M) {
FPP->releaseMemoryOnTheFly(); FPP->releaseMemoryOnTheFly();
Changed |= FPP->doFinalization(M); Changed |= FPP->doFinalization(M);
} }
return Changed;
}
/// Run all of the initializers for the module passes.
///
bool MPPassManager::doInitialization() {
bool Changed = false;
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index)
Changed |= getContainedPass(Index)->doInitialization();
return Changed;
}
/// Run all of the finalizers for the module passes.
///
bool MPPassManager::doFinalization() {
bool Changed = false;
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index)
Changed |= getContainedPass(Index)->doFinalization();
return Changed; return Changed;
} }
@ -1692,24 +1678,6 @@ Pass* MPPassManager::getOnTheFlyPass(Pass *MP, AnalysisID PI, Function &F){
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// PassManagerImpl implementation // PassManagerImpl implementation
bool PassManagerImpl::doInitialization() {
bool Changed = false;
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index)
Changed |= getContainedManager(Index)->doInitialization();
return Changed;
}
bool PassManagerImpl::doFinalization() {
bool Changed = false;
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index)
Changed |= getContainedManager(Index)->doFinalization();
return Changed;
}
// //
/// run - Execute all of the passes scheduled for execution. Keep track of /// run - Execute all of the passes scheduled for execution. Keep track of
/// whether any of the passes modifies the module, and if so, return true. /// whether any of the passes modifies the module, and if so, return true.
@ -1754,18 +1722,6 @@ bool PassManager::run(Module &M) {
return PM->run(M); return PM->run(M);
} }
/// doInitialization - Run all of the initializers for the module passes.
///
bool PassManager::doInitialization() {
return PM->doInitialization();
}
/// doFinalization - Run all of the finalizers for the module passes.
///
bool PassManager::doFinalization() {
return PM->doFinalization();
}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// TimingInfo Class - This class is used to calculate information about the // TimingInfo Class - This class is used to calculate information about the
// amount of time each pass takes to execute. This only happens with // amount of time each pass takes to execute. This only happens with

View File

@ -412,9 +412,7 @@ bool ReduceCrashingInstructions::TestInsts(std::vector<const Instruction*>
// Verify that this is still valid. // Verify that this is still valid.
PassManager Passes; PassManager Passes;
Passes.add(createVerifierPass()); Passes.add(createVerifierPass());
Passes.doInitialization();
Passes.run(*M); Passes.run(*M);
Passes.doFinalization();
// Try running on the hacked up program... // Try running on the hacked up program...
if (TestFn(BD, M)) { if (TestFn(BD, M)) {

View File

@ -359,9 +359,7 @@ int main(int argc, char **argv) {
// Before executing passes, print the final values of the LLVM options. // Before executing passes, print the final values of the LLVM options.
cl::PrintOptionValues(); cl::PrintOptionValues();
PM.doInitialization();
PM.run(*mod); PM.run(*mod);
PM.doFinalization();
} }
// Declare success. // Declare success.

View File

@ -276,9 +276,7 @@ int main(int argc, char **argv) {
else if (Force || !CheckBitcodeOutputToConsole(Out.os(), true)) else if (Force || !CheckBitcodeOutputToConsole(Out.os(), true))
Passes.add(createBitcodeWriterPass(Out.os())); Passes.add(createBitcodeWriterPass(Out.os()));
Passes.doInitialization();
Passes.run(*M.get()); Passes.run(*M.get());
Passes.doFinalization();
// Declare success. // Declare success.
Out.keep(); Out.keep();

View File

@ -287,9 +287,7 @@ int main(int argc, char **argv) {
PassManager PassMgr; PassManager PassMgr;
PassMgr.add(createProfileLoaderPass(ProfileDataFile)); PassMgr.add(createProfileLoaderPass(ProfileDataFile));
PassMgr.add(new ProfileInfoPrinterPass(PIL)); PassMgr.add(new ProfileInfoPrinterPass(PIL));
PassMgr.doInitialization();
PassMgr.run(*M); PassMgr.run(*M);
PassMgr.doFinalization();
return 0; return 0;
} }

View File

@ -713,9 +713,7 @@ int main(int argc, char **argv) {
PassManager Passes; PassManager Passes;
Passes.add(createVerifierPass()); Passes.add(createVerifierPass());
Passes.add(createPrintModulePass(&Out->os())); Passes.add(createPrintModulePass(&Out->os()));
Passes.doInitialization();
Passes.run(*M.get()); Passes.run(*M.get());
Passes.doFinalization();
Out->keep(); Out->keep();
return 0; return 0;

View File

@ -342,9 +342,7 @@ void LTOCodeGenerator::applyScopeRestrictions() {
passes.add(createInternalizePass(mustPreserveList)); passes.add(createInternalizePass(mustPreserveList));
// apply scope restrictions // apply scope restrictions
passes.doInitialization();
passes.run(*mergedModule); passes.run(*mergedModule);
passes.doFinalization();
_scopeRestrictionsDone = true; _scopeRestrictionsDone = true;
} }
@ -399,9 +397,7 @@ bool LTOCodeGenerator::generateObjectFile(raw_ostream &out,
} }
// Run our queue of passes all at once now, efficiently. // Run our queue of passes all at once now, efficiently.
passes.doInitialization();
passes.run(*mergedModule); passes.run(*mergedModule);
passes.doFinalization();
// Run the code generator, and write assembly file // Run the code generator, and write assembly file
codeGenPasses->doInitialization(); codeGenPasses->doInitialization();

View File

@ -820,9 +820,7 @@ int main(int argc, char **argv) {
cl::PrintOptionValues(); cl::PrintOptionValues();
// Now that we have all of the passes ready, run them. // Now that we have all of the passes ready, run them.
Passes.doInitialization();
Passes.run(*M.get()); Passes.run(*M.get());
Passes.doFinalization();
// Declare success. // Declare success.
if (!NoOutput || PrintBreakpoints) if (!NoOutput || PrintBreakpoints)