[PATCH] D23146: [ADT] Migrate DepthFirstIterator to use NodeRef

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 4 11:24:37 PDT 2016


dblaikie added a comment.

Removing the ability to compare non-end iterators seems like a loss of functionality & would be pretty tricky for the average user (would catch them by surprise that only end iterators are comparable).

Unless there's a reason the design already precludes comparing non-end iterators, I'd say it's best to preserve the existing behavior there.

Other than that, it looks pretty reasonable.


================
Comment at: include/llvm/ADT/DepthFirstIterator.h:111
@@ +110,3 @@
+
+      if (!Opt.hasValue())
+        Opt.emplace(GT::child_begin(Node));
----------------
I'd just write this as "if (!Opt)" - but up to you.

================
Comment at: include/llvm/ADT/DepthFirstIterator.h:114-117
@@ -112,4 +113,6 @@
+
+      ChildItTy &It = *Opt;
 
       while (It != GT::child_end(Node)) {
-        NodeType *Next = *It++;
+        NodeRef Next = *It++;
         // Has our next sibling been visited?
----------------
For a separate patch: any idea why this isn't a normal for (or even range-for) loop?

================
Comment at: include/llvm/ADT/DepthFirstIterator.h:121
@@ -117,4 +120,3 @@
           // No, do it now.
-          VisitStack.push_back(
-              std::make_pair(PointerIntTy(Next, 0), GT::child_begin(Next)));
+          VisitStack.push_back(StackElement{Next, None});
           return;
----------------
We aren't really using braced init like that much in the project so far. I'd probably stick with () when calling a ctor. (same feedback elsewhere)


https://reviews.llvm.org/D23146





More information about the llvm-commits mailing list