11; RUN: llc -O2 -march=sbf -mcpu=v1 < %s | FileCheck %s
22; RUN: llc -O2 -mtriple=sbpfv1-solana-solana < %s | FileCheck %s
33; RUN: llc -O2 -march=sbf -mcpu=v1 -mattr=+mem-encoding < %s | FileCheck %s
4- ; RUN: llc -O3 -march=sbf -mcpu= v3 < %s | FileCheck --check-prefix=CHECK-V3 %s
4+ ; RUN: llc -O3 -march=sbf -mattr=+dynamic-frames- v3 < %s | FileCheck --check-prefix=CHECK-V3 %s
55
66; Function Attrs: nounwind uwtable
77define i32 @caller_no_alloca (i32 %a , i32 %b , i32 %c ) #0 {
@@ -10,15 +10,20 @@ entry:
1010
1111; No changes to the stack pointer
1212; CHECK-NOT: add64 r10
13- ; Add zero to stack pointer from V3 onwards
14- ; CHECK-V3: add64 r10, 0
1513
1614; Saving arguments on the stack
1715; CHECK: stdw [r10 - 40], 60
1816; CHECK: stdw [r10 - 32], 55
1917; CHECK: stdw [r10 - 24], 50
2018; CHECK: stdw [r10 - 16], 4
2119; CHECK: stdw [r10 - 8], 3
20+
21+ ; CHECK-V3: stdw [r10 + 40], 60
22+ ; CHECK-V3: stdw [r10 + 32], 55
23+ ; CHECK-V3: stdw [r10 + 24], 50
24+ ; CHECK-V3: stdw [r10 + 16], 4
25+ ; CHECK-V3: stdw [r10 + 8], 3
26+
2227; CHECK: mov64 r4, 1
2328; CHECK: mov64 r5, 2
2429; CHECK: call callee_alloca
@@ -45,6 +50,18 @@ define i32 @caller_alloca(i32 %a, i32 %b, i32 %c) #0 {
4550; CHECK: stdw [r10 - 16], 4
4651; Offset in the callee: frame_size - 8
4752; CHECK: stdw [r10 - 8], 3
53+
54+ ; Offset in the callee: frame_size - 40
55+ ; CHECK-V3: stdw [r10 + 40], 60
56+ ; Offset in the callee: frame_size - 32
57+ ; CHECK-V3: stdw [r10 + 32], 55
58+ ; Offset in the callee: frame_size - 24
59+ ; CHECK-V3: stdw [r10 + 24], 50
60+ ; Offset in the callee: frame_size - 16
61+ ; CHECK-V3: stdw [r10 + 16], 4
62+ ; Offset in the callee: frame_size - 8
63+ ; CHECK-V3: stdw [r10 + 8], 3
64+
4865; CHECK: mov64 r4, 1
4966; CHECK: mov64 r5, 2
5067; CHECK: call callee_no_alloca
6380define i32 @callee_alloca (i32 %a , i32 %b , i32 %c , i32 %d , i32 %e , i32 %f , i32 %p , i32 %y , i32 %a1 , i32 %a2 ) #1 {
6481; CHECK-LABEL: callee_alloca
6582; CHECK: add64 r10, -128
83+ ; CHECK-V3: add64 r10, 128
84+
6685; Loading arguments
6786; CHECK: ldxw r2, [r10 + 120]
6887; CHECK: ldxw r2, [r10 + 112]
@@ -71,6 +90,16 @@ define i32 @callee_alloca(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %p
7190; CHECK: ldxw r2, [r10 + 88]
7291; Loading allocated i32
7392; CHECK: ldxw r0, [r10 + 24]
93+
94+ ; CHECK-V3: ldxw r2, [r10 - 120]
95+ ; CHECK-V3: ldxw r2, [r10 - 112]
96+ ; CHECK-V3: ldxw r2, [r10 - 104]
97+ ; CHECK-V3: ldxw r2, [r10 - 96]
98+ ; CHECK-V3: ldxw r2, [r10 - 88]
99+ ; Loading allocated i32
100+ ; CHECK-V3: ldxw r0, [r10 - 24]
101+
102+
74103; CHECK-NOT: add64 r10, 128
75104
76105entry:
@@ -93,13 +122,22 @@ entry:
93122define i32 @callee_no_alloca (i32 %a , i32 %b , i32 %c , i32 %d , i32 %e , i32 %f , i32 %p , i32 %y , i32 %a1 , i32 %a2 ) #1 {
94123; CHECK-LABEL: callee_no_alloca
95124; CHECK: add64 r10, -64
125+ ; CHECK-V3: add64 r10, 64
126+
96127; Loading arguments
97128; CHECK: ldxw r1, [r10 + 56]
98129; CHECK: ldxw r1, [r10 + 48]
99130; CHECK: ldxw r1, [r10 + 40]
100131; CHECK: ldxw r1, [r10 + 32]
101132; CHECK: ldxw r1, [r10 + 24]
102133
134+ ; Loading arguments
135+ ; CHECK-V3: ldxw r1, [r10 - 56]
136+ ; CHECK-V3: ldxw r1, [r10 - 48]
137+ ; CHECK-V3: ldxw r1, [r10 - 40]
138+ ; CHECK-V3: ldxw r1, [r10 - 32]
139+ ; CHECK-V3: ldxw r1, [r10 - 24]
140+
103141; CHECK-NOT: add64 r10, 64
104142entry:
105143 %g = add i32 %a , %b
0 commit comments