aboutsummaryrefslogtreecommitdiffstats
path: root/test/Analysis/ScalarEvolution/trip-count-switch.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/Analysis/ScalarEvolution/trip-count-switch.ll')
-rw-r--r--test/Analysis/ScalarEvolution/trip-count-switch.ll30
1 files changed, 30 insertions, 0 deletions
diff --git a/test/Analysis/ScalarEvolution/trip-count-switch.ll b/test/Analysis/ScalarEvolution/trip-count-switch.ll
new file mode 100644
index 0000000..2d2b6b4
--- /dev/null
+++ b/test/Analysis/ScalarEvolution/trip-count-switch.ll
@@ -0,0 +1,30 @@
+; RUN: opt < %s -analyze -scalar-evolution | FileCheck %s
+
+declare void @foo()
+
+define void @test1() nounwind {
+entry:
+ br label %for.cond
+
+for.cond: ; preds = %if.end, %entry
+ %i.0 = phi i32 [ 2, %entry ], [ %dec, %if.end ]
+ switch i32 %i.0, label %if.end [
+ i32 0, label %for.end
+ i32 1, label %if.then
+ ]
+
+if.then: ; preds = %for.cond
+ tail call void @foo()
+ br label %if.end
+
+if.end: ; preds = %for.cond, %if.then
+ %dec = add nsw i32 %i.0, -1
+ br label %for.cond
+
+for.end: ; preds = %for.cond
+ ret void
+
+; CHECK-LABEL: @test1
+; CHECK: Loop %for.cond: backedge-taken count is 2
+; CHECK: Loop %for.cond: max backedge-taken count is 2
+}