<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>Hi Nick,</div><div><br></div>Thanks for having the detailed algorithm.<div>According to Chandler (and I agree), </div><div><br></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; font-size: 13px; ">  We can't rely on LoopInfo to describe all backedges as LoopInfo doesn't represent unnatural loops -- essentially it isn't guaranteed to find all cycles.</span></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: 13px;"><br></span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: 13px;">I now have a simple implementation of a very conservative reachablity analysis:</span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: 13px;"><div>+  // Conservatively return true. Return false, if there is a single path</div><div>+  // starting from "From" and the path does not reach "To".</div><div>+  static bool hasPath(const BasicBlock *From, const BasicBlock *To) {</div><div><div>+    const unsigned MaxCheck = 5;</div><div>+    const BasicBlock *Current = From;</div><div>+    for (unsigned I = 0; I < MaxCheck; I++) {</div><div>+      unsigned NumSuccs = Current->getTerminator()->getNumSuccessors();</div><div>+      if (NumSuccs > 1)</div><div>+        return true;</div><div>+      if (NumSuccs == 0)</div><div>+        return false;</div><div>+      Current = Current->getTerminator()->getSuccessor(0);</div><div>+      if (Current == To)</div><div>+        return true;</div><div>+    }</div><div>+    return true;</div><div>+  }</div></div><div><br></div></span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: 13px; ">And I will file a PR to request a more advanced reachability analysis.</span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: 13px;">Please review the attached patch,</span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: 13px;"><br></span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: 13px;">Thanks,</span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: 13px;">Manman</span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: 13px;"><br></span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: 13px;"></span></font></div></body></html>