Skip to content

Commit 3abd0ba

Browse files
committed
[NFC][RISCV] Add test showing wrong stack slot for GPR and RVV spilled registers
This testcase shows that we attempt to assign the same offset sp + 16 to two different stack objects. The fix will come in a later change. Differential Revision: https://reviews.llvm.org/D98801
1 parent 96d14ff commit 3abd0ba

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -mattr=+m,+experimental-v -o - %s \
3+
# RUN: -start-before=prologepilog | FileCheck %s
4+
#
5+
# This test checks that we are assigning the right stack slot to GPRs and to
6+
# vector registers (VRs). If this test changes, make sure there is no overlap
7+
# between slots for GPRs and VRs.
8+
--- |
9+
define void @foo() #0 {
10+
; CHECK-LABEL: foo:
11+
; CHECK: # %bb.0: # %entry
12+
; CHECK-NEXT: addi sp, sp, -16
13+
; CHECK-NEXT: sw s9, 12(sp) # 4-byte Folded Spill
14+
; CHECK-NEXT: csrr a1, vlenb
15+
; CHECK-NEXT: slli a1, a1, 1
16+
; CHECK-NEXT: sub sp, sp, a1
17+
; CHECK-NEXT: sw a0, 8(sp) # 4-byte Folded Spill
18+
; CHECK-NEXT: vs2r.v v30, (sp) # Unknown-size Folded Spill
19+
; CHECK-NEXT: csrr a0, vlenb
20+
; CHECK-NEXT: slli a0, a0, 1
21+
; CHECK-NEXT: add sp, sp, a0
22+
; CHECK-NEXT: lw s9, 12(sp) # 4-byte Folded Reload
23+
; CHECK-NEXT: addi sp, sp, 16
24+
; CHECK-NEXT: ret
25+
entry:
26+
ret void
27+
}
28+
29+
attributes #0 = { nounwind }
30+
...
31+
---
32+
name: foo
33+
alignment: 2
34+
frameInfo:
35+
maxAlignment: 8
36+
stack:
37+
- { id: 0, type: spill-slot, size: 4, alignment: 4 }
38+
- { id: 1, type: spill-slot, size: 16, alignment: 8, stack-id: scalable-vector }
39+
machineFunctionInfo: {}
40+
body: |
41+
bb.0.entry:
42+
liveins: $x10, $v30m2
43+
44+
$x25 = COPY $x10
45+
SW renamable $x25, %stack.0, 0 :: (store 4 into %stack.0)
46+
PseudoVSPILL_M2 renamable $v30m2, %stack.1 :: (store unknown-size into %stack.1, align 8)
47+
PseudoRET
48+
49+
...
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
# RUN: llc -mtriple=riscv64 -mattr=+m,+experimental-v -o - %s \
3+
# RUN: -start-before=prologepilog | FileCheck %s
4+
#
5+
# This test checks that we are assigning the right stack slot to GPRs and to
6+
# vector registers (VRs). If this test changes, make sure there is no overlap
7+
# between slots for GPRs and VRs.
8+
--- |
9+
define void @foo() #0 {
10+
; CHECK-LABEL: foo:
11+
; CHECK: # %bb.0: # %entry
12+
; CHECK-NEXT: addi sp, sp, -32
13+
; CHECK-NEXT: sd s9, 24(sp) # 8-byte Folded Spill
14+
; CHECK-NEXT: csrr a1, vlenb
15+
; CHECK-NEXT: slli a1, a1, 1
16+
; CHECK-NEXT: sub sp, sp, a1
17+
; CHECK-NEXT: sd a0, 16(sp) # 8-byte Folded Spill
18+
; CHECK-NEXT: addi a0, sp, 16
19+
; CHECK-NEXT: vs2r.v v30, (a0) # Unknown-size Folded Spill
20+
; CHECK-NEXT: csrr a0, vlenb
21+
; CHECK-NEXT: slli a0, a0, 1
22+
; CHECK-NEXT: add sp, sp, a0
23+
; CHECK-NEXT: ld s9, 24(sp) # 8-byte Folded Reload
24+
; CHECK-NEXT: addi sp, sp, 32
25+
; CHECK-NEXT: ret
26+
entry:
27+
ret void
28+
}
29+
30+
attributes #0 = { nounwind }
31+
...
32+
---
33+
name: foo
34+
alignment: 2
35+
tracksRegLiveness: true
36+
frameInfo:
37+
maxAlignment: 8
38+
stack:
39+
- { id: 0, type: spill-slot, size: 8, alignment: 8 }
40+
- { id: 1, type: spill-slot, size: 16, alignment: 8, stack-id: scalable-vector }
41+
machineFunctionInfo: {}
42+
body: |
43+
bb.0.entry:
44+
liveins: $x10, $v30m2
45+
46+
$x25 = COPY $x10
47+
SD renamable $x25, %stack.0, 0 :: (store 8 into %stack.0)
48+
PseudoVSPILL_M2 renamable $v30m2, %stack.1 :: (store unknown-size into %stack.1, align 8)
49+
PseudoRET
50+
51+
...

0 commit comments

Comments
 (0)