merge two tests and convert to filecheck.
[oota-llvm.git] / test / Transforms / TailCallElim / switch.ll
1 ; RUN: opt %s -tailcallelim -S | FileCheck %s
2
3 define i64 @fib(i64 %n) nounwind readnone {
4 ; CHECK: @fib
5 entry:
6 ; CHECK: tailrecurse:
7 ; CHECK: %accumulator.tr = phi i64 [ %n, %entry ], [ %3, %bb1 ]
8 ; CHECK: %n.tr = phi i64 [ %n, %entry ], [ %2, %bb1 ]
9   switch i64 %n, label %bb1 [
10 ; CHECK: switch i64 %n.tr, label %bb1 [
11     i64 0, label %bb2
12     i64 1, label %bb2
13   ]
14
15 bb1:
16 ; CHECK: bb1:
17   %0 = add i64 %n, -1
18 ; CHECK: %0 = add i64 %n.tr, -1
19   %1 = tail call i64 @fib(i64 %0) nounwind
20 ; CHECK: %1 = tail call i64 @fib(i64 %0)
21   %2 = add i64 %n, -2
22 ; CHECK: %2 = add i64 %n.tr, -2
23   %3 = tail call i64 @fib(i64 %2) nounwind
24 ; CHECK-NOT: tail call i64 @fib
25   %4 = add nsw i64 %3, %1
26 ; CHECK: add nsw i64 %accumulator.tr, %1
27   ret i64 %4
28 ; CHECK: br label %tailrecurse
29
30 bb2:
31 ; CHECK: bb2:
32   ret i64 %n
33 ; CHECK: ret i64 %accumulator.tr
34 }