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:
Chris Lattner 2002-11-09 21:00:49 +00:00
parent 96517253a1
commit 65f2897f2c
7 changed files with 20 additions and 32 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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");

View File

@ -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
} }

View File

@ -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);
} }

View File

@ -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;

View File

@ -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()