summaryrefslogtreecommitdiff
path: root/test/Transforms/LoopDeletion
diff options
context:
space:
mode:
authorCameron Zwarich <zwarich@apple.com>2011-02-22 22:25:39 +0000
committerCameron Zwarich <zwarich@apple.com>2011-02-22 22:25:39 +0000
commitc4f3d51e12390f39f314451d868350e2a11a52b6 (patch)
treecb8168bf39a610b9b09f193f4176db00228b33b2 /test/Transforms/LoopDeletion
parent00743c2218ff3f0f4edce972e2d88893a19e6ef8 (diff)
downloadllvm-c4f3d51e12390f39f314451d868350e2a11a52b6.tar.gz
llvm-c4f3d51e12390f39f314451d868350e2a11a52b6.tar.bz2
llvm-c4f3d51e12390f39f314451d868350e2a11a52b6.tar.xz
Make LoopDeletion work on loops with multiple edges, as long as the incoming
values from all of the loop's exiting blocks are equal. Patch by Andrew Clinton. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126253 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/LoopDeletion')
-rw-r--r--test/Transforms/LoopDeletion/multiple-exits.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/Transforms/LoopDeletion/multiple-exits.ll b/test/Transforms/LoopDeletion/multiple-exits.ll
new file mode 100644
index 0000000000..6af413b49c
--- /dev/null
+++ b/test/Transforms/LoopDeletion/multiple-exits.ll
@@ -0,0 +1,26 @@
+; RUN: opt < %s -loop-deletion -S | FileCheck %s
+
+; Checks whether dead loops with multiple exits can be eliminated
+
+; CHECK: entry:
+; CHECK-NEXT: br label %return
+
+; CHECK: return:
+; CHECK-NEXT: ret void
+
+define void @foo(i64 %n, i64 %m) nounwind {
+entry:
+ br label %bb
+
+bb:
+ %x.0 = phi i64 [ 0, %entry ], [ %t0, %bb2 ]
+ %t0 = add i64 %x.0, 1
+ %t1 = icmp slt i64 %x.0, %n
+ br i1 %t1, label %bb2, label %return
+bb2:
+ %t2 = icmp slt i64 %x.0, %m
+ br i1 %t1, label %bb, label %return
+
+return:
+ ret void
+}