mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
Add doInitialization and doFinalization methods to ModulePass's, to allow them to be re-initialized and reused on multiple Module's.
Patch by Pedro Artigas. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168008 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -51,6 +51,9 @@ public:
|
||||
/// whether any of the passes modifies the module, and if so, return true.
|
||||
bool runOnModule(Module &M);
|
||||
|
||||
using ModulePass::doInitialization;
|
||||
using ModulePass::doFinalization;
|
||||
|
||||
bool doInitialization(CallGraph &CG);
|
||||
bool doFinalization(CallGraph &CG);
|
||||
|
||||
|
||||
@@ -309,6 +309,14 @@ public:
|
||||
/// whether any of the passes modifies the module, and if so, return true.
|
||||
bool runOnModule(Module &M);
|
||||
|
||||
/// doInitialization - Run all of the initializers for the module passes.
|
||||
///
|
||||
bool doInitialization(void);
|
||||
|
||||
/// doFinalization - Run all of the finalizers for the module passes.
|
||||
///
|
||||
bool doFinalization(void);
|
||||
|
||||
/// Pass Manager itself does not invalidate any analysis info.
|
||||
void getAnalysisUsage(AnalysisUsage &Info) const {
|
||||
Info.setPreservesAll();
|
||||
@@ -394,6 +402,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(void);
|
||||
|
||||
/// doFinalization - Run all of the finalizers for the module passes.
|
||||
///
|
||||
bool doFinalization(void);
|
||||
|
||||
/// Pass Manager itself does not invalidate any analysis info.
|
||||
void getAnalysisUsage(AnalysisUsage &Info) const {
|
||||
Info.setPreservesAll();
|
||||
@@ -1594,6 +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(void) {
|
||||
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(void) {
|
||||
bool Changed = false;
|
||||
|
||||
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index)
|
||||
Changed |= getContainedPass(Index)->doFinalization();
|
||||
|
||||
return Changed;
|
||||
}
|
||||
|
||||
@@ -1640,6 +1679,25 @@ Pass* MPPassManager::getOnTheFlyPass(Pass *MP, AnalysisID PI, Function &F){
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// PassManagerImpl implementation
|
||||
|
||||
bool PassManagerImpl::doInitialization(void) {
|
||||
bool Changed = false;
|
||||
|
||||
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index)
|
||||
Changed |= getContainedManager(Index)->doInitialization();
|
||||
|
||||
return Changed;
|
||||
}
|
||||
|
||||
bool PassManagerImpl::doFinalization(void) {
|
||||
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.
|
||||
@@ -1684,6 +1742,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
|
||||
|
||||
Reference in New Issue
Block a user