diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Analysis/DataStructure/BottomUpClosure.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Analysis/DataStructure/DataStructure.cpp | 17 | ||||
| -rw-r--r-- | llvm/lib/Analysis/DataStructure/Local.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Analysis/DataStructure/TopDownClosure.cpp | 2 | 
4 files changed, 13 insertions, 8 deletions
diff --git a/llvm/lib/Analysis/DataStructure/BottomUpClosure.cpp b/llvm/lib/Analysis/DataStructure/BottomUpClosure.cpp index 3dd8f204f72..5d71b19b574 100644 --- a/llvm/lib/Analysis/DataStructure/BottomUpClosure.cpp +++ b/llvm/lib/Analysis/DataStructure/BottomUpClosure.cpp @@ -63,6 +63,7 @@ bool BUDataStructures::run(Module &M) {    // nodes at the end of the BU phase should make things that they point to    // incomplete in the globals graph.    //  +  GlobalsGraph->removeTriviallyDeadNodes();    GlobalsGraph->maskIncompleteMarkers();    return false;  } diff --git a/llvm/lib/Analysis/DataStructure/DataStructure.cpp b/llvm/lib/Analysis/DataStructure/DataStructure.cpp index 68530f043ed..24ccf91357d 100644 --- a/llvm/lib/Analysis/DataStructure/DataStructure.cpp +++ b/llvm/lib/Analysis/DataStructure/DataStructure.cpp @@ -30,6 +30,8 @@ namespace {    Statistic<> NumCallNodesMerged("dsa", "Number of call nodes merged");    Statistic<> NumNodeAllocated  ("dsa", "Number of nodes allocated");    Statistic<> NumDNE            ("dsa", "Number of nodes removed by reachability"); +  Statistic<> NumTrivialDNE     ("dsa", "Number of nodes trivially removed"); +  Statistic<> NumTrivialGlobalDNE("dsa", "Number of globals trivially removed");    cl::opt<bool>    EnableDSNodeGlobalRootsHack("enable-dsa-globalrootshack", cl::Hidden, @@ -1470,8 +1472,6 @@ static void removeIdenticalCalls(std::vector<DSCallSite> &Calls) {  //  void DSGraph::removeTriviallyDeadNodes() {    TIME_REGION(X, "removeTriviallyDeadNodes"); -  removeIdenticalCalls(FunctionCalls); -  removeIdenticalCalls(AuxFunctionCalls);    // Loop over all of the nodes in the graph, calling getNode on each field.    // This will cause all nodes to update their forwarding edges, causing @@ -1531,6 +1531,7 @@ void DSGraph::removeTriviallyDeadNodes() {            for (unsigned j = 0, e = Globals.size(); j != e; ++j)              ScalarMap.erase(Globals[j]);            Node.makeNodeDead(); +          ++NumTrivialGlobalDNE;          }        }      } @@ -1538,10 +1539,14 @@ void DSGraph::removeTriviallyDeadNodes() {      if (Node.getNodeFlags() == 0 && Node.hasNoReferrers()) {        // This node is dead!        NI = Nodes.erase(NI);    // Erase & remove from node list. +      ++NumTrivialDNE;      } else {        ++NI;      }    } + +  removeIdenticalCalls(FunctionCalls); +  removeIdenticalCalls(AuxFunctionCalls);  } @@ -1755,12 +1760,8 @@ void DSGraph::removeDeadNodes(unsigned Flags) {    AuxFunctionCalls.erase(AuxFunctionCalls.begin()+CurIdx,                           AuxFunctionCalls.end()); -  // We are finally done with the GGCloner so we can clear it and then get rid -  // of unused nodes in the GlobalsGraph produced by merging. -  if (GGCloner.clonedNode()) { -    GGCloner.destroy(); -    GlobalsGraph->removeTriviallyDeadNodes(); -  } +  // We are finally done with the GGCloner so we can destroy it. +  GGCloner.destroy();    // At this point, any nodes which are visited, but not alive, are nodes    // which can be removed.  Loop over all nodes, eliminating completely diff --git a/llvm/lib/Analysis/DataStructure/Local.cpp b/llvm/lib/Analysis/DataStructure/Local.cpp index a62cf9806fc..22a60414d3c 100644 --- a/llvm/lib/Analysis/DataStructure/Local.cpp +++ b/llvm/lib/Analysis/DataStructure/Local.cpp @@ -623,6 +623,7 @@ bool LocalDataStructures::run(Module &M) {      if (!I->isExternal())        GGB.mergeInGlobalInitializer(I); +  GlobalsGraph->removeTriviallyDeadNodes();    GlobalsGraph->markIncompleteNodes(DSGraph::MarkFormalArgs);    return false;  } diff --git a/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp b/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp index 939d7ebd6e1..78ffc359525 100644 --- a/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp +++ b/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp @@ -107,6 +107,8 @@ bool TDDataStructures::run(Module &M) {    }    ArgsRemainIncomplete.clear(); +  GlobalsGraph->removeTriviallyDeadNodes(); +    return false;  }  | 

