aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-12-09 16:26:42 +0000
committerChris Lattner <sabre@nondot.org>2003-12-09 16:26:42 +0000
commitbb9fc2c461ef4cef16283f7c964741a3949c7fb8 (patch)
tree0699601c330206d7c427853170e3e0d625e9fec3
parentaa2a47d813ae0adcefeae5c3a6564e6cf8ddb3db (diff)
New testcase that is not actually handled yet, but should be in the future.
This is here to remind me to get back to this after a while. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10336 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--test/Transforms/TailCallElim/tail_call_with_branch.ll31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/Transforms/TailCallElim/tail_call_with_branch.ll b/test/Transforms/TailCallElim/tail_call_with_branch.ll
new file mode 100644
index 0000000000..de606fc231
--- /dev/null
+++ b/test/Transforms/TailCallElim/tail_call_with_branch.ll
@@ -0,0 +1,31 @@
+; This testcase is due to tail-duplication not wanting to copy the return
+; instruction into the terminating blocks because there was other code
+; optimized out of the function after the taildup happened.
+
+; RUN: llvm-as < %s | opt -tailcallelim | llvm-dis | not grep call
+
+int %t4(int %a) {
+entry:
+ %tmp.1 = and int %a, 1
+ %tmp.2 = cast int %tmp.1 to bool
+ br bool %tmp.2, label %then.0, label %else.0
+
+then.0:
+ %tmp.5 = add int %a, -1
+ %tmp.3 = call int %t4( int %tmp.5 )
+ br label %return
+
+else.0:
+ %tmp.7 = setne int %a, 0
+ br bool %tmp.7, label %then.1, label %return
+
+then.1:
+ %tmp.11 = add int %a, -2
+ %tmp.9 = call int %t4( int %tmp.11 )
+ br label %return
+
+return:
+ %result.0 = phi int [ 0, %else.0 ], [ %tmp.3, %then.0 ], [ %tmp.9, %then.1 ]
+ ret int %result.0
+}
+