diff options
author | Chris Lattner <sabre@nondot.org> | 2010-08-31 18:44:03 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-08-31 18:44:03 +0000 |
commit | 06769841175f2fcdc505a4683117df31ea938613 (patch) | |
tree | 67d12c3162c64f5c366a5ec8a62bb30f4c9ecc22 /test/Transforms/TailCallElim/accum_recursion.ll | |
parent | 047f4f5c913fe2533742156893ad9a0657f69d43 (diff) |
merge two tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112617 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/TailCallElim/accum_recursion.ll')
-rw-r--r-- | test/Transforms/TailCallElim/accum_recursion.ll | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/test/Transforms/TailCallElim/accum_recursion.ll b/test/Transforms/TailCallElim/accum_recursion.ll index 66928a3032..9475f87e8f 100644 --- a/test/Transforms/TailCallElim/accum_recursion.ll +++ b/test/Transforms/TailCallElim/accum_recursion.ll @@ -37,4 +37,38 @@ return: ; preds = %entry ; CHECK: define i32 @test2_mul ; CHECK: phi i32 ; CHECK-NOT: call i32 -; CHECK: return:
\ No newline at end of file +; CHECK: return: + + +define i64 @test3_fib(i64 %n) nounwind readnone { +; CHECK: @test3_fib +entry: +; CHECK: tailrecurse: +; CHECK: %accumulator.tr = phi i64 [ %n, %entry ], [ %3, %bb1 ] +; CHECK: %n.tr = phi i64 [ %n, %entry ], [ %2, %bb1 ] + switch i64 %n, label %bb1 [ +; CHECK: switch i64 %n.tr, label %bb1 [ + i64 0, label %bb2 + i64 1, label %bb2 + ] + +bb1: +; CHECK: bb1: + %0 = add i64 %n, -1 +; CHECK: %0 = add i64 %n.tr, -1 + %1 = tail call i64 @test3_fib(i64 %0) nounwind +; CHECK: %1 = tail call i64 @test3_fib(i64 %0) + %2 = add i64 %n, -2 +; CHECK: %2 = add i64 %n.tr, -2 + %3 = tail call i64 @test3_fib(i64 %2) nounwind +; CHECK-NOT: tail call i64 @test3_fib + %4 = add nsw i64 %3, %1 +; CHECK: add nsw i64 %accumulator.tr, %1 + ret i64 %4 +; CHECK: br label %tailrecurse + +bb2: +; CHECK: bb2: + ret i64 %n +; CHECK: ret i64 %accumulator.tr +} |