[llvm] r323515 - [CallSiteSplitting] Fix infinite loop when recording conditions.
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 30 07:26:51 PST 2018
Merged to 6.0 in r323771.
On Fri, Jan 26, 2018 at 11:36 AM, Florian Hahn via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: fhahn
> Date: Fri Jan 26 02:36:50 2018
> New Revision: 323515
>
> URL: http://llvm.org/viewvc/llvm-project?rev=323515&view=rev
> Log:
> [CallSiteSplitting] Fix infinite loop when recording conditions.
>
> Fix infinite loop when recording conditions by correctly marking basic
> blocks as visited.
>
> Fixes https://bugs.llvm.org/show_bug.cgi?id=36105
>
> Modified:
> llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp
> llvm/trunk/test/Transforms/CallSiteSplitting/callsite-no-splitting.ll
>
> Modified: llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/
> CallSiteSplitting.cpp?rev=323515&r1=323514&r2=323515&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp Fri Jan 26
> 02:36:50 2018
> @@ -140,10 +140,11 @@ static void recordConditions(CallSite CS
> recordCondition(CS, Pred, CS.getInstruction()->getParent(),
> Conditions);
> BasicBlock *From = Pred;
> BasicBlock *To = Pred;
> - SmallPtrSet<BasicBlock *, 4> Visited = {From};
> + SmallPtrSet<BasicBlock *, 4> Visited;
> while (!Visited.count(From->getSinglePredecessor()) &&
> (From = From->getSinglePredecessor())) {
> recordCondition(CS, From, To, Conditions);
> + Visited.insert(From);
> To = From;
> }
> }
>
> Modified: llvm/trunk/test/Transforms/CallSiteSplitting/callsite-no-
> splitting.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/
> Transforms/CallSiteSplitting/callsite-no-splitting.ll?rev=
> 323515&r1=323514&r2=323515&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/Transforms/CallSiteSplitting/callsite-no-splitting.ll
> (original)
> +++ llvm/trunk/test/Transforms/CallSiteSplitting/callsite-no-splitting.ll
> Fri Jan 26 02:36:50 2018
> @@ -16,3 +16,27 @@ Tail:
> %r = call i32 @callee(i32* %a, i32 %v, i32 %p)
> ret i32 %r
> }
> +
> +define void @fn1(i16 %p1) {
> +entry:
> + ret void
> +}
> +
> +define void @fn2() {
> + ret void
> +
> +; Unreachable code below
> +
> +for.inc: ; preds = %for.inc
> + br i1 undef, label %for.end6, label %for.inc
> +
> +for.end6: ; preds = %for.inc
> + br i1 undef, label %lor.rhs, label %lor.end
> +
> +lor.rhs: ; preds = %for.end6
> + br label %lor.end
> +
> +lor.end: ; preds = %for.end6,
> %lor.rhs
> + call void @fn1(i16 0)
> + ret void
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180130/d03349eb/attachment.html>
More information about the llvm-commits
mailing list