mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-12 07:37:34 +00:00
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:
parent
dd398486ca
commit
f40f0a39bd
@ -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
|
||||
|
@ -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
|
||||
|
@ -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());
|
||||
|
||||
|
@ -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.
|
||||
//
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user