Date: Sun, 22 Feb 2015 15:51:50 +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: r279161 - head/contrib/llvm/lib/Transforms/Scalar Message-ID: <201502221551.t1MFpoCn009366@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Sun Feb 22 15:51:49 2015 New Revision: 279161 URL: https://svnweb.freebsd.org/changeset/base/279161 Log: 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. http://llvm.org/PR21968 This fixes a "Cannot split critical edge from IndirectBrInst" assertion failure when building the devel/radare2 port. PR: 195480, 196987 MFC after: 3 days Modified: head/contrib/llvm/lib/Transforms/Scalar/LoopRotation.cpp Modified: head/contrib/llvm/lib/Transforms/Scalar/LoopRotation.cpp ============================================================================== --- head/contrib/llvm/lib/Transforms/Scalar/LoopRotation.cpp Sun Feb 22 15:48:36 2015 (r279160) +++ head/contrib/llvm/lib/Transforms/Scalar/LoopRotation.cpp Sun Feb 22 15:51:49 2015 (r279161) @@ -498,6 +498,8 @@ bool LoopRotate::rotateLoop(Loop *L, boo 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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201502221551.t1MFpoCn009366>