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