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