From 5d2c01e48afba59be7bd0eaa10db784bf2073c20 Mon Sep 17 00:00:00 2001 From: Arnold Schwaighofer Date: Mon, 15 Jun 2009 14:43:36 +0000 Subject: CheckTailCallReturnConstraints is missing a check on the incomming chain of the RETURN node. The incomming chain must be the outgoing chain of the CALL node. This causes the backend to identify tail calls that are not tail calls. This patch fixes this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73387 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/2009-06-15-not-a-tail-call.ll | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 test/CodeGen/X86/2009-06-15-not-a-tail-call.ll (limited to 'test/CodeGen/X86/2009-06-15-not-a-tail-call.ll') diff --git a/test/CodeGen/X86/2009-06-15-not-a-tail-call.ll b/test/CodeGen/X86/2009-06-15-not-a-tail-call.ll new file mode 100644 index 0000000000..095e6a1036 --- /dev/null +++ b/test/CodeGen/X86/2009-06-15-not-a-tail-call.ll @@ -0,0 +1,14 @@ +; RUN: llvm-as < %s | llc -march=x86 -tailcallopt | not grep TAILCALL + +; Bug 4396. This tail call can NOT be optimized. + +declare fastcc i8* @_D3gcx2GC12mallocNoSyncMFmkZPv() nounwind + +define fastcc i8* @_D3gcx2GC12callocNoSyncMFmkZPv() nounwind { +entry: + %tmp6 = tail call fastcc i8* @_D3gcx2GC12mallocNoSyncMFmkZPv() ; [#uses=2] + %tmp9 = tail call i8* @memset(i8* %tmp6, i32 0, i64 2) ; [#uses=0] + ret i8* %tmp6 +} + +declare i8* @memset(i8*, i32, i64) -- cgit v1.2.3