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