Date: Sun, 22 Feb 2015 15:56:17 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r279162 - head/contrib/llvm/patches Message-ID: <201502221556.t1MFuHfY010007@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Sun Feb 22 15:56:16 2015 New Revision: 279162 URL: https://svnweb.freebsd.org/changeset/base/279162 Log: Add llvm patch corresponding to r279161. Added: head/contrib/llvm/patches/patch-32-llvm-r230058-indirectbrs-assert.diff Added: head/contrib/llvm/patches/patch-32-llvm-r230058-indirectbrs-assert.diff ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/contrib/llvm/patches/patch-32-llvm-r230058-indirectbrs-assert.diff Sun Feb 22 15:56:16 2015 (r279162) @@ -0,0 +1,55 @@ +Pull in r230058 from upstream llvm trunk (by Benjamin Kramer): + + LoopRotate: When reconstructing loop simplify form don't split edges + from indirectbrs. + + Yet another chapter in the endless story. While this looks like we + leave the loop in a non-canonical state this replicates the logic in + LoopSimplify so it doesn't diverge from the canonical form in any way. + + PR21968 + +This fixes a "Cannot split critical edge from IndirectBrInst" assertion +failure when building the devel/radare2 port. + +Introduced here: https://svnweb.freebsd.org/changeset/base/279161 + +Index: lib/Transforms/Scalar/LoopRotation.cpp +=================================================================== +--- lib/Transforms/Scalar/LoopRotation.cpp ++++ lib/Transforms/Scalar/LoopRotation.cpp +@@ -498,6 +498,8 @@ bool LoopRotate::rotateLoop(Loop *L, bool Simplifi + Loop *PredLoop = LI->getLoopFor(*PI); + if (!PredLoop || PredLoop->contains(Exit)) + continue; ++ if (isa<IndirectBrInst>((*PI)->getTerminator())) ++ continue; + SplitLatchEdge |= L->getLoopLatch() == *PI; + BasicBlock *ExitSplit = SplitCriticalEdge(*PI, Exit, this); + ExitSplit->moveBefore(Exit); +Index: test/Transforms/LoopRotate/crash.ll +=================================================================== +--- test/Transforms/LoopRotate/crash.ll ++++ test/Transforms/LoopRotate/crash.ll +@@ -153,3 +153,21 @@ entry: + "5": ; preds = %"3", %entry + ret void + } ++ ++; PR21968 ++define void @test8(i1 %C, i8* %P) #0 { ++entry: ++ br label %for.cond ++ ++for.cond: ; preds = %for.inc, %entry ++ br i1 %C, label %l_bad, label %for.body ++ ++for.body: ; preds = %for.cond ++ indirectbr i8* %P, [label %for.inc, label %l_bad] ++ ++for.inc: ; preds = %for.body ++ br label %for.cond ++ ++l_bad: ; preds = %for.body, %for.cond ++ ret void ++}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201502221556.t1MFuHfY010007>