svn commit: r279162 - head/contrib/llvm/patches

Dimitry Andric dim at FreeBSD.org
Sun Feb 22 15:56:17 UTC 2015


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
++}


More information about the svn-src-all mailing list