diff options
author | Evan Cheng <evan.cheng@apple.com> | 2012-03-30 01:24:39 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2012-03-30 01:24:39 +0000 |
commit | 1c80f56268fa91f9c0c4d0a32b5d61e7b900c6d4 (patch) | |
tree | 47129178815a910090df328fed56fdb51bba1d9d /test/CodeGen/ARM/call-tc.ll | |
parent | c459d31164a5fab4a33b14ae9084e5e5bbd7ed4b (diff) | |
download | external_llvm-1c80f56268fa91f9c0c4d0a32b5d61e7b900c6d4.zip external_llvm-1c80f56268fa91f9c0c4d0a32b5d61e7b900c6d4.tar.gz external_llvm-1c80f56268fa91f9c0c4d0a32b5d61e7b900c6d4.tar.bz2 |
ARM target should allow codegenprep to duplicate ret instructions to enable tailcall opt. rdar://11140249
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153717 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/ARM/call-tc.ll')
-rw-r--r-- | test/CodeGen/ARM/call-tc.ll | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/CodeGen/ARM/call-tc.ll b/test/CodeGen/ARM/call-tc.ll index be3e105..7d24500 100644 --- a/test/CodeGen/ARM/call-tc.ll +++ b/test/CodeGen/ARM/call-tc.ll @@ -96,3 +96,45 @@ bb: tail call void @foo() nounwind ret void } + +; Make sure codegenprep is duplicating ret instructions to enable tail calls. +; rdar://11140249 +define i32 @t8(i32 %x) nounwind ssp { +entry: +; CHECKT2D: t8: +; CHECKT2D-NOT: push +; CHECKT2D-NOT + %and = and i32 %x, 1 + %tobool = icmp eq i32 %and, 0 + br i1 %tobool, label %if.end, label %if.then + +if.then: ; preds = %entry +; CHECKT2D: bne.w _a + %call = tail call i32 @a(i32 %x) nounwind + br label %return + +if.end: ; preds = %entry + %and1 = and i32 %x, 2 + %tobool2 = icmp eq i32 %and1, 0 + br i1 %tobool2, label %if.end5, label %if.then3 + +if.then3: ; preds = %if.end +; CHECKT2D: bne.w _b + %call4 = tail call i32 @b(i32 %x) nounwind + br label %return + +if.end5: ; preds = %if.end +; CHECKT2D: b.w _c + %call6 = tail call i32 @c(i32 %x) nounwind + br label %return + +return: ; preds = %if.end5, %if.then3, %if.then + %retval.0 = phi i32 [ %call, %if.then ], [ %call4, %if.then3 ], [ %call6, %if.end5 ] + ret i32 %retval.0 +} + +declare i32 @a(i32) + +declare i32 @b(i32) + +declare i32 @c(i32) |