xref: /llvm-project/llvm/test/CodeGen/VE/Scalar/stackframe_size.ll (revision b006b60dc993b2e0ba3e412c80709477241b6be6)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=ve | FileCheck %s
3
4;;; Check stack frame allocation especially about the new SP calculation
5;;; using multiple sizes as a test of emitSPAdjustment().
6
7; Function Attrs: norecurse nounwind readnone
8define 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
16}
17
18; Function Attrs: nounwind
19define 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
43}
44
45; Function Attrs: nounwind
46define 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
70}
71
72; Function Attrs: nounwind
73define 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
97}
98
99; Function Attrs: nounwind
100define 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
124}
125
126; Function Attrs: nounwind
127define 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
151}
152
153; Function Attrs: nounwind
154define 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
178}
179
180; Function Attrs: nounwind
181define 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
209}
210