[llvm-commits] [llvm] r111061 - in /llvm/trunk: lib/Transforms/Utils/LoopSimplify.cpp test/Transforms/LoopSimplify/indirectbr-backedge.ll
Dan Gohman
gohman at apple.com
Fri Aug 13 17:43:09 PDT 2010
Author: djg
Date: Fri Aug 13 19:43:09 2010
New Revision: 111061
URL: http://llvm.org/viewvc/llvm-project?rev=111061&view=rev
Log:
LoopSimplify shouldn't split loop backedges that use indirectbr. PR7867.
Added:
llvm/trunk/test/Transforms/LoopSimplify/indirectbr-backedge.ll
Modified:
llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp
Modified: llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp?rev=111061&r1=111060&r2=111061&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp Fri Aug 13 19:43:09 2010
@@ -622,6 +622,11 @@
std::vector<BasicBlock*> BackedgeBlocks;
for (pred_iterator I = pred_begin(Header), E = pred_end(Header); I != E; ++I){
BasicBlock *P = *I;
+
+ // Indirectbr edges cannot be split, so we must fail if we find one.
+ if (isa<IndirectBrInst>(P->getTerminator()))
+ return 0;
+
if (P != Preheader) BackedgeBlocks.push_back(P);
}
Added: llvm/trunk/test/Transforms/LoopSimplify/indirectbr-backedge.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopSimplify/indirectbr-backedge.ll?rev=111061&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/LoopSimplify/indirectbr-backedge.ll (added)
+++ llvm/trunk/test/Transforms/LoopSimplify/indirectbr-backedge.ll Fri Aug 13 19:43:09 2010
@@ -0,0 +1,35 @@
+; RUN: opt -loopsimplify -S < %s | FileCheck %s
+
+; LoopSimplify shouldn't split loop backedges that use indirectbr.
+
+; CHECK: bb1: ; preds = %bb5, %bb
+; CHECK-NEXT: indirectbr
+
+; CHECK: bb5: ; preds = %bb1
+; CHECK-NEXT: br label %bb1{{$}}
+
+define void @foo(i8* %p) nounwind {
+bb:
+ br label %bb1
+
+bb1: ; preds = %bb5, %bb1, %bb
+ indirectbr i8* %p, [label %bb6, label %bb7, label %bb1, label %bb2, label %bb3, label %bb5, label %bb4]
+
+bb2: ; preds = %bb1
+ ret void
+
+bb3: ; preds = %bb1
+ ret void
+
+bb4: ; preds = %bb1
+ ret void
+
+bb5: ; preds = %bb1
+ br label %bb1
+
+bb6: ; preds = %bb1
+ ret void
+
+bb7: ; preds = %bb1
+ ret void
+}
More information about the llvm-commits
mailing list