| ; RUN: llc < %s -mtriple=i686-pc-win32 | FileCheck %s | |
| %Foo = type { i32, i32 } | |
| %frame = type { %Foo, i32, %Foo } | |
| declare void @f(%frame* inalloca %a) | |
| declare void @Foo_ctor(%Foo* %this) | |
| define void @g() { | |
| entry: | |
| %args = alloca inalloca %frame | |
| %c = getelementptr %frame, %frame* %args, i32 0, i32 2 | |
| ; CHECK: pushl %eax | |
| ; CHECK: subl $16, %esp | |
| ; CHECK: movl %esp, | |
| call void @Foo_ctor(%Foo* %c) | |
| ; CHECK: leal 12(%{{.*}}), | |
| ; CHECK-NEXT: pushl | |
| ; CHECK-NEXT: calll _Foo_ctor | |
| ; CHECK: addl $4, %esp | |
| %b = getelementptr %frame, %frame* %args, i32 0, i32 1 | |
| store i32 42, i32* %b | |
| ; CHECK: movl $42, | |
| %a = getelementptr %frame, %frame* %args, i32 0, i32 0 | |
| call void @Foo_ctor(%Foo* %a) | |
| ; CHECK-NEXT: pushl | |
| ; CHECK-NEXT: calll _Foo_ctor | |
| ; CHECK: addl $4, %esp | |
| call void @f(%frame* inalloca %args) | |
| ; CHECK: calll _f | |
| ret void | |
| } |