mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-22 13:29:44 +00:00
cleanups, factor some code out to a helper function
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80542 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
46ca76f6bb
commit
f3a1c15b75
@ -31,7 +31,6 @@ using namespace llvm;
|
|||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
class CGPassManager : public ModulePass, public PMDataManager {
|
class CGPassManager : public ModulePass, public PMDataManager {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static char ID;
|
static char ID;
|
||||||
explicit CGPassManager(int Depth)
|
explicit CGPassManager(int Depth)
|
||||||
@ -73,11 +72,41 @@ public:
|
|||||||
virtual PassManagerType getPassManagerType() const {
|
virtual PassManagerType getPassManagerType() const {
|
||||||
return PMT_CallGraphPassManager;
|
return PMT_CallGraphPassManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool RunPassOnSCC(Pass *P, std::vector<CallGraphNode*> &CurSCC);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
} // end anonymous namespace.
|
||||||
|
|
||||||
char CGPassManager::ID = 0;
|
char CGPassManager::ID = 0;
|
||||||
|
|
||||||
|
bool CGPassManager::RunPassOnSCC(Pass *P, std::vector<CallGraphNode*> &CurSCC) {
|
||||||
|
bool Changed = false;
|
||||||
|
if (CallGraphSCCPass *CGSP = dynamic_cast<CallGraphSCCPass*>(P)) {
|
||||||
|
StartPassTimer(P);
|
||||||
|
Changed = CGSP->runOnSCC(CurSCC);
|
||||||
|
StopPassTimer(P);
|
||||||
|
return Changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
StartPassTimer(P);
|
||||||
|
FPPassManager *FPP = dynamic_cast<FPPassManager *>(P);
|
||||||
|
assert(FPP && "Invalid CGPassManager member");
|
||||||
|
|
||||||
|
// Run pass P on all functions in the current SCC.
|
||||||
|
for (unsigned i = 0, e = CurSCC.size(); i != e; ++i) {
|
||||||
|
if (Function *F = CurSCC[i]->getFunction()) {
|
||||||
|
dumpPassInfo(P, EXECUTION_MSG, ON_FUNCTION_MSG, F->getName());
|
||||||
|
Changed |= FPP->runOnFunction(*F);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
StopPassTimer(P);
|
||||||
|
|
||||||
|
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.
|
||||||
bool CGPassManager::runOnModule(Module &M) {
|
bool CGPassManager::runOnModule(Module &M) {
|
||||||
@ -86,7 +115,7 @@ bool CGPassManager::runOnModule(Module &M) {
|
|||||||
|
|
||||||
std::vector<CallGraphNode*> CurSCC;
|
std::vector<CallGraphNode*> CurSCC;
|
||||||
|
|
||||||
// Walk SCC
|
// Walk the callgraph in bottom-up SCC order.
|
||||||
for (scc_iterator<CallGraph*> CGI = scc_begin(&CG), E = scc_end(&CG);
|
for (scc_iterator<CallGraph*> CGI = scc_begin(&CG), E = scc_end(&CG);
|
||||||
CGI != E;) {
|
CGI != E;) {
|
||||||
// Copy the current SCC and increment past it so that the pass can hack
|
// Copy the current SCC and increment past it so that the pass can hack
|
||||||
@ -94,31 +123,19 @@ bool CGPassManager::runOnModule(Module &M) {
|
|||||||
CurSCC = *CGI;
|
CurSCC = *CGI;
|
||||||
++CGI;
|
++CGI;
|
||||||
|
|
||||||
// Run all passes on current SCC
|
|
||||||
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
|
// Run all passes on current SCC.
|
||||||
Pass *P = getContainedPass(Index);
|
for (unsigned PassNo = 0, e = getNumContainedPasses();
|
||||||
|
PassNo != e; ++PassNo) {
|
||||||
|
Pass *P = getContainedPass(PassNo);
|
||||||
|
|
||||||
dumpPassInfo(P, EXECUTION_MSG, ON_CG_MSG, "");
|
dumpPassInfo(P, EXECUTION_MSG, ON_CG_MSG, "");
|
||||||
dumpRequiredSet(P);
|
dumpRequiredSet(P);
|
||||||
|
|
||||||
initializeAnalysisImpl(P);
|
initializeAnalysisImpl(P);
|
||||||
|
|
||||||
StartPassTimer(P);
|
// Actually run this pass on the current SCC.
|
||||||
if (CallGraphSCCPass *CGSP = dynamic_cast<CallGraphSCCPass *>(P))
|
Changed |= RunPassOnSCC(P, CurSCC);
|
||||||
Changed |= CGSP->runOnSCC(CurSCC);
|
|
||||||
else {
|
|
||||||
FPPassManager *FPP = dynamic_cast<FPPassManager *>(P);
|
|
||||||
assert (FPP && "Invalid CGPassManager member");
|
|
||||||
|
|
||||||
// Run pass P on all functions current SCC
|
|
||||||
for (unsigned i = 0, e = CurSCC.size(); i != e; ++i) {
|
|
||||||
if (Function *F = CurSCC[i]->getFunction()) {
|
|
||||||
dumpPassInfo(P, EXECUTION_MSG, ON_FUNCTION_MSG, F->getName());
|
|
||||||
Changed |= FPP->runOnFunction(*F);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
StopPassTimer(P);
|
|
||||||
|
|
||||||
if (Changed)
|
if (Changed)
|
||||||
dumpPassInfo(P, MODIFICATION_MSG, ON_CG_MSG, "");
|
dumpPassInfo(P, MODIFICATION_MSG, ON_CG_MSG, "");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user