[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / VE / Scalar / stackframe_size.ll
blobf0368b99bfa7d640e422df913ddf3c001225e0c4
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=ve | FileCheck %s
4 ;;; Check stack frame allocation especially about the new SP calculation
5 ;;; using multiple sizes as a test of emitSPAdjustment().
7 ; Function Attrs: norecurse nounwind readnone
8 define signext i32 @test_frame0(i32 signext %0) {
9 ; CHECK-LABEL: test_frame0:
10 ; CHECK:       # %bb.0:
11 ; CHECK-NEXT:    adds.w.sx %s0, 3, %s0
12 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
13 ; CHECK-NEXT:    b.l.t (, %s10)
14   %2 = add nsw i32 %0, 3
15   ret i32 %2
18 ; Function Attrs: nounwind
19 define ptr @test_frame8(ptr %0) {
20 ; CHECK-LABEL: test_frame8:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    adds.l %s11, -16, %s11
23 ; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB1_2
24 ; CHECK-NEXT:  # %bb.1:
25 ; CHECK-NEXT:    ld %s61, 24(, %s14)
26 ; CHECK-NEXT:    or %s62, 0, %s0
27 ; CHECK-NEXT:    lea %s63, 315
28 ; CHECK-NEXT:    shm.l %s63, (%s61)
29 ; CHECK-NEXT:    shm.l %s8, 8(%s61)
30 ; CHECK-NEXT:    shm.l %s11, 16(%s61)
31 ; CHECK-NEXT:    monc
32 ; CHECK-NEXT:    or %s0, 0, %s62
33 ; CHECK-NEXT:  .LBB1_2:
34 ; CHECK-NEXT:    ld1b.zx %s1, (, %s0)
35 ; CHECK-NEXT:    lea %s0, 8(, %s11)
36 ; CHECK-NEXT:    st1b %s1, 8(, %s11)
37 ; CHECK-NEXT:    adds.l %s11, 16, %s11
38 ; CHECK-NEXT:    b.l.t (, %s10)
39   %2 = alloca [8 x i8], align 1
40   %3 = load i8, ptr %0, align 1
41   store i8 %3, ptr %2, align 1
42   ret ptr %2
45 ; Function Attrs: nounwind
46 define ptr @test_frame16(ptr %0) {
47 ; CHECK-LABEL: test_frame16:
48 ; CHECK:       # %bb.0:
49 ; CHECK-NEXT:    adds.l %s11, -16, %s11
50 ; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB2_2
51 ; CHECK-NEXT:  # %bb.1:
52 ; CHECK-NEXT:    ld %s61, 24(, %s14)
53 ; CHECK-NEXT:    or %s62, 0, %s0
54 ; CHECK-NEXT:    lea %s63, 315
55 ; CHECK-NEXT:    shm.l %s63, (%s61)
56 ; CHECK-NEXT:    shm.l %s8, 8(%s61)
57 ; CHECK-NEXT:    shm.l %s11, 16(%s61)
58 ; CHECK-NEXT:    monc
59 ; CHECK-NEXT:    or %s0, 0, %s62
60 ; CHECK-NEXT:  .LBB2_2:
61 ; CHECK-NEXT:    ld1b.zx %s1, (, %s0)
62 ; CHECK-NEXT:    lea %s0, (, %s11)
63 ; CHECK-NEXT:    st1b %s1, (, %s11)
64 ; CHECK-NEXT:    adds.l %s11, 16, %s11
65 ; CHECK-NEXT:    b.l.t (, %s10)
66   %2 = alloca [16 x i8], align 1
67   %3 = load i8, ptr %0, align 1
68   store i8 %3, ptr %2, align 1
69   ret ptr %2
72 ; Function Attrs: nounwind
73 define ptr @test_frame32(ptr %0) {
74 ; CHECK-LABEL: test_frame32:
75 ; CHECK:       # %bb.0:
76 ; CHECK-NEXT:    adds.l %s11, -32, %s11
77 ; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB3_2
78 ; CHECK-NEXT:  # %bb.1:
79 ; CHECK-NEXT:    ld %s61, 24(, %s14)
80 ; CHECK-NEXT:    or %s62, 0, %s0
81 ; CHECK-NEXT:    lea %s63, 315
82 ; CHECK-NEXT:    shm.l %s63, (%s61)
83 ; CHECK-NEXT:    shm.l %s8, 8(%s61)
84 ; CHECK-NEXT:    shm.l %s11, 16(%s61)
85 ; CHECK-NEXT:    monc
86 ; CHECK-NEXT:    or %s0, 0, %s62
87 ; CHECK-NEXT:  .LBB3_2:
88 ; CHECK-NEXT:    ld1b.zx %s1, (, %s0)
89 ; CHECK-NEXT:    lea %s0, (, %s11)
90 ; CHECK-NEXT:    st1b %s1, (, %s11)
91 ; CHECK-NEXT:    adds.l %s11, 32, %s11
92 ; CHECK-NEXT:    b.l.t (, %s10)
93   %2 = alloca [32 x i8], align 1
94   %3 = load i8, ptr %0, align 1
95   store i8 %3, ptr %2, align 1
96   ret ptr %2
99 ; Function Attrs: nounwind
100 define ptr @test_frame64(ptr %0) {
101 ; CHECK-LABEL: test_frame64:
102 ; CHECK:       # %bb.0:
103 ; CHECK-NEXT:    adds.l %s11, -64, %s11
104 ; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB4_2
105 ; CHECK-NEXT:  # %bb.1:
106 ; CHECK-NEXT:    ld %s61, 24(, %s14)
107 ; CHECK-NEXT:    or %s62, 0, %s0
108 ; CHECK-NEXT:    lea %s63, 315
109 ; CHECK-NEXT:    shm.l %s63, (%s61)
110 ; CHECK-NEXT:    shm.l %s8, 8(%s61)
111 ; CHECK-NEXT:    shm.l %s11, 16(%s61)
112 ; CHECK-NEXT:    monc
113 ; CHECK-NEXT:    or %s0, 0, %s62
114 ; CHECK-NEXT:  .LBB4_2:
115 ; CHECK-NEXT:    ld1b.zx %s1, (, %s0)
116 ; CHECK-NEXT:    lea %s0, (, %s11)
117 ; CHECK-NEXT:    st1b %s1, (, %s11)
118 ; CHECK-NEXT:    lea %s11, 64(, %s11)
119 ; CHECK-NEXT:    b.l.t (, %s10)
120   %2 = alloca [64 x i8], align 1
121   %3 = load i8, ptr %0, align 1
122   store i8 %3, ptr %2, align 1
123   ret ptr %2
126 ; Function Attrs: nounwind
127 define ptr @test_frame128(ptr %0) {
128 ; CHECK-LABEL: test_frame128:
129 ; CHECK:       # %bb.0:
130 ; CHECK-NEXT:    lea %s11, -128(, %s11)
131 ; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB5_2
132 ; CHECK-NEXT:  # %bb.1:
133 ; CHECK-NEXT:    ld %s61, 24(, %s14)
134 ; CHECK-NEXT:    or %s62, 0, %s0
135 ; CHECK-NEXT:    lea %s63, 315
136 ; CHECK-NEXT:    shm.l %s63, (%s61)
137 ; CHECK-NEXT:    shm.l %s8, 8(%s61)
138 ; CHECK-NEXT:    shm.l %s11, 16(%s61)
139 ; CHECK-NEXT:    monc
140 ; CHECK-NEXT:    or %s0, 0, %s62
141 ; CHECK-NEXT:  .LBB5_2:
142 ; CHECK-NEXT:    ld1b.zx %s1, (, %s0)
143 ; CHECK-NEXT:    lea %s0, (, %s11)
144 ; CHECK-NEXT:    st1b %s1, (, %s11)
145 ; CHECK-NEXT:    lea %s11, 128(, %s11)
146 ; CHECK-NEXT:    b.l.t (, %s10)
147   %2 = alloca [128 x i8], align 1
148   %3 = load i8, ptr %0, align 1
149   store i8 %3, ptr %2, align 1
150   ret ptr %2
153 ; Function Attrs: nounwind
154 define ptr @test_frame65536(ptr %0) {
155 ; CHECK-LABEL: test_frame65536:
156 ; CHECK:       # %bb.0:
157 ; CHECK-NEXT:    lea %s11, -65536(, %s11)
158 ; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB6_2
159 ; CHECK-NEXT:  # %bb.1:
160 ; CHECK-NEXT:    ld %s61, 24(, %s14)
161 ; CHECK-NEXT:    or %s62, 0, %s0
162 ; CHECK-NEXT:    lea %s63, 315
163 ; CHECK-NEXT:    shm.l %s63, (%s61)
164 ; CHECK-NEXT:    shm.l %s8, 8(%s61)
165 ; CHECK-NEXT:    shm.l %s11, 16(%s61)
166 ; CHECK-NEXT:    monc
167 ; CHECK-NEXT:    or %s0, 0, %s62
168 ; CHECK-NEXT:  .LBB6_2:
169 ; CHECK-NEXT:    ld1b.zx %s1, (, %s0)
170 ; CHECK-NEXT:    lea %s0, (, %s11)
171 ; CHECK-NEXT:    st1b %s1, (, %s11)
172 ; CHECK-NEXT:    lea %s11, 65536(, %s11)
173 ; CHECK-NEXT:    b.l.t (, %s10)
174   %2 = alloca [65536 x i8], align 1
175   %3 = load i8, ptr %0, align 1
176   store i8 %3, ptr %2, align 1
177   ret ptr %2
180 ; Function Attrs: nounwind
181 define ptr @test_frame4294967296(ptr %0) {
182 ; CHECK-LABEL: test_frame4294967296:
183 ; CHECK:       # %bb.0:
184 ; CHECK-NEXT:    lea %s13, 0
185 ; CHECK-NEXT:    and %s13, %s13, (32)0
186 ; CHECK-NEXT:    lea.sl %s11, -1(%s13, %s11)
187 ; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB7_2
188 ; CHECK-NEXT:  # %bb.1:
189 ; CHECK-NEXT:    ld %s61, 24(, %s14)
190 ; CHECK-NEXT:    or %s62, 0, %s0
191 ; CHECK-NEXT:    lea %s63, 315
192 ; CHECK-NEXT:    shm.l %s63, (%s61)
193 ; CHECK-NEXT:    shm.l %s8, 8(%s61)
194 ; CHECK-NEXT:    shm.l %s11, 16(%s61)
195 ; CHECK-NEXT:    monc
196 ; CHECK-NEXT:    or %s0, 0, %s62
197 ; CHECK-NEXT:  .LBB7_2:
198 ; CHECK-NEXT:    ld1b.zx %s1, (, %s0)
199 ; CHECK-NEXT:    lea %s0, (, %s11)
200 ; CHECK-NEXT:    st1b %s1, (, %s11)
201 ; CHECK-NEXT:    lea %s13, 0
202 ; CHECK-NEXT:    and %s13, %s13, (32)0
203 ; CHECK-NEXT:    lea.sl %s11, 1(%s13, %s11)
204 ; CHECK-NEXT:    b.l.t (, %s10)
205   %2 = alloca [4294967296 x i8], align 1
206   %3 = load i8, ptr %0, align 1
207   store i8 %3, ptr %2, align 1
208   ret ptr %2