1; RUN: llc < %s -mtriple=i686-pc-win32 | FileCheck %s 2 3%Foo = type { i32, i32 } 4 5declare void @f(ptr inalloca(%Foo) %b) 6 7define void @a() { 8; CHECK-LABEL: _a: 9entry: 10 %b = alloca inalloca %Foo 11; CHECK: pushl %eax 12; CHECK: pushl %eax 13 %f2 = getelementptr %Foo, ptr %b, i32 0, i32 1 14 store i32 13, ptr %b 15 store i32 42, ptr %f2 16; CHECK: movl %esp, %eax 17; CHECK: movl $13, (%eax) 18; CHECK: movl $42, 4(%eax) 19 call void @f(ptr inalloca(%Foo) %b) 20; CHECK: calll _f 21 ret void 22} 23 24declare void @inreg_with_inalloca(i32 inreg %a, ptr inalloca(%Foo) %b) 25 26define void @b() { 27; CHECK-LABEL: _b: 28entry: 29 %b = alloca inalloca %Foo 30; CHECK: pushl %eax 31; CHECK: pushl %eax 32 %f2 = getelementptr %Foo, ptr %b, i32 0, i32 1 33 store i32 13, ptr %b 34 store i32 42, ptr %f2 35; CHECK: movl %esp, %eax 36; CHECK: movl $13, (%eax) 37; CHECK: movl $42, 4(%eax) 38 call void @inreg_with_inalloca(i32 inreg 1, ptr inalloca(%Foo) %b) 39; CHECK: movl $1, %eax 40; CHECK: calll _inreg_with_inalloca 41 ret void 42} 43 44declare x86_thiscallcc void @thiscall_with_inalloca(ptr %a, ptr inalloca(%Foo) %b) 45 46define void @c() { 47; CHECK-LABEL: _c: 48entry: 49 %b = alloca inalloca %Foo 50; CHECK: pushl %eax 51; CHECK: pushl %eax 52 %f2 = getelementptr %Foo, ptr %b, i32 0, i32 1 53 store i32 13, ptr %b 54 store i32 42, ptr %f2 55; CHECK: movl %esp, %eax 56; CHECK-DAG: movl $13, (%eax) 57; CHECK-DAG: movl $42, 4(%eax) 58 call x86_thiscallcc void @thiscall_with_inalloca(ptr null, ptr inalloca(%Foo) %b) 59; CHECK-DAG: xorl %ecx, %ecx 60; CHECK: calll _thiscall_with_inalloca 61 ret void 62} 63