diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2012-07-25 13:41:10 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2012-07-25 13:41:10 +0000 |
| commit | 1cee71099c0477c6bf0e8ff76a55b8873ce146b4 (patch) | |
| tree | 13dad778c8a1fc7d4676d9c731e70a18f08ff67c /test/CodeGen | |
| parent | 742f2c9a43af3bae65922d2679de8835a6d4f302 (diff) | |
When a return struct pointer is passed in registers, the called has nothing
to pop.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160725 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen')
| -rw-r--r-- | test/CodeGen/X86/inreg.ll | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/test/CodeGen/X86/inreg.ll b/test/CodeGen/X86/inreg.ll index a6a7ebada3..6653cfb14e 100644 --- a/test/CodeGen/X86/inreg.ll +++ b/test/CodeGen/X86/inreg.ll @@ -1,19 +1,46 @@ -; RUN: llc < %s -mtriple=i686-pc-linux -mcpu=corei7 | FileCheck %s +; RUN: llc < %s -mtriple=i686-pc-linux -mcpu=corei7 | FileCheck --check-prefix=DAG %s +; RUN: llc < %s -mtriple=i686-pc-linux -mcpu=corei7 -O0 | FileCheck --check-prefix=FAST %s -%struct.s = type { double, float } +%struct.s1 = type { double, float } -define void @g() nounwind { +define void @g1() nounwind { entry: - %tmp = alloca %struct.s, align 4 - call void @f(%struct.s* inreg sret %tmp, i32 inreg 41, i32 inreg 42, i32 43) + %tmp = alloca %struct.s1, align 4 + call void @f(%struct.s1* inreg sret %tmp, i32 inreg 41, i32 inreg 42, i32 43) ret void - ; CHECK: g: - ; CHECK: subl {{.*}}, %esp - ; CHECK-NEXT: $43, (%esp) - ; CHECK-NEXT: leal 16(%esp), %eax - ; CHECK-NEXT: movl $41, %edx - ; CHECK-NEXT: movl $42, %ecx - ; CHECK-NEXT: calll f + ; DAG: g1: + ; DAG: subl $[[AMT:.*]], %esp + ; DAG-NEXT: $43, (%esp) + ; DAG-NEXT: leal 16(%esp), %eax + ; DAG-NEXT: movl $41, %edx + ; DAG-NEXT: movl $42, %ecx + ; DAG-NEXT: calll f + ; DAG-NEXT: addl $[[AMT]], %esp + ; DAG-NEXT: ret + + ; FAST: g1: + ; FAST: subl $[[AMT:.*]], %esp + ; FAST-NEXT: leal 8(%esp), %eax + ; FAST-NEXT: movl $41, %edx + ; FAST-NEXT: movl $42, %ecx + ; FAST: $43, (%esp) + ; FAST: calll f + ; FAST-NEXT: addl $[[AMT]], %esp + ; FAST: ret } -declare void @f(%struct.s* inreg sret, i32 inreg, i32 inreg, i32) +declare void @f(%struct.s1* inreg sret, i32 inreg, i32 inreg, i32) + +%struct.s2 = type {} + +define void @g2(%struct.s2* inreg sret %agg.result) nounwind { +entry: + ret void + ; DAG: g2 + ; DAG-NOT: ret $4 + ; DAG: .size g2 + + ; FAST: g2 + ; FAST-NOT: ret $4 + ; FAST: .size g2 +} |
