Dereferencing ChildIteratorType needs to return a NodeRef, not succ_iterator.<br><br><div class="gmail_quote"><div dir="ltr">On Thu, Aug 11, 2016, 18:06 Adam Nemet <<a href="mailto:anemet@apple.com">anemet@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">anemet added inline comments.<br>
<br>
================<br>
Comment at: lib/Transforms/Vectorize/LoopVectorize.cpp:262-265<br>
@@ +261,6 @@<br>
+<br>
+ static NodeRef getEntryNode(const Loop &G) { return {&G, G.getHeader()}; }<br>
+<br>
+ static ChildIteratorType child_begin(NodeRef Node) {<br>
+ return make_filter_range(make_range<WrappedSuccIterator>(<br>
+ {succ_begin(Node.second), Node.first},<br>
----------------<br>
I am not sure we're talking about the same thing. I meant:<br>
<br>
return make_filter_range(make_range<succ_iterator>(<br>
succ_begin(Node.second),<br>
succ_end(Node.second)),<br>
LoopBodyFilter(Node.first))<br>
<br>
and then:<br>
<br>
struct LoopBodyFilter {<br>
LoopBodyFitler(Loop *L) : L(L) {}<br>
bool operator()(BasicBlock *BB) const {<br>
return BB != L->getHeader() && L->contains(BB);<br>
}<br>
Loop *L;<br>
};<br>
<br>
?<br>
<br>
In other words, it does not seem any different to me whether you attach the loop to the succ_iterator or the filter object.<br>
<br>
<br>
<a href="https://reviews.llvm.org/D22952" rel="noreferrer" target="_blank">https://reviews.llvm.org/D22952</a><br>
<br>
<br>
<br>
</blockquote></div>