<div dir="ltr">Merged to 6.0 in r323771.</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 26, 2018 at 11:36 AM, Florian Hahn via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: fhahn<br>
Date: Fri Jan 26 02:36:50 2018<br>
New Revision: 323515<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=323515&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=323515&view=rev</a><br>
Log:<br>
[CallSiteSplitting] Fix infinite loop when recording conditions.<br>
<br>
Fix infinite loop when recording conditions by correctly marking basic<br>
blocks as visited.<br>
<br>
Fixes <a href="https://bugs.llvm.org/show_bug.cgi?id=36105" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_<wbr>bug.cgi?id=36105</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/Transforms/<wbr>Scalar/CallSiteSplitting.cpp<br>
    llvm/trunk/test/Transforms/<wbr>CallSiteSplitting/callsite-no-<wbr>splitting.ll<br>
<br>
Modified: llvm/trunk/lib/Transforms/<wbr>Scalar/CallSiteSplitting.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp?rev=323515&r1=323514&r2=323515&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>Transforms/Scalar/<wbr>CallSiteSplitting.cpp?rev=<wbr>323515&r1=323514&r2=323515&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Transforms/<wbr>Scalar/CallSiteSplitting.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/<wbr>Scalar/CallSiteSplitting.cpp Fri Jan 26 02:36:50 2018<br>
@@ -140,10 +140,11 @@ static void recordConditions(CallSite CS<br>
   recordCondition(CS, Pred, CS.getInstruction()-><wbr>getParent(), Conditions);<br>
   BasicBlock *From = Pred;<br>
   BasicBlock *To = Pred;<br>
-  SmallPtrSet<BasicBlock *, 4> Visited = {From};<br>
+  SmallPtrSet<BasicBlock *, 4> Visited;<br>
   while (!Visited.count(From-><wbr>getSinglePredecessor()) &&<br>
          (From = From->getSinglePredecessor())) {<br>
     recordCondition(CS, From, To, Conditions);<br>
+    Visited.insert(From);<br>
     To = From;<br>
   }<br>
 }<br>
<br>
Modified: llvm/trunk/test/Transforms/<wbr>CallSiteSplitting/callsite-no-<wbr>splitting.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/CallSiteSplitting/callsite-no-splitting.ll?rev=323515&r1=323514&r2=323515&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>Transforms/CallSiteSplitting/<wbr>callsite-no-splitting.ll?rev=<wbr>323515&r1=323514&r2=323515&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Transforms/<wbr>CallSiteSplitting/callsite-no-<wbr>splitting.ll (original)<br>
+++ llvm/trunk/test/Transforms/<wbr>CallSiteSplitting/callsite-no-<wbr>splitting.ll Fri Jan 26 02:36:50 2018<br>
@@ -16,3 +16,27 @@ Tail:<br>
   %r = call i32 @callee(i32* %a, i32 %v, i32 %p)<br>
   ret i32 %r<br>
 }<br>
+<br>
+define void @fn1(i16 %p1) {<br>
+entry:<br>
+  ret void<br>
+}<br>
+<br>
+define void @fn2() {<br>
+  ret void<br>
+<br>
+; Unreachable code below<br>
+<br>
+for.inc:                                          ; preds = %for.inc<br>
+  br i1 undef, label %for.end6, label %for.inc<br>
+<br>
+for.end6:                                         ; preds = %for.inc<br>
+  br i1 undef, label %lor.rhs, label %lor.end<br>
+<br>
+lor.rhs:                                          ; preds = %for.end6<br>
+  br label %lor.end<br>
+<br>
+lor.end:                                          ; preds = %for.end6, %lor.rhs<br>
+  call void @fn1(i16 0)<br>
+  ret void<br>
+}<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>