Skip to content

Commit 3437eda

Browse files
committed
Pre-commit large spills test
1 parent d3be266 commit 3437eda

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
# RUN: llc %s -mtriple=riscv32 -mattr=+zilsd -start-before=prologepilog -o - | FileCheck %s
3+
4+
# We want to make sure eliminateFrameIndex doesn't fold sp+2044 as an offset in
5+
# a GPR pair spill/reload instruction. When we split the pair spill, we would be
6+
# unable to add 4 to the immediate without overflowing simm12.
7+
8+
--- |
9+
define void @foo() {
10+
; CHECK-LABEL: foo:
11+
; CHECK: # %bb.0:
12+
; CHECK-NEXT: addi sp, sp, -2048
13+
; CHECK-NEXT: addi sp, sp, -32
14+
; CHECK-NEXT: .cfi_def_cfa_offset 2080
15+
; CHECK-NEXT: lui t0, 1
16+
; CHECK-NEXT: add t0, sp, t0
17+
; CHECK-NEXT: sd a0, -2024(t0) # 8-byte Folded Spill
18+
; CHECK-NEXT: lui a0, 1
19+
; CHECK-NEXT: add a0, sp, a0
20+
; CHECK-NEXT: sd a2, -2032(a0) # 8-byte Folded Spill
21+
; CHECK-NEXT: lui a0, 1
22+
; CHECK-NEXT: add a0, sp, a0
23+
; CHECK-NEXT: sd a4, -2040(a0) # 8-byte Folded Spill
24+
; CHECK-NEXT: sd a6, 2044(sp) # 8-byte Folded Spill
25+
; CHECK-NEXT: lui a0, 1
26+
; CHECK-NEXT: add a0, sp, a0
27+
; CHECK-NEXT: ld a0, -2024(a0) # 8-byte Folded Reload
28+
; CHECK-NEXT: lui a0, 1
29+
; CHECK-NEXT: add a0, sp, a0
30+
; CHECK-NEXT: ld a2, -2032(a0) # 8-byte Folded Reload
31+
; CHECK-NEXT: lui a0, 1
32+
; CHECK-NEXT: add a0, sp, a0
33+
; CHECK-NEXT: ld a4, -2040(a0) # 8-byte Folded Reload
34+
; CHECK-NEXT: ld a6, 2044(sp) # 8-byte Folded Reload
35+
; CHECK-NEXT: addi sp, sp, 2032
36+
; CHECK-NEXT: addi sp, sp, 48
37+
; CHECK-NEXT: .cfi_def_cfa_offset 0
38+
; CHECK-NEXT: ret
39+
unreachable
40+
}
41+
...
42+
---
43+
name: foo
44+
tracksRegLiveness: true
45+
tracksDebugUserValues: true
46+
frameInfo:
47+
maxAlignment: 4
48+
stack:
49+
- { id: 0, type: spill-slot, size: 8, alignment: 4 }
50+
- { id: 1, type: spill-slot, size: 8, alignment: 4 }
51+
- { id: 2, type: spill-slot, size: 8, alignment: 4 }
52+
- { id: 3, type: spill-slot, size: 4, alignment: 4 }
53+
- { id: 4, type: spill-slot, size: 8, alignment: 4 }
54+
- { id: 5, type: spill-slot, size: 2028, alignment: 4 }
55+
machineFunctionInfo:
56+
varArgsFrameIndex: 0
57+
varArgsSaveSize: 0
58+
body: |
59+
bb.0:
60+
liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
61+
62+
PseudoSD_RV32_OPT killed renamable $x10, killed renamable $x11, %stack.0, 0 :: (store (s64) into %stack.0, align 4)
63+
PseudoSD_RV32_OPT killed renamable $x12, killed renamable $x13, %stack.1, 0 :: (store (s64) into %stack.1, align 4)
64+
PseudoSD_RV32_OPT killed renamable $x14, killed renamable $x15, %stack.2, 0 :: (store (s64) into %stack.2, align 4)
65+
PseudoSD_RV32_OPT killed renamable $x16, killed renamable $x17, %stack.4, 0 :: (store (s64) into %stack.4, align 4)
66+
renamable $x10, renamable $x11 = PseudoLD_RV32_OPT %stack.0, 0 :: (load (s64) from %stack.0, align 4)
67+
renamable $x12, renamable $x13 = PseudoLD_RV32_OPT %stack.1, 0 :: (load (s64) from %stack.1, align 4)
68+
renamable $x14, renamable $x15 = PseudoLD_RV32_OPT %stack.2, 0 :: (load (s64) from %stack.2, align 4)
69+
renamable $x16, renamable $x17 = PseudoLD_RV32_OPT %stack.4, 0 :: (load (s64) from %stack.4, align 4)
70+
PseudoRET
71+
72+
...

0 commit comments

Comments
 (0)