diff --git a/lib/Analysis/DataStructure/BottomUpClosure.cpp b/lib/Analysis/DataStructure/BottomUpClosure.cpp index ec9e0db9e48..1a3f48002f2 100644 --- a/lib/Analysis/DataStructure/BottomUpClosure.cpp +++ b/lib/Analysis/DataStructure/BottomUpClosure.cpp @@ -154,10 +154,11 @@ DSGraph &BUDataStructures::calculateGraph(Function &F) { } } while (Inlined && !FCs.empty()); +#if 0 Graph->maskIncompleteMarkers(); Graph->markIncompleteNodes(); - Graph->removeTriviallyDeadNodes(false); Graph->removeDeadNodes(/*KeepAllGlobals*/ true, /*KeepCalls*/ true); +#endif DEBUG(std::cerr << " [BU] Done inlining: " << F.getName() << " [" << Graph->getGraphSize() << "+" << Graph->getFunctionCalls().size() diff --git a/lib/Analysis/DataStructure/DataStructure.cpp b/lib/Analysis/DataStructure/DataStructure.cpp index 584031bade3..630ec5f4d34 100644 --- a/lib/Analysis/DataStructure/DataStructure.cpp +++ b/lib/Analysis/DataStructure/DataStructure.cpp @@ -772,8 +772,7 @@ static void removeRefsToGlobal(DSNode* N, // bool DSGraph::isNodeDead(DSNode *N) { // Is it a trivially dead shadow node... - if (N->getReferrers().empty() && - (N->NodeType == 0 || N->NodeType == DSNode::DEAD)) + if (N->getReferrers().empty() && (N->NodeType & ~DSNode::DEAD) == 0) return true; // Is it a function node or some other trivially unused global? diff --git a/lib/Analysis/DataStructure/Local.cpp b/lib/Analysis/DataStructure/Local.cpp index e731d5cb7bb..3df4fd4f600 100644 --- a/lib/Analysis/DataStructure/Local.cpp +++ b/lib/Analysis/DataStructure/Local.cpp @@ -74,9 +74,6 @@ namespace { getValueDest(*I); visit(G.getFunction()); // Single pass over the function - - // Not inlining, only eliminate trivially dead nodes. - G.removeTriviallyDeadNodes(); } private: @@ -135,6 +132,9 @@ DSGraph::DSGraph(Function &F, DSGraph *GG) : Func(&F), GlobalsGraph(GG) { // Use the graph builder to construct the local version of the graph GraphBuilder B(*this, Nodes, RetNode, ScalarMap, FunctionCalls); markIncompleteNodes(); + + // Remove any nodes made dead due to merging... + removeDeadNodes(true, true); } diff --git a/lib/Analysis/DataStructure/Steensgaard.cpp b/lib/Analysis/DataStructure/Steensgaard.cpp index aad8657d1da..5ee4dc4cece 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->removeTriviallyDeadNodes(); + ResultGraph->removeDeadNodes(true, true); DEBUG(print(std::cerr, &M)); return false; diff --git a/lib/Analysis/DataStructure/TopDownClosure.cpp b/lib/Analysis/DataStructure/TopDownClosure.cpp index 36d8aca78ca..ee559d6fc0d 100644 --- a/lib/Analysis/DataStructure/TopDownClosure.cpp +++ b/lib/Analysis/DataStructure/TopDownClosure.cpp @@ -180,7 +180,6 @@ void TDDataStructures::calculateGraph(Function &F) { CG.maskIncompleteMarkers(); CG.markIncompleteNodes(/*markFormals*/ !F.hasInternalLinkage() /*&& FIXME: NEED TO CHECK IF ALL CALLERS FOUND!*/); - CG.removeTriviallyDeadNodes(false); CG.removeDeadNodes(false, true) ;///*KeepAllGlobals*/ false, true); ///*KeepCalls*/ false); }