]> granicus.if.org Git - llvm/commitdiff
[LCG] Rather than walking the directed graph structure to update graph
authorChandler Carruth <chandlerc@gmail.com>
Sat, 5 Aug 2017 03:37:39 +0000 (03:37 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sat, 5 Aug 2017 03:37:39 +0000 (03:37 +0000)
pointers in node objects, just walk the map from function to node.

It doesn't have stable ordering, but works just as well and is much
simpler. We don't need ordering when just updating internal pointers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@310163 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/LazyCallGraph.cpp

index 690ca7d5122fb502412bcbae7d8d39ea81beaeca..b64129b33dcce1ce6d527a1529419c972ec6ad4d 100644 (file)
@@ -1684,20 +1684,10 @@ LazyCallGraph::Node &LazyCallGraph::insertInto(Function &F, Node *&MappedN) {
 }
 
 void LazyCallGraph::updateGraphPtrs() {
-  // Process all nodes updating the graph pointers.
-  {
-    SmallVector<Node *, 16> Worklist;
-    for (Edge &E : EntryEdges)
-      Worklist.push_back(&E.getNode());
-
-    while (!Worklist.empty()) {
-      Node &N = *Worklist.pop_back_val();
-      N.G = this;
-      if (N)
-        for (Edge &E : *N)
-          Worklist.push_back(&E.getNode());
-    }
-  }
+  // Walk the node map to update their graph pointers. While this iterates in
+  // an unstable order, the order has no effect so it remains correct.
+  for (auto &FunctionNodePair : NodeMap)
+    FunctionNodePair.second->G = this;
 
   for (auto *RC : PostOrderRefSCCs)
     RC->G = this;