aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2012-11-27 00:53:24 +0000
committerOwen Anderson <resistor@mac.com>2012-11-27 00:53:24 +0000
commit9780d352b9108d49097970f6686fd61aba58d7fc (patch)
tree505571eeebc1e4a3d2487ac867ab3c218f947dc4
parent6f6b97daf67ba017e5a10125551d5bd39dd80830 (diff)
downloadexternal_llvm-9780d352b9108d49097970f6686fd61aba58d7fc.zip
external_llvm-9780d352b9108d49097970f6686fd61aba58d7fc.tar.gz
external_llvm-9780d352b9108d49097970f6686fd61aba58d7fc.tar.bz2
Revert r168635 "Step towards implementation of pass manager with doInitialization and doFinalization per module detangled from runOn?? calls, still has temporary code not to break ASAN to be removed when that pass conforms to the proposed model".
It appears to have broken at least one buildbot. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168654 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/CodeGen/MachineModuleInfo.h3
-rw-r--r--include/llvm/Pass.h4
-rw-r--r--include/llvm/PassManager.h8
-rw-r--r--include/llvm/PassManagers.h4
-rw-r--r--lib/VMCore/PassManager.cpp79
-rw-r--r--tools/bugpoint/CrashDebugger.cpp2
-rw-r--r--tools/llc/llc.cpp2
-rw-r--r--tools/llvm-extract/llvm-extract.cpp2
-rw-r--r--tools/llvm-prof/llvm-prof.cpp2
-rw-r--r--tools/llvm-stress/llvm-stress.cpp2
-rw-r--r--tools/lto/LTOCodeGenerator.cpp4
-rw-r--r--tools/opt/opt.cpp2
12 files changed, 81 insertions, 33 deletions
diff --git a/include/llvm/CodeGen/MachineModuleInfo.h b/include/llvm/CodeGen/MachineModuleInfo.h
index 4660cad..fc73a3d 100644
--- a/include/llvm/CodeGen/MachineModuleInfo.h
+++ b/include/llvm/CodeGen/MachineModuleInfo.h
@@ -180,10 +180,7 @@ public:
const MCObjectFileInfo *MOFI);
~MachineModuleInfo();
- using ModulePass::doInitialization;
bool doInitialization();
-
- using ModulePass::doFinalization;
bool doFinalization();
/// EndFunction - Discard function meta information.
diff --git a/include/llvm/Pass.h b/include/llvm/Pass.h
index acfc6a2..7b6f169 100644
--- a/include/llvm/Pass.h
+++ b/include/llvm/Pass.h
@@ -230,7 +230,7 @@ public:
/// doInitialization - Virtual method overridden by subclasses to do
/// any necessary initialization.
///
- virtual bool doInitialization(Module &) { return false; }
+ virtual bool doInitialization() { return false; }
/// runOnModule - Virtual method overriden by subclasses to process the module
/// being operated on.
@@ -239,7 +239,7 @@ public:
/// doFinalization - Virtual method overriden by subclasses to do any post
/// processing needed after all passes have run.
///
- virtual bool doFinalization(Module &) { return false; }
+ virtual bool doFinalization() { return false; }
virtual void assignPassManager(PMStack &PMS,
PassManagerType T);
diff --git a/include/llvm/PassManager.h b/include/llvm/PassManager.h
index ce5fda7..1d5e800 100644
--- a/include/llvm/PassManager.h
+++ b/include/llvm/PassManager.h
@@ -58,6 +58,14 @@ public:
/// whether any of the passes modifies the module, and if so, return true.
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:
/// PassManagerImpl_New is the actual class. PassManager is just the
/// wraper to publish simple pass manager interface
diff --git a/include/llvm/PassManagers.h b/include/llvm/PassManagers.h
index 385d6e1..b0450f3 100644
--- a/include/llvm/PassManagers.h
+++ b/include/llvm/PassManagers.h
@@ -462,10 +462,6 @@ public:
virtual PassManagerType getPassManagerType() const {
return PMT_FunctionPassManager;
}
-
-protected:
- // FIXME: due to limitation in AddressSanitizer
- bool RunFinalization;
};
Timer *getPassTimer(Pass *);
diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp
index 4e2d5fa..3a8a9e2 100644
--- a/lib/VMCore/PassManager.cpp
+++ b/lib/VMCore/PassManager.cpp
@@ -1528,13 +1528,11 @@ bool FPPassManager::runOnFunction(Function &F) {
}
bool FPPassManager::runOnModule(Module &M) {
- bool Changed = false;
+ bool Changed = doInitialization(M);
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
Changed |= runOnFunction(*I);
- // FIXME: doFinalization still needed here due to assumption in
- // AddressSanitizer
return doFinalization(M) || Changed;
}
@@ -1544,25 +1542,14 @@ bool FPPassManager::doInitialization(Module &M) {
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index)
Changed |= getContainedPass(Index)->doInitialization(M);
- // FIXME: mark Finalization as needed here due to assumption in
- // AddressSanitizer
- RunFinalization = true;
-
return Changed;
}
bool FPPassManager::doFinalization(Module &M) {
bool Changed = false;
-
- // FIXME: due to limitation in AddressSanitizer
- if (!RunFinalization)
- return Changed;
-
+
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index)
Changed |= getContainedPass(Index)->doFinalization(M);
-
- // FIXME: due to limitation in AddressSanitizer
- RunFinalization = false;
return Changed;
}
@@ -1585,10 +1572,6 @@ MPPassManager::runOnModule(Module &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) {
ModulePass *MP = getContainedPass(Index);
bool LocalChanged = false;
@@ -1617,10 +1600,6 @@ MPPassManager::runOnModule(Module &M) {
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
for (std::map<Pass *, FunctionPassManagerImpl *>::iterator
I = OnTheFlyManagers.begin(), E = OnTheFlyManagers.end();
@@ -1631,7 +1610,29 @@ MPPassManager::runOnModule(Module &M) {
FPP->releaseMemoryOnTheFly();
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;
}
@@ -1691,6 +1692,24 @@ Pass* MPPassManager::getOnTheFlyPass(Pass *MP, AnalysisID PI, Function &F){
//===----------------------------------------------------------------------===//
// 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
/// whether any of the passes modifies the module, and if so, return true.
@@ -1735,6 +1754,18 @@ bool PassManager::run(Module &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
// amount of time each pass takes to execute. This only happens with
diff --git a/tools/bugpoint/CrashDebugger.cpp b/tools/bugpoint/CrashDebugger.cpp
index aed16f4..8836eed 100644
--- a/tools/bugpoint/CrashDebugger.cpp
+++ b/tools/bugpoint/CrashDebugger.cpp
@@ -412,7 +412,9 @@ bool ReduceCrashingInstructions::TestInsts(std::vector<const Instruction*>
// Verify that this is still valid.
PassManager Passes;
Passes.add(createVerifierPass());
+ Passes.doInitialization();
Passes.run(*M);
+ Passes.doFinalization();
// Try running on the hacked up program...
if (TestFn(BD, M)) {
diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp
index 4d4a74c..f3e5c20 100644
--- a/tools/llc/llc.cpp
+++ b/tools/llc/llc.cpp
@@ -359,7 +359,9 @@ int main(int argc, char **argv) {
// Before executing passes, print the final values of the LLVM options.
cl::PrintOptionValues();
+ PM.doInitialization();
PM.run(*mod);
+ PM.doFinalization();
}
// Declare success.
diff --git a/tools/llvm-extract/llvm-extract.cpp b/tools/llvm-extract/llvm-extract.cpp
index ac82d98..d2caabd 100644
--- a/tools/llvm-extract/llvm-extract.cpp
+++ b/tools/llvm-extract/llvm-extract.cpp
@@ -276,7 +276,9 @@ int main(int argc, char **argv) {
else if (Force || !CheckBitcodeOutputToConsole(Out.os(), true))
Passes.add(createBitcodeWriterPass(Out.os()));
+ Passes.doInitialization();
Passes.run(*M.get());
+ Passes.doFinalization();
// Declare success.
Out.keep();
diff --git a/tools/llvm-prof/llvm-prof.cpp b/tools/llvm-prof/llvm-prof.cpp
index 81e9503..940ac34 100644
--- a/tools/llvm-prof/llvm-prof.cpp
+++ b/tools/llvm-prof/llvm-prof.cpp
@@ -287,7 +287,9 @@ int main(int argc, char **argv) {
PassManager PassMgr;
PassMgr.add(createProfileLoaderPass(ProfileDataFile));
PassMgr.add(new ProfileInfoPrinterPass(PIL));
+ PassMgr.doInitialization();
PassMgr.run(*M);
+ PassMgr.doFinalization();
return 0;
}
diff --git a/tools/llvm-stress/llvm-stress.cpp b/tools/llvm-stress/llvm-stress.cpp
index 8473d94..72fdac8 100644
--- a/tools/llvm-stress/llvm-stress.cpp
+++ b/tools/llvm-stress/llvm-stress.cpp
@@ -713,7 +713,9 @@ int main(int argc, char **argv) {
PassManager Passes;
Passes.add(createVerifierPass());
Passes.add(createPrintModulePass(&Out->os()));
+ Passes.doInitialization();
Passes.run(*M.get());
+ Passes.doFinalization();
Out->keep();
return 0;
diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp
index b1c4f43..d9fa218 100644
--- a/tools/lto/LTOCodeGenerator.cpp
+++ b/tools/lto/LTOCodeGenerator.cpp
@@ -342,7 +342,9 @@ void LTOCodeGenerator::applyScopeRestrictions() {
passes.add(createInternalizePass(mustPreserveList));
// apply scope restrictions
+ passes.doInitialization();
passes.run(*mergedModule);
+ passes.doFinalization();
_scopeRestrictionsDone = true;
}
@@ -397,7 +399,9 @@ bool LTOCodeGenerator::generateObjectFile(raw_ostream &out,
}
// Run our queue of passes all at once now, efficiently.
+ passes.doInitialization();
passes.run(*mergedModule);
+ passes.doFinalization();
// Run the code generator, and write assembly file
codeGenPasses->doInitialization();
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index bac0d46..7cced98 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -820,7 +820,9 @@ int main(int argc, char **argv) {
cl::PrintOptionValues();
// Now that we have all of the passes ready, run them.
+ Passes.doInitialization();
Passes.run(*M.get());
+ Passes.doFinalization();
// Declare success.
if (!NoOutput || PrintBreakpoints)