[LCG] Re-order the lazy node iterator below the node type to make some
authorChandler Carruth <chandlerc@gmail.com>
Fri, 8 Jan 2016 10:50:11 +0000 (10:50 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Fri, 8 Jan 2016 10:50:11 +0000 (10:50 +0000)
subsequent work I'm doing not have its delta obscured by boring code
motion. NFC.

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

include/llvm/Analysis/LazyCallGraph.h

index ef3d5e8fe3df1f66b11ebb3b7b61e0b059dfebd3..e02f3ab2de1f4e3749b449489a9637f013a847f4 100644 (file)
@@ -104,54 +104,10 @@ class LazyCallGraph {
 public:
   class Node;
   class SCC;
+  class iterator;
   typedef SmallVector<PointerUnion<Function *, Node *>, 4> NodeVectorT;
   typedef SmallVectorImpl<PointerUnion<Function *, Node *>> NodeVectorImplT;
 
-  /// A lazy iterator used for both the entry nodes and child nodes.
-  ///
-  /// When this iterator is dereferenced, if not yet available, a function will
-  /// be scanned for "calls" or uses of functions and its child information
-  /// will be constructed. All of these results are accumulated and cached in
-  /// the graph.
-  class iterator
-      : public iterator_adaptor_base<iterator, NodeVectorImplT::iterator,
-                                     std::forward_iterator_tag, Node> {
-    friend class LazyCallGraph;
-    friend class LazyCallGraph::Node;
-
-    LazyCallGraph *G;
-    NodeVectorImplT::iterator E;
-
-    // Build the iterator for a specific position in a node list.
-    iterator(LazyCallGraph &G, NodeVectorImplT::iterator NI,
-             NodeVectorImplT::iterator E)
-        : iterator_adaptor_base(NI), G(&G), E(E) {
-      while (I != E && I->isNull())
-        ++I;
-    }
-
-  public:
-    iterator() {}
-
-    using iterator_adaptor_base::operator++;
-    iterator &operator++() {
-      do {
-        ++I;
-      } while (I != E && I->isNull());
-      return *this;
-    }
-
-    reference operator*() const {
-      if (I->is<Node *>())
-        return *I->get<Node *>();
-
-      Function *F = I->get<Function *>();
-      Node &ChildN = G->get(*F);
-      *I = &ChildN;
-      return ChildN;
-    }
-  };
-
   /// A node in the call graph.
   ///
   /// This represents a single node. It's primary roles are to cache the list of
@@ -200,6 +156,51 @@ public:
     bool operator!=(const Node &N) const { return !operator==(N); }
   };
 
+  /// A lazy iterator used for both the entry nodes and child nodes.
+  ///
+  /// When this iterator is dereferenced, if not yet available, a function will
+  /// be scanned for "calls" or uses of functions and its child information
+  /// will be constructed. All of these results are accumulated and cached in
+  /// the graph.
+  class iterator
+      : public iterator_adaptor_base<iterator, NodeVectorImplT::iterator,
+                                     std::forward_iterator_tag, Node> {
+    friend class LazyCallGraph;
+    friend class LazyCallGraph::Node;
+
+    LazyCallGraph *G;
+    NodeVectorImplT::iterator E;
+
+    // Build the iterator for a specific position in a node list.
+    iterator(LazyCallGraph &G, NodeVectorImplT::iterator NI,
+             NodeVectorImplT::iterator E)
+        : iterator_adaptor_base(NI), G(&G), E(E) {
+      while (I != E && I->isNull())
+        ++I;
+    }
+
+  public:
+    iterator() {}
+
+    using iterator_adaptor_base::operator++;
+    iterator &operator++() {
+      do {
+        ++I;
+      } while (I != E && I->isNull());
+      return *this;
+    }
+
+    reference operator*() const {
+      if (I->is<Node *>())
+        return *I->get<Node *>();
+
+      Function *F = I->get<Function *>();
+      Node &ChildN = G->get(*F);
+      *I = &ChildN;
+      return ChildN;
+    }
+  };
+
   /// An SCC of the call graph.
   ///
   /// This represents a Strongly Connected Component of the call graph as