diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2010-03-05 08:38:04 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2010-03-05 08:38:04 +0000 |
| commit | 4cae133780aa35b0f40f382286b2c0eb57369fee (patch) | |
| tree | 580aa1cea2f15a1943d3175cd80d122048cfe8d5 /test | |
| parent | 2d4e4af45e074b6d712ac6fc6ab3e63456e1e24e (diff) | |
| download | external_llvm-4cae133780aa35b0f40f382286b2c0eb57369fee.zip external_llvm-4cae133780aa35b0f40f382286b2c0eb57369fee.tar.gz external_llvm-4cae133780aa35b0f40f382286b2c0eb57369fee.tar.bz2 | |
Fix an oops in x86 sibcall optimization. If the ByVal callee argument is itself passed as a pointer, then it's obviously not safe to do a tail call.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97797 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
| -rw-r--r-- | test/CodeGen/X86/tailcall2.ll | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/test/CodeGen/X86/tailcall2.ll b/test/CodeGen/X86/tailcall2.ll index 80bab61..90315fd 100644 --- a/test/CodeGen/X86/tailcall2.ll +++ b/test/CodeGen/X86/tailcall2.ll @@ -195,3 +195,24 @@ bb2: } declare i32 @foo6(i32, i32, %struct.t* byval align 4) + +; rdar://r7717598 +%struct.ns = type { i32, i32 } +%struct.cp = type { float, float } + +define %struct.ns* @t13(%struct.cp* %yy) nounwind ssp { +; 32: t13: +; 32-NOT: jmp +; 32: call +; 32: ret + +; 64: t13: +; 64-NOT: jmp +; 64: call +; 64: ret +entry: + %0 = tail call fastcc %struct.ns* @foo7(%struct.cp* byval align 4 %yy, i8 signext 0) nounwind + ret %struct.ns* %0 +} + +declare fastcc %struct.ns* @foo7(%struct.cp* byval align 4, i8 signext) nounwind ssp |
