63 lines · plain
1; RUN: llc < %s -mtriple=i686-pc-win32 | FileCheck %s2 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 %Foo11; CHECK: pushl %eax12; CHECK: pushl %eax13 %f2 = getelementptr %Foo, ptr %b, i32 0, i32 114 store i32 13, ptr %b15 store i32 42, ptr %f216; CHECK: movl %esp, %eax17; CHECK: movl $13, (%eax)18; CHECK: movl $42, 4(%eax)19 call void @f(ptr inalloca(%Foo) %b)20; CHECK: calll _f21 ret void22}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 %Foo30; CHECK: pushl %eax31; CHECK: pushl %eax32 %f2 = getelementptr %Foo, ptr %b, i32 0, i32 133 store i32 13, ptr %b34 store i32 42, ptr %f235; CHECK: movl %esp, %eax36; 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, %eax40; CHECK: calll _inreg_with_inalloca41 ret void42}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 %Foo50; CHECK: pushl %eax51; CHECK: pushl %eax52 %f2 = getelementptr %Foo, ptr %b, i32 0, i32 153 store i32 13, ptr %b54 store i32 42, ptr %f255; CHECK: movl %esp, %eax56; 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, %ecx60; CHECK: calll _thiscall_with_inalloca61 ret void62}63