eliminate the ability to remove global nodes from deadNodeElminate... for now.

This slows stuff down a bit, but it should get much better before it gets any
worse.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4666 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2002-11-09 22:07:02 +00:00
parent dd398486ca
commit f40f0a39bd
7 changed files with 12 additions and 36 deletions

View File

@ -135,7 +135,7 @@ public:
// from the caller's graph entirely. This is only appropriate to use when
// inlining graphs.
//
void removeDeadNodes(bool KeepAllGlobals);
void removeDeadNodes();
// CloneFlags enum - Bits that may be passed into the cloneInto method to
// specify how to clone the function graph.
@ -172,7 +172,7 @@ private:
// merged with other nodes in the graph. This is used as the first step of
// removeDeadNodes.
//
void removeTriviallyDeadNodes(bool KeepAllGlobals = false);
void removeTriviallyDeadNodes();
};
#endif

View File

@ -135,7 +135,7 @@ public:
// from the caller's graph entirely. This is only appropriate to use when
// inlining graphs.
//
void removeDeadNodes(bool KeepAllGlobals);
void removeDeadNodes();
// CloneFlags enum - Bits that may be passed into the cloneInto method to
// specify how to clone the function graph.
@ -172,7 +172,7 @@ private:
// merged with other nodes in the graph. This is used as the first step of
// removeDeadNodes.
//
void removeTriviallyDeadNodes(bool KeepAllGlobals = false);
void removeTriviallyDeadNodes();
};
#endif

View File

@ -154,7 +154,7 @@ DSGraph &BUDataStructures::calculateGraph(Function &F) {
if (Inlined) {
Graph->maskIncompleteMarkers();
Graph->markIncompleteNodes();
Graph->removeDeadNodes(/*KeepAllGlobals*/ true);
Graph->removeDeadNodes();
}
} while (Inlined && !FCs.empty());

View File

@ -810,9 +810,9 @@ static void removeIdenticalCalls(vector<DSCallSite> &Calls,
// other nodes in the graph. These nodes will all be trivially unreachable, so
// we don't have to perform any non-trivial analysis here.
//
void DSGraph::removeTriviallyDeadNodes(bool KeepAllGlobals) {
void DSGraph::removeTriviallyDeadNodes() {
for (unsigned i = 0; i != Nodes.size(); ++i)
if (!KeepAllGlobals || !(Nodes[i]->NodeType & DSNode::GlobalNode))
if (!(Nodes[i]->NodeType & DSNode::GlobalNode))
if (isNodeDead(Nodes[i])) { // This node is dead!
delete Nodes[i]; // Free memory...
Nodes.erase(Nodes.begin()+i--); // Remove from node list...
@ -981,9 +981,9 @@ static void markGlobalsAlive(DSGraph &G, std::set<DSNode*> &Alive,
// from the caller's graph entirely. This is only appropriate to use when
// inlining graphs.
//
void DSGraph::removeDeadNodes(bool KeepAllGlobals) {
void DSGraph::removeDeadNodes() {
// Reduce the amount of work we have to do...
removeTriviallyDeadNodes(KeepAllGlobals);
removeTriviallyDeadNodes();
// FIXME: Merge nontrivially identical call nodes...
@ -1012,13 +1012,6 @@ void DSGraph::removeDeadNodes(bool KeepAllGlobals) {
// The return value is alive as well...
markAlive(RetNode.getNode(), Alive);
// Mark all globals or cast nodes that can reach a live node as alive.
// This also marks all nodes reachable from such nodes as alive.
// Of course, if KeepAllGlobals is specified, they would be live already.
if (!KeepAllGlobals)
markGlobalsAlive(*this, Alive, false);
// Loop over all unreachable nodes, dropping their references...
vector<DSNode*> DeadNodes;
DeadNodes.reserve(Nodes.size()); // Only one allocation is allowed.
@ -1129,23 +1122,6 @@ DSNode* GlobalDSGraph::cloneNodeInto(DSNode *OldNode,
}
// GlobalDSGraph::cloneGlobals - Clone global nodes and all their externally
// visible target links (and recursively their such links) into this graph.
//
void GlobalDSGraph::cloneGlobals(DSGraph& Graph, bool CloneCalls) {
std::map<const DSNode*, DSNode*> NodeCache;
#if 0
for (unsigned i = 0, N = Graph.Nodes.size(); i < N; ++i)
if (Graph.Nodes[i]->NodeType & DSNode::GlobalNode)
GlobalsGraph->cloneNodeInto(Graph.Nodes[i], NodeCache, false);
if (CloneCalls)
GlobalsGraph->cloneCalls(Graph);
GlobalsGraph->removeDeadNodes(/*KeepAllGlobals*/ true);
#endif
}
// GlobalDSGraph::cloneCalls - Clone function calls and their visible target
// links (and recursively their such links) into this graph.
//

View File

@ -134,7 +134,7 @@ DSGraph::DSGraph(Function &F, DSGraph *GG) : Func(&F), GlobalsGraph(GG) {
markIncompleteNodes();
// Remove any nodes made dead due to merging...
removeDeadNodes(true);
removeDeadNodes();
}

View File

@ -194,7 +194,7 @@ bool Steens::run(Module &M) {
ResultGraph->markIncompleteNodes(false);
// Remove any nodes that are dead after all of the merging we have done...
ResultGraph->removeDeadNodes(true);
ResultGraph->removeDeadNodes();
DEBUG(print(std::cerr, &M));
return false;

View File

@ -186,7 +186,7 @@ void TDDataStructures::calculateGraph(Function &F) {
CG.maskIncompleteMarkers();
CG.markIncompleteNodes(/*markFormals*/ !F.hasInternalLinkage()
/*&& FIXME: NEED TO CHECK IF ALL CALLERS FOUND!*/);
CG.removeDeadNodes(/*KeepAllGlobals*/ false);
CG.removeDeadNodes();
}
DEBUG(std::cerr << " [TD] Done inlining into callees for: " << F.getName()