<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Apr 18, 2017, at 20:22, Tim Shen via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Author: timshen<br class="">Date: Tue Apr 18 22:22:50 2017<br class="">New Revision: 300656<br class=""><br class="">URL: <a href="http://llvm.org/viewvc/llvm-project?rev=300656&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=300656&view=rev</a><br class="">Log:<br class="">Cleanup some GraphTraits iteration code<br class=""><br class="">Use children<> and nodes<> in appropriate places to cleanup the code.<br class=""><br class="">Also, as part of the cleanup,<br class="">change the signature of DominatorTreeBase's Split.<br class="">It is a protected non-virtual member function called only twice,<br class="">both from within the class,<br class="">and the removed passed argument in both cases is '*this'.<br class="">The reason for the existence of that argument seems to be that<br class="">back before r43115 Split was a free function,<br class="">so an argument to get '*this' was needed - but now that is no longer the<br class="">case.<br class=""><br class="">Patch by Yoav Ben-Shalom!<br class=""><br class="">Differential Revision: <a href="https://reviews.llvm.org/D32118" class="">https://reviews.llvm.org/D32118</a><br class=""><br class="">Modified:<br class="">    llvm/trunk/include/llvm/Analysis/BlockFrequencyInfoImpl.h<br class="">    llvm/trunk/include/llvm/Analysis/DominanceFrontierImpl.h<br class="">    llvm/trunk/include/llvm/Analysis/LoopInfo.h<br class="">    llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h<br class="">    llvm/trunk/include/llvm/Support/GenericDomTree.h<br class="">    llvm/trunk/include/llvm/Support/GraphWriter.h<br class=""><br class="">Modified: llvm/trunk/include/llvm/Analysis/BlockFrequencyInfoImpl.h<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/BlockFrequencyInfoImpl.h?rev=300656&r1=300655&r2=300656&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/BlockFrequencyInfoImpl.h?rev=300656&r1=300655&r2=300656&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/include/llvm/Analysis/BlockFrequencyInfoImpl.h (original)<br class="">+++ llvm/trunk/include/llvm/Analysis/BlockFrequencyInfoImpl.h Tue Apr 18 22:22:50 2017<br class="">@@ -1164,9 +1164,8 @@ template <class BT> struct BlockEdgesAdd<br class="">   void operator()(IrreducibleGraph &G, IrreducibleGraph::IrrNode &Irr,<br class="">                   const LoopData *OuterLoop) {<br class="">     const BlockT *BB = BFI.RPOT[Irr.Node.Index];<br class="">-    for (auto I = Successor::child_begin(BB), E = Successor::child_end(BB);<br class="">-         I != E; ++I)<br class="">-      G.addEdge(Irr, BFI.getNode(*I), OuterLoop);<br class="">+    for (const auto Succ : children<const BlockT *>(BB))<br class="">+      G.addEdge(Irr, BFI.getNode(Succ), OuterLoop);<br class="">   }<br class=""> };<br class=""> }<br class="">@@ -1210,10 +1209,9 @@ BlockFrequencyInfoImpl<BT>::propagateMas<br class="">       return false;<br class="">   } else {<br class="">     const BlockT *BB = getBlock(Node);<br class="">-    for (auto SI = Successor::child_begin(BB), SE = Successor::child_end(BB);<br class="">-         SI != SE; ++SI)<br class="">-      if (!addToDist(Dist, OuterLoop, Node, getNode(*SI),<br class="">-                     getWeightFromBranchProb(BPI->getEdgeProbability(BB, SI))))<br class="">+    for (const auto Succ : children<const BlockT *>(BB))<br class="">+      if (!addToDist(Dist, OuterLoop, Node, getNode(Succ),<br class="">+                     getWeightFromBranchProb(BPI->getEdgeProbability(BB, Succ))))<br class=""></div></div></blockquote><div><br class=""></div><div>FYI, this resulted in a semantic change and a quadratic compile-time regression, as this changed from passing an edge-iterator to passing a block-reference, a different overload of `getEdgeProbability`.  See:</div><div><a href="https://reviews.llvm.org/D40891" class="">https://reviews.llvm.org/D40891</a></div><br class=""><blockquote type="cite" class=""><div class=""><div class="">         // Irreducible backedge.<br class="">         return false;<br class="">   }<br class=""><br class="">Modified: llvm/trunk/include/llvm/Analysis/DominanceFrontierImpl.h<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DominanceFrontierImpl.h?rev=300656&r1=300655&r2=300656&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DominanceFrontierImpl.h?rev=300656&r1=300655&r2=300656&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/include/llvm/Analysis/DominanceFrontierImpl.h (original)<br class="">+++ llvm/trunk/include/llvm/Analysis/DominanceFrontierImpl.h Tue Apr 18 22:22:50 2017<br class="">@@ -174,12 +174,10 @@ ForwardDominanceFrontierBase<BlockT>::ca<br class="">     // Visit each block only once.<br class="">     if (visited.insert(currentBB).second) {<br class="">       // Loop over CFG successors to calculate DFlocal[currentNode]<br class="">-      for (auto SI = BlockTraits::child_begin(currentBB),<br class="">-                SE = BlockTraits::child_end(currentBB);<br class="">-           SI != SE; ++SI) {<br class="">+      for (const auto Succ : children<BlockT *>(currentBB)) {<br class="">         // Does Node immediately dominate this successor?<br class="">-        if (DT[*SI]->getIDom() != currentNode)<br class="">-          S.insert(*SI);<br class="">+        if (DT[Succ]->getIDom() != currentNode)<br class="">+          S.insert(Succ);<br class="">       }<br class="">     }<br class=""><br class=""><br class="">Modified: llvm/trunk/include/llvm/Analysis/LoopInfo.h<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfo.h?rev=300656&r1=300655&r2=300656&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfo.h?rev=300656&r1=300655&r2=300656&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/include/llvm/Analysis/LoopInfo.h (original)<br class="">+++ llvm/trunk/include/llvm/Analysis/LoopInfo.h Tue Apr 18 22:22:50 2017<br class="">@@ -158,11 +158,8 @@ public:<br class="">   /// True if terminator in the block can branch to another block that is<br class="">   /// outside of the current loop.<br class="">   bool isLoopExiting(const BlockT *BB) const {<br class="">-    typedef GraphTraits<const BlockT*> BlockTraits;<br class="">-    for (typename BlockTraits::ChildIteratorType SI =<br class="">-         BlockTraits::child_begin(BB),<br class="">-         SE = BlockTraits::child_end(BB); SI != SE; ++SI) {<br class="">-      if (!contains(*SI))<br class="">+    for (const auto Succ : children<const BlockT*>(BB)) {<br class="">+      if (!contains(Succ))<br class="">         return true;<br class="">     }<br class="">     return false;<br class="">@@ -186,11 +183,8 @@ public:<br class="">     unsigned NumBackEdges = 0;<br class="">     BlockT *H = getHeader();<br class=""><br class="">-    typedef GraphTraits<Inverse<BlockT*> > InvBlockTraits;<br class="">-    for (typename InvBlockTraits::ChildIteratorType I =<br class="">-         InvBlockTraits::child_begin(H),<br class="">-         E = InvBlockTraits::child_end(H); I != E; ++I)<br class="">-      if (contains(*I))<br class="">+    for (const auto Pred : children<Inverse<BlockT*> >(H))<br class="">+      if (contains(Pred))<br class="">         ++NumBackEdges;<br class=""><br class="">     return NumBackEdges;<br class="">@@ -249,12 +243,9 @@ public:<br class="">   /// contains a branch back to the header.<br class="">   void getLoopLatches(SmallVectorImpl<BlockT *> &LoopLatches) const {<br class="">     BlockT *H = getHeader();<br class="">-    typedef GraphTraits<Inverse<BlockT*> > InvBlockTraits;<br class="">-    for (typename InvBlockTraits::ChildIteratorType I =<br class="">-         InvBlockTraits::child_begin(H),<br class="">-         E = InvBlockTraits::child_end(H); I != E; ++I)<br class="">-      if (contains(*I))<br class="">-        LoopLatches.push_back(*I);<br class="">+    for (const auto Pred : children<Inverse<BlockT*>>(H))<br class="">+      if (contains(Pred))<br class="">+        LoopLatches.push_back(Pred);<br class="">   }<br class=""><br class="">   //===--------------------------------------------------------------------===//<br class=""><br class="">Modified: llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h?rev=300656&r1=300655&r2=300656&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h?rev=300656&r1=300655&r2=300656&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h (original)<br class="">+++ llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h Tue Apr 18 22:22:50 2017<br class="">@@ -34,14 +34,11 @@ namespace llvm {<br class=""> template<class BlockT, class LoopT><br class=""> void LoopBase<BlockT, LoopT>::<br class=""> getExitingBlocks(SmallVectorImpl<BlockT *> &ExitingBlocks) const {<br class="">-  typedef GraphTraits<BlockT*> BlockTraits;<br class="">-  for (block_iterator BI = block_begin(), BE = block_end(); BI != BE; ++BI)<br class="">-    for (typename BlockTraits::ChildIteratorType I =<br class="">-           BlockTraits::child_begin(*BI), E = BlockTraits::child_end(*BI);<br class="">-         I != E; ++I)<br class="">-      if (!contains(*I)) {<br class="">+  for (const auto BB : blocks())<br class="">+    for (const auto Succ : children<BlockT*>(BB))<br class="">+      if (!contains(Succ)) {<br class="">         // Not in current loop? It must be an exit block.<br class="">-        ExitingBlocks.push_back(*BI);<br class="">+        ExitingBlocks.push_back(BB);<br class="">         break;<br class="">       }<br class=""> }<br class="">@@ -63,14 +60,11 @@ BlockT *LoopBase<BlockT, LoopT>::getExit<br class=""> template<class BlockT, class LoopT><br class=""> void LoopBase<BlockT, LoopT>::<br class=""> getExitBlocks(SmallVectorImpl<BlockT*> &ExitBlocks) const {<br class="">-  typedef GraphTraits<BlockT*> BlockTraits;<br class="">-  for (block_iterator BI = block_begin(), BE = block_end(); BI != BE; ++BI)<br class="">-    for (typename BlockTraits::ChildIteratorType I =<br class="">-           BlockTraits::child_begin(*BI), E = BlockTraits::child_end(*BI);<br class="">-         I != E; ++I)<br class="">-      if (!contains(*I))<br class="">+  for (const auto BB : blocks())<br class="">+    for (const auto Succ : children<BlockT*>(BB))<br class="">+      if (!contains(Succ))<br class="">         // Not in current loop? It must be an exit block.<br class="">-        ExitBlocks.push_back(*I);<br class="">+        ExitBlocks.push_back(Succ);<br class=""> }<br class=""><br class=""> /// getExitBlock - If getExitBlocks would return exactly one block,<br class="">@@ -88,14 +82,11 @@ BlockT *LoopBase<BlockT, LoopT>::getExit<br class=""> template<class BlockT, class LoopT><br class=""> void LoopBase<BlockT, LoopT>::<br class=""> getExitEdges(SmallVectorImpl<Edge> &ExitEdges) const {<br class="">-  typedef GraphTraits<BlockT*> BlockTraits;<br class="">-  for (block_iterator BI = block_begin(), BE = block_end(); BI != BE; ++BI)<br class="">-    for (typename BlockTraits::ChildIteratorType I =<br class="">-           BlockTraits::child_begin(*BI), E = BlockTraits::child_end(*BI);<br class="">-         I != E; ++I)<br class="">-      if (!contains(*I))<br class="">+  for (const auto BB : blocks())<br class="">+    for (const auto Succ : children<BlockT*>(BB))<br class="">+      if (!contains(Succ))<br class="">         // Not in current loop? It must be an exit block.<br class="">-        ExitEdges.push_back(Edge(*BI, *I));<br class="">+        ExitEdges.emplace_back(BB, Succ);<br class=""> }<br class=""><br class=""> /// getLoopPreheader - If there is a preheader for this loop, return it.  A<br class="">@@ -134,15 +125,11 @@ BlockT *LoopBase<BlockT, LoopT>::getLoop<br class=""><br class="">   // Loop over the predecessors of the header node...<br class="">   BlockT *Header = getHeader();<br class="">-  typedef GraphTraits<Inverse<BlockT*> > InvBlockTraits;<br class="">-  for (typename InvBlockTraits::ChildIteratorType PI =<br class="">-         InvBlockTraits::child_begin(Header),<br class="">-         PE = InvBlockTraits::child_end(Header); PI != PE; ++PI) {<br class="">-    typename InvBlockTraits::NodeRef N = *PI;<br class="">-    if (!contains(N)) {     // If the block is not in the loop...<br class="">-      if (Out && Out != N)<br class="">+  for (const auto Pred : children<Inverse<BlockT*>>(Header)) {<br class="">+    if (!contains(Pred)) {     // If the block is not in the loop...<br class="">+      if (Out && Out != Pred)<br class="">         return nullptr;     // Multiple predecessors outside the loop<br class="">-      Out = N;<br class="">+      Out = Pred;<br class="">     }<br class="">   }<br class=""><br class="">@@ -156,17 +143,11 @@ BlockT *LoopBase<BlockT, LoopT>::getLoop<br class=""> template<class BlockT, class LoopT><br class=""> BlockT *LoopBase<BlockT, LoopT>::getLoopLatch() const {<br class="">   BlockT *Header = getHeader();<br class="">-  typedef GraphTraits<Inverse<BlockT*> > InvBlockTraits;<br class="">-  typename InvBlockTraits::ChildIteratorType PI =<br class="">-    InvBlockTraits::child_begin(Header);<br class="">-  typename InvBlockTraits::ChildIteratorType PE =<br class="">-    InvBlockTraits::child_end(Header);<br class="">   BlockT *Latch = nullptr;<br class="">-  for (; PI != PE; ++PI) {<br class="">-    typename InvBlockTraits::NodeRef N = *PI;<br class="">-    if (contains(N)) {<br class="">+  for (const auto Pred : children<Inverse<BlockT*>>(Header)) {<br class="">+    if (contains(Pred)) {<br class="">       if (Latch) return nullptr;<br class="">-      Latch = N;<br class="">+      Latch = Pred;<br class="">     }<br class="">   }<br class=""><br class="">@@ -394,11 +375,9 @@ static void discoverAndMapSubloop(LoopT<br class="">       // within this subloop tree itself. Note that a predecessor may directly<br class="">       // reach another subloop that is not yet discovered to be a subloop of<br class="">       // this loop, which we must traverse.<br class="">-      for (typename InvBlockTraits::ChildIteratorType PI =<br class="">-             InvBlockTraits::child_begin(PredBB),<br class="">-             PE = InvBlockTraits::child_end(PredBB); PI != PE; ++PI) {<br class="">-        if (LI->getLoopFor(*PI) != Subloop)<br class="">-          ReverseCFGWorklist.push_back(*PI);<br class="">+      for (const auto Pred : children<Inverse<BlockT*>>(PredBB)) {<br class="">+        if (LI->getLoopFor(Pred) != Subloop)<br class="">+          ReverseCFGWorklist.push_back(Pred);<br class="">       }<br class="">     }<br class="">   }<br class="">@@ -482,13 +461,7 @@ analyze(const DominatorTreeBase<BlockT><br class="">     SmallVector<BlockT *, 4> Backedges;<br class=""><br class="">     // Check each predecessor of the potential loop header.<br class="">-    typedef GraphTraits<Inverse<BlockT*> > InvBlockTraits;<br class="">-    for (typename InvBlockTraits::ChildIteratorType PI =<br class="">-           InvBlockTraits::child_begin(Header),<br class="">-           PE = InvBlockTraits::child_end(Header); PI != PE; ++PI) {<br class="">-<br class="">-      BlockT *Backedge = *PI;<br class="">-<br class="">+    for (const auto Backedge : children<Inverse<BlockT*>>(Header)) {<br class="">       // If Header dominates predBB, this is a new loop. Collect the backedges.<br class="">       if (DomTree.dominates(Header, Backedge)<br class="">           && DomTree.isReachableFromEntry(Backedge)) {<br class=""><br class="">Modified: llvm/trunk/include/llvm/Support/GenericDomTree.h<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/GenericDomTree.h?rev=300656&r1=300655&r2=300656&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/GenericDomTree.h?rev=300656&r1=300655&r2=300656&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/include/llvm/Support/GenericDomTree.h (original)<br class="">+++ llvm/trunk/include/llvm/Support/GenericDomTree.h Tue Apr 18 22:22:50 2017<br class="">@@ -276,32 +276,25 @@ protected:<br class=""><br class="">   // NewBB is split and now it has one successor. Update dominator tree to<br class="">   // reflect this change.<br class="">-  template <class N, class GraphT><br class="">-  void Split(DominatorTreeBaseByGraphTraits<GraphT> &DT,<br class="">-             typename GraphT::NodeRef NewBB) {<br class="">+  template <class N><br class="">+  void Split(typename GraphTraits<N>::NodeRef NewBB) {<br class="">+    using GraphT = GraphTraits<N>;<br class="">+    using NodeRef = typename GraphT::NodeRef;<br class="">     assert(std::distance(GraphT::child_begin(NewBB),<br class="">                          GraphT::child_end(NewBB)) == 1 &&<br class="">            "NewBB should have a single successor!");<br class="">-    typename GraphT::NodeRef NewBBSucc = *GraphT::child_begin(NewBB);<br class="">+    NodeRef NewBBSucc = *GraphT::child_begin(NewBB);<br class=""><br class="">-    std::vector<typename GraphT::NodeRef> PredBlocks;<br class="">-    typedef GraphTraits<Inverse<N>> InvTraits;<br class="">-    for (typename InvTraits::ChildIteratorType<br class="">-             PI = InvTraits::child_begin(NewBB),<br class="">-             PE = InvTraits::child_end(NewBB);<br class="">-         PI != PE; ++PI)<br class="">-      PredBlocks.push_back(*PI);<br class="">+    std::vector<NodeRef> PredBlocks;<br class="">+    for (const auto Pred : children<Inverse<N>>(NewBB))<br class="">+      PredBlocks.push_back(Pred);<br class=""><br class="">     assert(!PredBlocks.empty() && "No predblocks?");<br class=""><br class="">     bool NewBBDominatesNewBBSucc = true;<br class="">-    for (typename InvTraits::ChildIteratorType<br class="">-             PI = InvTraits::child_begin(NewBBSucc),<br class="">-             E = InvTraits::child_end(NewBBSucc);<br class="">-         PI != E; ++PI) {<br class="">-      typename InvTraits::NodeRef ND = *PI;<br class="">-      if (ND != NewBB && !DT.dominates(NewBBSucc, ND) &&<br class="">-          DT.isReachableFromEntry(ND)) {<br class="">+    for (const auto Pred : children<Inverse<N>>(NewBBSucc)) {<br class="">+      if (Pred != NewBB && !dominates(NewBBSucc, Pred) &&<br class="">+          isReachableFromEntry(Pred)) {<br class="">         NewBBDominatesNewBBSucc = false;<br class="">         break;<br class="">       }<br class="">@@ -312,7 +305,7 @@ protected:<br class="">     NodeT *NewBBIDom = nullptr;<br class="">     unsigned i = 0;<br class="">     for (i = 0; i < PredBlocks.size(); ++i)<br class="">-      if (DT.isReachableFromEntry(PredBlocks[i])) {<br class="">+      if (isReachableFromEntry(PredBlocks[i])) {<br class="">         NewBBIDom = PredBlocks[i];<br class="">         break;<br class="">       }<br class="">@@ -324,18 +317,18 @@ protected:<br class="">       return;<br class=""><br class="">     for (i = i + 1; i < PredBlocks.size(); ++i) {<br class="">-      if (DT.isReachableFromEntry(PredBlocks[i]))<br class="">-        NewBBIDom = DT.findNearestCommonDominator(NewBBIDom, PredBlocks[i]);<br class="">+      if (isReachableFromEntry(PredBlocks[i]))<br class="">+        NewBBIDom = findNearestCommonDominator(NewBBIDom, PredBlocks[i]);<br class="">     }<br class=""><br class="">     // Create the new dominator tree node... and set the idom of NewBB.<br class="">-    DomTreeNodeBase<NodeT> *NewBBNode = DT.addNewBlock(NewBB, NewBBIDom);<br class="">+    DomTreeNodeBase<NodeT> *NewBBNode = addNewBlock(NewBB, NewBBIDom);<br class=""><br class="">     // If NewBB strictly dominates other blocks, then it is now the immediate<br class="">     // dominator of NewBBSucc.  Update the dominator tree as appropriate.<br class="">     if (NewBBDominatesNewBBSucc) {<br class="">-      DomTreeNodeBase<NodeT> *NewBBSuccNode = DT.getNode(NewBBSucc);<br class="">-      DT.changeImmediateDominator(NewBBSuccNode, NewBBNode);<br class="">+      DomTreeNodeBase<NodeT> *NewBBSuccNode = getNode(NewBBSucc);<br class="">+      changeImmediateDominator(NewBBSuccNode, NewBBNode);<br class="">     }<br class="">   }<br class=""><br class="">@@ -379,7 +372,7 @@ public:<br class="">     if (DomTreeNodes.size() != OtherDomTreeNodes.size())<br class="">       return true;<br class=""><br class="">-    for (const auto &DomTreeNode : this->DomTreeNodes) {<br class="">+    for (const auto &DomTreeNode : DomTreeNodes) {<br class="">       NodeT *BB = DomTreeNode.first;<br class="">       typename DomTreeNodeMapType::const_iterator OI =<br class="">           OtherDomTreeNodes.find(BB);<br class="">@@ -663,10 +656,9 @@ public:<br class="">   /// tree to reflect this change.<br class="">   void splitBlock(NodeT *NewBB) {<br class="">     if (this->IsPostDominators)<br class="">-      this->Split<Inverse<NodeT *>, GraphTraits<Inverse<NodeT *>>>(*this,<br class="">-                                                                   NewBB);<br class="">+      Split<Inverse<NodeT *>>(NewBB);<br class="">     else<br class="">-      this->Split<NodeT *, GraphTraits<NodeT *>>(*this, NewBB);<br class="">+      Split<NodeT *>(NewBB);<br class="">   }<br class=""><br class="">   /// print - Convert to human readable form<br class="">@@ -677,7 +669,7 @@ public:<br class="">       o << "Inorder PostDominator Tree: ";<br class="">     else<br class="">       o << "Inorder Dominator Tree: ";<br class="">-    if (!this->DFSInfoValid)<br class="">+    if (!DFSInfoValid)<br class="">       o << "DFSNumbers invalid: " << SlowQueries << " slow queries.";<br class="">     o << "\n";<br class=""><br class="">@@ -712,12 +704,12 @@ protected:<br class="">     // immediate dominator.<br class="">     NodeT *IDom = getIDom(BB);<br class=""><br class="">-    assert(IDom || this->DomTreeNodes[nullptr]);<br class="">+    assert(IDom || DomTreeNodes[nullptr]);<br class="">     DomTreeNodeBase<NodeT> *IDomNode = getNodeForBlock(IDom);<br class=""><br class="">     // Add a new tree node for this NodeT, and link it as a child of<br class="">     // IDomNode<br class="">-    return (this->DomTreeNodes[BB] = IDomNode->addChild(<br class="">+    return (DomTreeNodes[BB] = IDomNode->addChild(<br class="">                 llvm::make_unique<DomTreeNodeBase<NodeT>>(BB, IDomNode))).get();<br class="">   }<br class=""><br class="">@@ -780,7 +772,7 @@ public:<br class="">   template <class FT> void recalculate(FT &F) {<br class="">     typedef GraphTraits<FT *> TraitsTy;<br class="">     reset();<br class="">-    this->Vertex.push_back(nullptr);<br class="">+    Vertex.push_back(nullptr);<br class=""><br class="">     if (!this->IsPostDominators) {<br class="">       // Initialize root<br class=""><br class="">Modified: llvm/trunk/include/llvm/Support/GraphWriter.h<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/GraphWriter.h?rev=300656&r1=300655&r2=300656&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/GraphWriter.h?rev=300656&r1=300655&r2=300656&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/include/llvm/Support/GraphWriter.h (original)<br class="">+++ llvm/trunk/include/llvm/Support/GraphWriter.h Tue Apr 18 22:22:50 2017<br class="">@@ -143,10 +143,9 @@ public:<br class=""><br class="">   void writeNodes() {<br class="">     // Loop over the graph, printing it out...<br class="">-    for (node_iterator I = GTraits::nodes_begin(G), E = GTraits::nodes_end(G);<br class="">-         I != E; ++I)<br class="">-      if (!isNodeHidden(*I))<br class="">-        writeNode(*I);<br class="">+    for (const auto Node : nodes<GraphType>(G))<br class="">+      if (!isNodeHidden(Node))<br class="">+        writeNode(Node);<br class="">   }<br class=""><br class="">   bool isNodeHidden(NodeRef Node) {<br class=""><br class=""><br class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></div></div></blockquote></div><br class=""></body></html>