1;PR15293: ARM codegen ice - expected larger existing stack allocation
2;RUN: llc -mtriple=arm-linux-gnueabihf < %s | FileCheck %s
3
4;CHECK-LABEL: foo:
5;CHECK: 	sub	sp, sp, #16
6;CHECK: 	push	{r11, lr}
7;CHECK: 	str	r0, [sp, #8]
8;CHECK: 	add	r0, sp, #8
9;CHECK: 	bl	fooUseParam
10;CHECK: 	pop	{r11, lr}
11;CHECK: 	add	sp, sp, #16
12;CHECK: 	mov	pc, lr
13
14;CHECK-LABEL: foo2:
15;CHECK: 	sub	sp, sp, #16
16;CHECK: 	push	{r11, lr}
17;CHECK: 	str	r0, [sp, #8]
18;CHECK: 	add	r0, sp, #8
19;CHECK: 	str	r2, [sp, #16]
20;CHECK: 	bl	fooUseParam
21;CHECK: 	add	r0, sp, #16
22;CHECK: 	bl	fooUseParam
23;CHECK: 	pop	{r11, lr}
24;CHECK: 	add	sp, sp, #16
25;CHECK: 	mov	pc, lr
26
27;CHECK-LABEL: doFoo:
28;CHECK: 	push	{r11, lr}
29;CHECK: 	ldr	r0,
30;CHECK: 	ldr	r0, [r0]
31;CHECK: 	bl	foo
32;CHECK: 	pop	{r11, lr}
33;CHECK: 	mov	pc, lr
34
35
36;CHECK-LABEL: doFoo2:
37;CHECK: 	push	{r11, lr}
38;CHECK: 	ldr	r0,
39;CHECK: 	mov	r1, #0
40;CHECK: 	ldr	r0, [r0]
41;CHECK: 	mov	r2, r0
42;CHECK: 	bl	foo2
43;CHECK: 	pop	{r11, lr}
44;CHECK: 	mov	pc, lr
45
46
47%artz = type { i32 }
48@static_val = constant %artz { i32 777 }
49
50declare void @fooUseParam(%artz* )
51
52define void @foo(%artz* byval(%artz) %s) {
53  call void @fooUseParam(%artz* %s)
54  ret void
55}
56
57define void @foo2(%artz* byval(%artz) %s, i32 %p, %artz* byval(%artz) %s2) {
58  call void @fooUseParam(%artz* %s)
59  call void @fooUseParam(%artz* %s2)
60  ret void
61}
62
63
64define void @doFoo() {
65  call void @foo(%artz* byval(%artz) @static_val)
66  ret void
67}
68
69define void @doFoo2() {
70  call void @foo2(%artz* byval(%artz) @static_val, i32 0, %artz* byval(%artz) @static_val)
71  ret void
72}
73
74