mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
Clean up DSGraph::removeDeadNodes interface
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4660 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
96517253a1
commit
65f2897f2c
@ -132,7 +132,7 @@ public:
|
|||||||
// from the caller's graph entirely. This is only appropriate to use when
|
// from the caller's graph entirely. This is only appropriate to use when
|
||||||
// inlining graphs.
|
// inlining graphs.
|
||||||
//
|
//
|
||||||
void removeDeadNodes(bool KeepAllGlobals, bool KeepCalls);
|
void removeDeadNodes(bool KeepAllGlobals);
|
||||||
|
|
||||||
// CloneFlags enum - Bits that may be passed into the cloneInto method to
|
// CloneFlags enum - Bits that may be passed into the cloneInto method to
|
||||||
// specify how to clone the function graph.
|
// specify how to clone the function graph.
|
||||||
|
@ -132,7 +132,7 @@ public:
|
|||||||
// from the caller's graph entirely. This is only appropriate to use when
|
// from the caller's graph entirely. This is only appropriate to use when
|
||||||
// inlining graphs.
|
// inlining graphs.
|
||||||
//
|
//
|
||||||
void removeDeadNodes(bool KeepAllGlobals, bool KeepCalls);
|
void removeDeadNodes(bool KeepAllGlobals);
|
||||||
|
|
||||||
// CloneFlags enum - Bits that may be passed into the cloneInto method to
|
// CloneFlags enum - Bits that may be passed into the cloneInto method to
|
||||||
// specify how to clone the function graph.
|
// specify how to clone the function graph.
|
||||||
|
@ -150,16 +150,10 @@ DSGraph &BUDataStructures::calculateGraph(Function &F) {
|
|||||||
if (Inlined) {
|
if (Inlined) {
|
||||||
Graph->maskIncompleteMarkers();
|
Graph->maskIncompleteMarkers();
|
||||||
Graph->markIncompleteNodes();
|
Graph->markIncompleteNodes();
|
||||||
Graph->removeDeadNodes(/*KeepAllGlobals*/ true, /*KeepCalls*/ true);
|
Graph->removeDeadNodes(/*KeepAllGlobals*/ true);
|
||||||
}
|
}
|
||||||
} while (Inlined && !FCs.empty());
|
} while (Inlined && !FCs.empty());
|
||||||
|
|
||||||
#if 0
|
|
||||||
Graph->maskIncompleteMarkers();
|
|
||||||
Graph->markIncompleteNodes();
|
|
||||||
Graph->removeDeadNodes(/*KeepAllGlobals*/ true, /*KeepCalls*/ true);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DEBUG(std::cerr << " [BU] Done inlining: " << F.getName() << " ["
|
DEBUG(std::cerr << " [BU] Done inlining: " << F.getName() << " ["
|
||||||
<< Graph->getGraphSize() << "+" << Graph->getFunctionCalls().size()
|
<< Graph->getGraphSize() << "+" << Graph->getFunctionCalls().size()
|
||||||
<< "]\n");
|
<< "]\n");
|
||||||
|
@ -981,10 +981,7 @@ static void markGlobalsAlive(DSGraph &G, std::set<DSNode*> &Alive,
|
|||||||
// from the caller's graph entirely. This is only appropriate to use when
|
// from the caller's graph entirely. This is only appropriate to use when
|
||||||
// inlining graphs.
|
// inlining graphs.
|
||||||
//
|
//
|
||||||
void DSGraph::removeDeadNodes(bool KeepAllGlobals, bool KeepCalls) {
|
void DSGraph::removeDeadNodes(bool KeepAllGlobals) {
|
||||||
assert((!KeepAllGlobals || KeepCalls) && // FIXME: This should be an enum!
|
|
||||||
"KeepAllGlobals without KeepCalls is meaningless");
|
|
||||||
|
|
||||||
// Reduce the amount of work we have to do...
|
// Reduce the amount of work we have to do...
|
||||||
removeTriviallyDeadNodes(KeepAllGlobals);
|
removeTriviallyDeadNodes(KeepAllGlobals);
|
||||||
|
|
||||||
@ -994,19 +991,17 @@ void DSGraph::removeDeadNodes(bool KeepAllGlobals, bool KeepCalls) {
|
|||||||
std::set<DSNode*> Alive;
|
std::set<DSNode*> Alive;
|
||||||
|
|
||||||
// If KeepCalls, mark all nodes reachable by call nodes as alive...
|
// If KeepCalls, mark all nodes reachable by call nodes as alive...
|
||||||
if (KeepCalls) {
|
for (unsigned i = 0, e = FunctionCalls.size(); i != e; ++i) {
|
||||||
for (unsigned i = 0, e = FunctionCalls.size(); i != e; ++i) {
|
for (unsigned j = 0, e = FunctionCalls[i].getNumPtrArgs(); j != e; ++j)
|
||||||
for (unsigned j = 0, e = FunctionCalls[i].getNumPtrArgs(); j != e; ++j)
|
markAlive(FunctionCalls[i].getPtrArg(j).getNode(), Alive);
|
||||||
markAlive(FunctionCalls[i].getPtrArg(j).getNode(), Alive);
|
markAlive(FunctionCalls[i].getRetVal().getNode(), Alive);
|
||||||
markAlive(FunctionCalls[i].getRetVal().getNode(), Alive);
|
markAlive(FunctionCalls[i].getCallee().getNode(), Alive);
|
||||||
markAlive(FunctionCalls[i].getCallee().getNode(), Alive);
|
}
|
||||||
}
|
for (unsigned i = 0, e = AuxFunctionCalls.size(); i != e; ++i) {
|
||||||
for (unsigned i = 0, e = AuxFunctionCalls.size(); i != e; ++i) {
|
for (unsigned j = 0, e = AuxFunctionCalls[i].getNumPtrArgs(); j != e; ++j)
|
||||||
for (unsigned j = 0, e = AuxFunctionCalls[i].getNumPtrArgs(); j != e; ++j)
|
markAlive(AuxFunctionCalls[i].getPtrArg(j).getNode(), Alive);
|
||||||
markAlive(AuxFunctionCalls[i].getPtrArg(j).getNode(), Alive);
|
markAlive(AuxFunctionCalls[i].getRetVal().getNode(), Alive);
|
||||||
markAlive(AuxFunctionCalls[i].getRetVal().getNode(), Alive);
|
markAlive(AuxFunctionCalls[i].getCallee().getNode(), Alive);
|
||||||
markAlive(AuxFunctionCalls[i].getCallee().getNode(), Alive);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mark all nodes reachable by scalar nodes as alive...
|
// Mark all nodes reachable by scalar nodes as alive...
|
||||||
@ -1022,7 +1017,7 @@ void DSGraph::removeDeadNodes(bool KeepAllGlobals, bool KeepCalls) {
|
|||||||
// Of course, if KeepAllGlobals is specified, they would be live already.
|
// Of course, if KeepAllGlobals is specified, they would be live already.
|
||||||
|
|
||||||
if (!KeepAllGlobals)
|
if (!KeepAllGlobals)
|
||||||
markGlobalsAlive(*this, Alive, !KeepCalls);
|
markGlobalsAlive(*this, Alive, false);
|
||||||
|
|
||||||
// Loop over all unreachable nodes, dropping their references...
|
// Loop over all unreachable nodes, dropping their references...
|
||||||
vector<DSNode*> DeadNodes;
|
vector<DSNode*> DeadNodes;
|
||||||
@ -1157,7 +1152,7 @@ void GlobalDSGraph::cloneGlobals(DSGraph& Graph, bool CloneCalls) {
|
|||||||
if (CloneCalls)
|
if (CloneCalls)
|
||||||
GlobalsGraph->cloneCalls(Graph);
|
GlobalsGraph->cloneCalls(Graph);
|
||||||
|
|
||||||
GlobalsGraph->removeDeadNodes(/*KeepAllGlobals*/ true, /*KeepCalls*/ true);
|
GlobalsGraph->removeDeadNodes(/*KeepAllGlobals*/ true);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ DSGraph::DSGraph(Function &F, DSGraph *GG) : Func(&F), GlobalsGraph(GG) {
|
|||||||
markIncompleteNodes();
|
markIncompleteNodes();
|
||||||
|
|
||||||
// Remove any nodes made dead due to merging...
|
// Remove any nodes made dead due to merging...
|
||||||
removeDeadNodes(true, true);
|
removeDeadNodes(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ bool Steens::run(Module &M) {
|
|||||||
ResultGraph->markIncompleteNodes(false);
|
ResultGraph->markIncompleteNodes(false);
|
||||||
|
|
||||||
// Remove any nodes that are dead after all of the merging we have done...
|
// Remove any nodes that are dead after all of the merging we have done...
|
||||||
ResultGraph->removeDeadNodes(true, true);
|
ResultGraph->removeDeadNodes(true);
|
||||||
|
|
||||||
DEBUG(print(std::cerr, &M));
|
DEBUG(print(std::cerr, &M));
|
||||||
return false;
|
return false;
|
||||||
|
@ -180,8 +180,7 @@ void TDDataStructures::calculateGraph(Function &F) {
|
|||||||
CG.maskIncompleteMarkers();
|
CG.maskIncompleteMarkers();
|
||||||
CG.markIncompleteNodes(/*markFormals*/ !F.hasInternalLinkage()
|
CG.markIncompleteNodes(/*markFormals*/ !F.hasInternalLinkage()
|
||||||
/*&& FIXME: NEED TO CHECK IF ALL CALLERS FOUND!*/);
|
/*&& FIXME: NEED TO CHECK IF ALL CALLERS FOUND!*/);
|
||||||
CG.removeDeadNodes(false, true) ;///*KeepAllGlobals*/ false, true);
|
CG.removeDeadNodes(/*KeepAllGlobals*/ false);
|
||||||
///*KeepCalls*/ false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG(std::cerr << " [TD] Done inlining into callees for: " << F.getName()
|
DEBUG(std::cerr << " [TD] Done inlining into callees for: " << F.getName()
|
||||||
|
Loading…
Reference in New Issue
Block a user