mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-07-05 13:29:22 +00:00
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:
parent
6a144e40b0
commit
6eda081345
@ -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.
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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)) {
|
||||||
|
@ -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.
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user