diff options
-rw-r--r-- | include/llvm/Analysis/DSGraph.h | 2 | ||||
-rw-r--r-- | include/llvm/Analysis/DataStructure/DSGraph.h | 2 | ||||
-rw-r--r-- | lib/Analysis/DataStructure/BottomUpClosure.cpp | 8 | ||||
-rw-r--r-- | lib/Analysis/DataStructure/DataStructure.cpp | 33 | ||||
-rw-r--r-- | lib/Analysis/DataStructure/Local.cpp | 2 | ||||
-rw-r--r-- | lib/Analysis/DataStructure/Steensgaard.cpp | 2 | ||||
-rw-r--r-- | lib/Analysis/DataStructure/TopDownClosure.cpp | 3 |
7 files changed, 20 insertions, 32 deletions
diff --git a/include/llvm/Analysis/DSGraph.h b/include/llvm/Analysis/DSGraph.h index ad175ec063..3ec567e665 100644 --- a/include/llvm/Analysis/DSGraph.h +++ b/include/llvm/Analysis/DSGraph.h @@ -132,7 +132,7 @@ public: // from the caller's graph entirely. This is only appropriate to use when // inlining graphs. // - void removeDeadNodes(bool KeepAllGlobals, bool KeepCalls); + void removeDeadNodes(bool KeepAllGlobals); // CloneFlags enum - Bits that may be passed into the cloneInto method to // specify how to clone the function graph. diff --git a/include/llvm/Analysis/DataStructure/DSGraph.h b/include/llvm/Analysis/DataStructure/DSGraph.h index ad175ec063..3ec567e665 100644 --- a/include/llvm/Analysis/DataStructure/DSGraph.h +++ b/include/llvm/Analysis/DataStructure/DSGraph.h @@ -132,7 +132,7 @@ public: // from the caller's graph entirely. This is only appropriate to use when // inlining graphs. // - void removeDeadNodes(bool KeepAllGlobals, bool KeepCalls); + void removeDeadNodes(bool KeepAllGlobals); // CloneFlags enum - Bits that may be passed into the cloneInto method to // specify how to clone the function graph. diff --git a/lib/Analysis/DataStructure/BottomUpClosure.cpp b/lib/Analysis/DataStructure/BottomUpClosure.cpp index 1a3f48002f..d57b6186f8 100644 --- a/lib/Analysis/DataStructure/BottomUpClosure.cpp +++ b/lib/Analysis/DataStructure/BottomUpClosure.cpp @@ -150,16 +150,10 @@ DSGraph &BUDataStructures::calculateGraph(Function &F) { if (Inlined) { Graph->maskIncompleteMarkers(); Graph->markIncompleteNodes(); - Graph->removeDeadNodes(/*KeepAllGlobals*/ true, /*KeepCalls*/ true); + Graph->removeDeadNodes(/*KeepAllGlobals*/ true); } } 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() << " [" << Graph->getGraphSize() << "+" << Graph->getFunctionCalls().size() << "]\n"); diff --git a/lib/Analysis/DataStructure/DataStructure.cpp b/lib/Analysis/DataStructure/DataStructure.cpp index 630ec5f4d3..f1fce0fb97 100644 --- a/lib/Analysis/DataStructure/DataStructure.cpp +++ b/lib/Analysis/DataStructure/DataStructure.cpp @@ -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 // inlining graphs. // -void DSGraph::removeDeadNodes(bool KeepAllGlobals, bool KeepCalls) { - assert((!KeepAllGlobals || KeepCalls) && // FIXME: This should be an enum! - "KeepAllGlobals without KeepCalls is meaningless"); - +void DSGraph::removeDeadNodes(bool KeepAllGlobals) { // Reduce the amount of work we have to do... removeTriviallyDeadNodes(KeepAllGlobals); @@ -994,19 +991,17 @@ void DSGraph::removeDeadNodes(bool KeepAllGlobals, bool KeepCalls) { std::set<DSNode*> 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 j = 0, e = FunctionCalls[i].getNumPtrArgs(); j != e; ++j) - markAlive(FunctionCalls[i].getPtrArg(j).getNode(), Alive); - markAlive(FunctionCalls[i].getRetVal().getNode(), Alive); - markAlive(FunctionCalls[i].getCallee().getNode(), Alive); - } - for (unsigned i = 0, e = AuxFunctionCalls.size(); i != e; ++i) { - for (unsigned j = 0, e = AuxFunctionCalls[i].getNumPtrArgs(); j != e; ++j) - markAlive(AuxFunctionCalls[i].getPtrArg(j).getNode(), Alive); - markAlive(AuxFunctionCalls[i].getRetVal().getNode(), Alive); - markAlive(AuxFunctionCalls[i].getCallee().getNode(), Alive); - } + for (unsigned i = 0, e = FunctionCalls.size(); i != e; ++i) { + for (unsigned j = 0, e = FunctionCalls[i].getNumPtrArgs(); j != e; ++j) + markAlive(FunctionCalls[i].getPtrArg(j).getNode(), Alive); + markAlive(FunctionCalls[i].getRetVal().getNode(), Alive); + markAlive(FunctionCalls[i].getCallee().getNode(), Alive); + } + for (unsigned i = 0, e = AuxFunctionCalls.size(); i != e; ++i) { + for (unsigned j = 0, e = AuxFunctionCalls[i].getNumPtrArgs(); j != e; ++j) + markAlive(AuxFunctionCalls[i].getPtrArg(j).getNode(), Alive); + markAlive(AuxFunctionCalls[i].getRetVal().getNode(), Alive); + markAlive(AuxFunctionCalls[i].getCallee().getNode(), 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. if (!KeepAllGlobals) - markGlobalsAlive(*this, Alive, !KeepCalls); + markGlobalsAlive(*this, Alive, false); // Loop over all unreachable nodes, dropping their references... vector<DSNode*> DeadNodes; @@ -1157,7 +1152,7 @@ void GlobalDSGraph::cloneGlobals(DSGraph& Graph, bool CloneCalls) { if (CloneCalls) GlobalsGraph->cloneCalls(Graph); - GlobalsGraph->removeDeadNodes(/*KeepAllGlobals*/ true, /*KeepCalls*/ true); + GlobalsGraph->removeDeadNodes(/*KeepAllGlobals*/ true); #endif } diff --git a/lib/Analysis/DataStructure/Local.cpp b/lib/Analysis/DataStructure/Local.cpp index 3df4fd4f60..e159a6087e 100644 --- a/lib/Analysis/DataStructure/Local.cpp +++ b/lib/Analysis/DataStructure/Local.cpp @@ -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, true); + removeDeadNodes(true); } diff --git a/lib/Analysis/DataStructure/Steensgaard.cpp b/lib/Analysis/DataStructure/Steensgaard.cpp index 5ee4dc4cec..6dc2bda30b 100644 --- a/lib/Analysis/DataStructure/Steensgaard.cpp +++ b/lib/Analysis/DataStructure/Steensgaard.cpp @@ -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, true); + ResultGraph->removeDeadNodes(true); DEBUG(print(std::cerr, &M)); return false; diff --git a/lib/Analysis/DataStructure/TopDownClosure.cpp b/lib/Analysis/DataStructure/TopDownClosure.cpp index ee559d6fc0..b4b43f77c5 100644 --- a/lib/Analysis/DataStructure/TopDownClosure.cpp +++ b/lib/Analysis/DataStructure/TopDownClosure.cpp @@ -180,8 +180,7 @@ void TDDataStructures::calculateGraph(Function &F) { CG.maskIncompleteMarkers(); CG.markIncompleteNodes(/*markFormals*/ !F.hasInternalLinkage() /*&& FIXME: NEED TO CHECK IF ALL CALLERS FOUND!*/); - CG.removeDeadNodes(false, true) ;///*KeepAllGlobals*/ false, true); - ///*KeepCalls*/ false); + CG.removeDeadNodes(/*KeepAllGlobals*/ false); } DEBUG(std::cerr << " [TD] Done inlining into callees for: " << F.getName() |