1 ; RUN: llc < %s -march=xcore | FileCheck %s
2 ; RUN: llc < %s -march=xcore -disable-fp-elim | FileCheck %s -check-prefix=CHECKFP
7 ; CHECKFP-NEXT: stw r10, sp[1]
8 ; CHECKFP-NEXT: ldaw r10, sp[0]
10 ; CHECKFP-NEXT: ldw r10, sp[1]
11 ; CHECKFP-NEXT: retsp 2
14 ; CHECK: stw lr, sp[0]
15 ; CHECK: ldw lr, sp[0]
17 define void @f1() nounwind {
19 tail call void asm sideeffect "", "~{lr}"() nounwind
26 ; CHECKFP-NEXT: stw r10, sp[1]
27 ; CHECKFP-NEXT: ldaw r10, sp[0]
28 ; CHECKFP-NEXT: stw [[REG:r[4-9]+]], r10[2]
29 ; CHECKFP-NEXT: mov [[REG]], r0
30 ; CHECKFP-NEXT: extsp 1
32 ; CHECKFP-NEXT: ldaw sp, sp[1]
33 ; CHECKFP-NEXT: mov r0, [[REG]]
34 ; CHECKFP-NEXT: ldw [[REG]], r10[2]
35 ; CHECKFP-NEXT: set sp, r10
36 ; CHECKFP-NEXT: ldw r10, sp[1]
37 ; CHECKFP-NEXT: retsp 3
41 ; CHECK: stw [[REG:r[4-9]+]], sp[1]
42 ; CHECK: mov [[REG]], r0
44 ; CHECK: mov r0, [[REG]]
45 ; CHECK: ldw [[REG]], sp[1]
48 define i32 @f3(i32 %i) nounwind {
56 ; CHECKFP: extsp 65535
57 ; CHECKFP-NEXT: .Ltmp{{[0-9]+}}
58 ; CHECKFP-NEXT: .cfi_def_cfa_offset 262140
59 ; CHECKFP-NEXT: extsp 34467
60 ; CHECKFP-NEXT: .Ltmp{{[0-9]+}}
61 ; CHECKFP-NEXT: .cfi_def_cfa_offset 400008
62 ; CHECKFP-NEXT: stw r10, sp[1]
63 ; CHECKFP-NEXT: .Ltmp{{[0-9]+}}
64 ; CHECKFP-NEXT: .cfi_offset 10, -400004
65 ; CHECKFP-NEXT: ldaw r10, sp[0]
66 ; CHECKFP-NEXT: .Ltmp{{[0-9]+}}
67 ; CHECKFP-NEXT: .cfi_def_cfa_register 10
68 ; CHECKFP-NEXT: set sp, r10
69 ; CHECKFP-NEXT: ldw r10, sp[1]
70 ; CHECKFP-NEXT: ldaw sp, sp[65535]
71 ; CHECKFP-NEXT: ldaw sp, sp[34467]
72 ; CHECKFP-NEXT: retsp 0
76 ; CHECK-NEXT: .Ltmp{{[0-9]+}}
77 ; CHECK-NEXT: .cfi_def_cfa_offset 262140
78 ; CHECK-NEXT: extsp 34465
79 ; CHECK-NEXT: .Ltmp{{[0-9]+}}
80 ; CHECK-NEXT: .cfi_def_cfa_offset 400000
81 ; CHECK-NEXT: ldaw sp, sp[65535]
82 ; CHECK-NEXT: ldaw sp, sp[34465]
86 %0 = alloca [100000 x i32], align 4
92 ; CHECKFP: entsp 65535
93 ; CHECKFP-NEXT: .Ltmp{{[0-9]+}}
94 ; CHECKFP-NEXT: .cfi_def_cfa_offset 262140
95 ; CHECKFP-NEXT: .Ltmp{{[0-9]+}}
96 ; CHECKFP-NEXT: .cfi_offset 15, 0
97 ; CHECKFP-NEXT: extsp 65535
98 ; CHECKFP-NEXT: .Ltmp{{[0-9]+}}
99 ; CHECKFP-NEXT: .cfi_def_cfa_offset 524280
100 ; CHECKFP-NEXT: extsp 65535
101 ; CHECKFP-NEXT: .Ltmp{{[0-9]+}}
102 ; CHECKFP-NEXT: .cfi_def_cfa_offset 786420
103 ; CHECKFP-NEXT: extsp 3396
104 ; CHECKFP-NEXT: .Ltmp{{[0-9]+}}
105 ; CHECKFP-NEXT: .cfi_def_cfa_offset 800004
106 ; CHECKFP-NEXT: stw r10, sp[1]
107 ; CHECKFP-NEXT: .Ltmp{{[0-9]+}}
108 ; CHECKFP-NEXT: .cfi_offset 10, -800000
109 ; CHECKFP-NEXT: ldaw r10, sp[0]
110 ; CHECKFP-NEXT: .Ltmp{{[0-9]+}}
111 ; CHECKFP-NEXT: .cfi_def_cfa_register 10
112 ; CHECKFP-NEXT: extsp 1
113 ; CHECKFP-NEXT: ldaw r0, r10[2]
114 ; CHECKFP-NEXT: bl f5
115 ; CHECKFP-NEXT: ldaw sp, sp[1]
116 ; CHECKFP-NEXT: set sp, r10
117 ; CHECKFP-NEXT: ldw r10, sp[1]
118 ; CHECKFP-NEXT: ldaw sp, sp[65535]
119 ; CHECKFP-NEXT: ldaw sp, sp[65535]
120 ; CHECKFP-NEXT: ldaw sp, sp[65535]
121 ; CHECKFP-NEXT: retsp 3396
125 ; CHECK-NEXT: .Ltmp{{[0-9]+}}
126 ; CHECK-NEXT: .cfi_def_cfa_offset 262140
127 ; CHECK-NEXT: .Ltmp{{[0-9]+}}
128 ; CHECK-NEXT: .cfi_offset 15, 0
129 ; CHECK-NEXT: extsp 65535
130 ; CHECK-NEXT: .Ltmp{{[0-9]+}}
131 ; CHECK-NEXT: .cfi_def_cfa_offset 524280
132 ; CHECK-NEXT: extsp 65535
133 ; CHECK-NEXT: .Ltmp{{[0-9]+}}
134 ; CHECK-NEXT: .cfi_def_cfa_offset 786420
135 ; CHECK-NEXT: extsp 3395
136 ; CHECK-NEXT: .Ltmp{{[0-9]+}}
137 ; CHECK-NEXT: .cfi_def_cfa_offset 800000
138 ; CHECK-NEXT: ldaw r0, sp[1]
140 ; CHECK-NEXT: ldaw sp, sp[65535]
141 ; CHECK-NEXT: ldaw sp, sp[65535]
142 ; CHECK-NEXT: ldaw sp, sp[65535]
143 ; CHECK-NEXT: retsp 3395
144 declare void @f5(i32*)
147 %0 = alloca [199999 x i32], align 4
148 %1 = getelementptr inbounds [199999 x i32]* %0, i32 0, i32 0
149 call void @f5(i32* %1)