1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-pc-linux -mcpu=corei7 | FileCheck --check-prefix=DAG %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-pc-linux -mcpu=corei7 -O0 | FileCheck --check-prefix=FAST %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker%struct.s1 = type { double, float } 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine void @g1() nounwind { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker %tmp = alloca %struct.s1, align 4 9*9880d681SAndroid Build Coastguard Worker call void @f(%struct.s1* inreg sret %tmp, i32 inreg 41, i32 inreg 42, i32 43) 10*9880d681SAndroid Build Coastguard Worker ret void 11*9880d681SAndroid Build Coastguard Worker ; DAG-LABEL: g1: 12*9880d681SAndroid Build Coastguard Worker ; DAG: subl $[[AMT:.*]], %esp 13*9880d681SAndroid Build Coastguard Worker ; DAG-NEXT: $43, (%esp) 14*9880d681SAndroid Build Coastguard Worker ; DAG-NEXT: leal 16(%esp), %eax 15*9880d681SAndroid Build Coastguard Worker ; DAG-NEXT: movl $41, %edx 16*9880d681SAndroid Build Coastguard Worker ; DAG-NEXT: movl $42, %ecx 17*9880d681SAndroid Build Coastguard Worker ; DAG-NEXT: calll f 18*9880d681SAndroid Build Coastguard Worker ; DAG-NEXT: addl $[[AMT]], %esp 19*9880d681SAndroid Build Coastguard Worker ; DAG-NEXT: ret 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker ; FAST-LABEL: g1: 22*9880d681SAndroid Build Coastguard Worker ; FAST: subl $[[AMT:.*]], %esp 23*9880d681SAndroid Build Coastguard Worker ; FAST-NEXT: leal 8(%esp), %eax 24*9880d681SAndroid Build Coastguard Worker ; FAST-NEXT: movl $41, %edx 25*9880d681SAndroid Build Coastguard Worker ; FAST-NEXT: movl $42, %ecx 26*9880d681SAndroid Build Coastguard Worker ; FAST: $43, (%esp) 27*9880d681SAndroid Build Coastguard Worker ; FAST: calll f 28*9880d681SAndroid Build Coastguard Worker ; FAST-NEXT: addl $[[AMT]], %esp 29*9880d681SAndroid Build Coastguard Worker ; FAST: ret 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdeclare void @f(%struct.s1* inreg sret, i32 inreg, i32 inreg, i32) 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker%struct.s2 = type {} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine void @g2(%struct.s2* inreg sret %agg.result) nounwind { 37*9880d681SAndroid Build Coastguard Workerentry: 38*9880d681SAndroid Build Coastguard Worker ret void 39*9880d681SAndroid Build Coastguard Worker ; DAG: g2 40*9880d681SAndroid Build Coastguard Worker ; DAG-NOT: ret $4 41*9880d681SAndroid Build Coastguard Worker ; DAG: .size g2 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker ; FAST: g2 44*9880d681SAndroid Build Coastguard Worker ; FAST-NOT: ret $4 45*9880d681SAndroid Build Coastguard Worker ; FAST: .size g2 46*9880d681SAndroid Build Coastguard Worker} 47