summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/LoopUnroll/unloop.ll
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2011-11-18 03:42:41 +0000
committerAndrew Trick <atrick@apple.com>2011-11-18 03:42:41 +0000
commit6b4d578f5464b5e217311c2696958f4002b5b03c (patch)
tree85f7095502b9d7749218fe0072de7bd5b2b97773 /llvm/test/Transforms/LoopUnroll/unloop.ll
parent00f43622e17752f756b216da1c976e0dc2d95722 (diff)
downloadbcm5719-llvm-6b4d578f5464b5e217311c2696958f4002b5b03c.tar.gz
bcm5719-llvm-6b4d578f5464b5e217311c2696958f4002b5b03c.zip
Fix a corner case in updating LoopInfo after fully unrolling an outer loop.
The loop tree's inclusive block lists are painful and expensive to update. (I have no idea why they're inclusive). The design was supposed to handle this case but the implementation missed it and my unit tests weren't thorough enough. Fixes PR11335: loop unroll update. llvm-svn: 144970
Diffstat (limited to 'llvm/test/Transforms/LoopUnroll/unloop.ll')
-rw-r--r--llvm/test/Transforms/LoopUnroll/unloop.ll41
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopUnroll/unloop.ll b/llvm/test/Transforms/LoopUnroll/unloop.ll
index 217c8cea56f..5a9cacda443 100644
--- a/llvm/test/Transforms/LoopUnroll/unloop.ll
+++ b/llvm/test/Transforms/LoopUnroll/unloop.ll
@@ -427,3 +427,44 @@ if.end2413: ; preds = %defchar
return: ; preds = %sw.bb304
ret void
}
+
+; PR11335: the most deeply nested block should be removed from the outer loop.
+; CHECK: @removeSubloopBlocks2
+; CHECK: for.cond3:
+; CHECK-NOT: br
+; CHECK: ret void
+define void @removeSubloopBlocks2() nounwind {
+entry:
+ %tobool.i = icmp ne i32 undef, 0
+ br label %lbl_616
+
+lbl_616.loopexit: ; preds = %for.cond
+ br label %lbl_616
+
+lbl_616: ; preds = %lbl_616.loopexit, %entry
+ br label %for.cond
+
+for.cond: ; preds = %for.cond3, %lbl_616
+ br i1 false, label %for.cond1.preheader, label %lbl_616.loopexit
+
+for.cond1.preheader: ; preds = %for.cond
+ br label %for.cond1
+
+for.cond1.loopexit: ; preds = %for.cond.i
+ br label %for.cond1
+
+for.cond1: ; preds = %for.cond1.loopexit, %for.cond1.preheader
+ br i1 false, label %for.body2, label %for.cond3
+
+for.body2: ; preds = %for.cond1
+ br label %for.cond.i
+
+for.cond.i: ; preds = %for.cond.i, %for.body2
+ br i1 %tobool.i, label %for.cond.i, label %for.cond1.loopexit
+
+for.cond3: ; preds = %for.cond1
+ br i1 false, label %for.cond, label %if.end
+
+if.end: ; preds = %for.cond3
+ ret void
+}
OpenPOWER on IntegriCloud