diff options
Diffstat (limited to 'test/CodeGen/X86/inalloca.ll')
-rw-r--r-- | test/CodeGen/X86/inalloca.ll | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/test/CodeGen/X86/inalloca.ll b/test/CodeGen/X86/inalloca.ll new file mode 100644 index 0000000000..84d694a1fb --- /dev/null +++ b/test/CodeGen/X86/inalloca.ll @@ -0,0 +1,65 @@ +; RUN: llc < %s -mtriple=i686-pc-win32 | FileCheck %s + +%Foo = type { i32, i32 } + +declare void @f(%Foo* inalloca %b) + +define void @a() { +; CHECK-LABEL: _a: +entry: + %b = alloca %Foo, inalloca +; CHECK: movl $8, %eax +; CHECK: calll __chkstk +; CHECK: movl %[[REG:[^,]*]], %esp + %f1 = getelementptr %Foo* %b, i32 0, i32 0 + %f2 = getelementptr %Foo* %b, i32 0, i32 1 + store i32 13, i32* %f1 + store i32 42, i32* %f2 +; CHECK: movl $13, (%[[REG]]) +; CHECK: movl $42, 4(%[[REG]]) + call void @f(%Foo* inalloca %b) +; CHECK: calll _f + ret void +} + +declare void @inreg_with_inalloca(i32 inreg %a, %Foo* inalloca %b) + +define void @b() { +; CHECK-LABEL: _b: +entry: + %b = alloca %Foo, inalloca +; CHECK: movl $8, %eax +; CHECK: calll __chkstk +; CHECK: movl %[[REG:[^,]*]], %esp + %f1 = getelementptr %Foo* %b, i32 0, i32 0 + %f2 = getelementptr %Foo* %b, i32 0, i32 1 + store i32 13, i32* %f1 + store i32 42, i32* %f2 +; CHECK: movl $13, (%[[REG]]) +; CHECK: movl $42, 4(%[[REG]]) + call void @inreg_with_inalloca(i32 inreg 1, %Foo* inalloca %b) +; CHECK: movl $1, %eax +; CHECK: calll _inreg_with_inalloca + ret void +} + +declare x86_thiscallcc void @thiscall_with_inalloca(i8* %a, %Foo* inalloca %b) + +define void @c() { +; CHECK-LABEL: _c: +entry: + %b = alloca %Foo, inalloca +; CHECK: movl $8, %eax +; CHECK: calll __chkstk +; CHECK: movl %[[REG:[^,]*]], %esp + %f1 = getelementptr %Foo* %b, i32 0, i32 0 + %f2 = getelementptr %Foo* %b, i32 0, i32 1 + store i32 13, i32* %f1 + store i32 42, i32* %f2 +; CHECK: movl $13, (%[[REG]]) +; CHECK: movl $42, 4(%[[REG]]) + call x86_thiscallcc void @thiscall_with_inalloca(i8* null, %Foo* inalloca %b) +; CHECK: xorl %ecx, %ecx +; CHECK: calll _thiscall_with_inalloca + ret void +} |