Skip to content

Commit 69a661c

Browse files
authored
[RISCV] Remove CalleeSavedInfo for Zcmp/save-restore-libcalls registers (#79535)
Registers that are pushed/popped by Zcmp or libcalls have pre-defined frame indices that are never allocated in MachineFrameInfo. They're being used throughout PEI, but the rest of codegen doesn't work that way and expects each frame index to be a valid index in MFI. This patch keeps it local to PEI and removes them from the CalleeSavedInfo list at the end of the pass. Before this pass, any MIR testing post-PEI is broken and asserts (see issue #79491).
1 parent 1aafe76 commit 69a661c

File tree

3 files changed

+314
-0
lines changed

3 files changed

+314
-0
lines changed

llvm/lib/Target/RISCV/RISCVFrameLowering.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,6 +1252,30 @@ void RISCVFrameLowering::processFunctionBeforeFrameFinalized(
12521252
RVFI->setCalleeSavedStackSize(Size);
12531253
}
12541254

1255+
void RISCVFrameLowering::processFunctionBeforeFrameIndicesReplaced(
1256+
MachineFunction &MF, RegScavenger *RS) const {
1257+
// Remove CalleeSavedInfo for registers saved by Zcmp or save/restore
1258+
// libcalls.
1259+
MachineFrameInfo &MFI = MF.getFrameInfo();
1260+
const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo();
1261+
const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>();
1262+
if (!RVFI->isPushable(MF) && !RVFI->useSaveRestoreLibCalls(MF))
1263+
return;
1264+
const std::vector<CalleeSavedInfo> &CSIs = MFI.getCalleeSavedInfo();
1265+
std::vector<CalleeSavedInfo> NewCSIs;
1266+
for (const auto &CSI : CSIs) {
1267+
// Skip CSRs that have fake a frame index.
1268+
int ReservedFI = 0;
1269+
if (TRI->hasReservedSpillSlot(MF, CSI.getReg(), ReservedFI)) {
1270+
assert(CSI.getFrameIdx() == ReservedFI &&
1271+
"Reserved CSR spill slot frame index mismatch in CSI");
1272+
continue;
1273+
}
1274+
NewCSIs.push_back(CSI);
1275+
}
1276+
MFI.setCalleeSavedInfo(std::move(NewCSIs));
1277+
}
1278+
12551279
// Not preserve stack space within prologue for outgoing variables when the
12561280
// function contains variable size objects or there are vector objects accessed
12571281
// by the frame pointer.

llvm/lib/Target/RISCV/RISCVFrameLowering.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ class RISCVFrameLowering : public TargetFrameLowering {
3737
void processFunctionBeforeFrameFinalized(MachineFunction &MF,
3838
RegScavenger *RS) const override;
3939

40+
void
41+
processFunctionBeforeFrameIndicesReplaced(MachineFunction &MF,
42+
RegScavenger *RS) const override;
43+
4044
bool hasFP(const MachineFunction &MF) const override;
4145

4246
bool hasBP(const MachineFunction &MF) const;
Lines changed: 286 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,286 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
2+
# RUN: llc -mtriple=riscv32 -mattr=+zcmp -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
3+
# RUN: | FileCheck -check-prefixes=CHECK-ZCMP32 %s
4+
# RUN: llc -mtriple=riscv32 -mattr=+save-restore -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
5+
# RUN: | FileCheck -check-prefixes=CHECK-LIBCALL32 %s
6+
# RUN: llc -mtriple=riscv64 -mattr=+zcmp -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
7+
# RUN: | FileCheck -check-prefixes=CHECK-ZCMP64 %s
8+
# RUN: llc -mtriple=riscv64 -mattr=+save-restore -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
9+
# RUN: | FileCheck -check-prefixes=CHECK-LIBCALL64 %s
10+
# RUN: llc -mtriple=riscv32 -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
11+
# RUN: | FileCheck -check-prefixes=CHECK-NO-ZCMP32 %s
12+
# RUN: llc -mtriple=riscv64 -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
13+
# RUN: | FileCheck -check-prefixes=CHECK-NO-ZCMP64 %s
14+
---
15+
name: push_rvlist15
16+
tracksRegLiveness: true
17+
body: |
18+
bb.0:
19+
; CHECK-ZCMP32-LABEL: name: push_rvlist15
20+
; CHECK-ZCMP32: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
21+
; CHECK-ZCMP32-NEXT: {{ $}}
22+
; CHECK-ZCMP32-NEXT: frame-setup CM_PUSH 15, 0, implicit $x1, implicit $x8, implicit $x9, implicit $x18, implicit $x19, implicit $x20, implicit $x21, implicit $x22, implicit $x23, implicit $x24, implicit $x25, implicit $x26, implicit $x27
23+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 64
24+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -52
25+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -48
26+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -44
27+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -40
28+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -36
29+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -32
30+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -28
31+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -24
32+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -20
33+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -16
34+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -12
35+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -8
36+
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -4
37+
; CHECK-ZCMP32-NEXT: $x1 = IMPLICIT_DEF
38+
; CHECK-ZCMP32-NEXT: $x8 = IMPLICIT_DEF
39+
; CHECK-ZCMP32-NEXT: $x9 = IMPLICIT_DEF
40+
; CHECK-ZCMP32-NEXT: $x18 = IMPLICIT_DEF
41+
; CHECK-ZCMP32-NEXT: $x19 = IMPLICIT_DEF
42+
; CHECK-ZCMP32-NEXT: $x20 = IMPLICIT_DEF
43+
; CHECK-ZCMP32-NEXT: $x21 = IMPLICIT_DEF
44+
; CHECK-ZCMP32-NEXT: $x22 = IMPLICIT_DEF
45+
; CHECK-ZCMP32-NEXT: $x23 = IMPLICIT_DEF
46+
; CHECK-ZCMP32-NEXT: $x24 = IMPLICIT_DEF
47+
; CHECK-ZCMP32-NEXT: $x25 = IMPLICIT_DEF
48+
; CHECK-ZCMP32-NEXT: $x26 = IMPLICIT_DEF
49+
; CHECK-ZCMP32-NEXT: $x27 = IMPLICIT_DEF
50+
; CHECK-ZCMP32-NEXT: frame-destroy CM_POP 15, 0, implicit-def $x1, implicit-def $x8, implicit-def $x9, implicit-def $x18, implicit-def $x19, implicit-def $x20, implicit-def $x21, implicit-def $x22, implicit-def $x23, implicit-def $x24, implicit-def $x25, implicit-def $x26, implicit-def $x27
51+
; CHECK-ZCMP32-NEXT: PseudoRET
52+
;
53+
; CHECK-LIBCALL32-LABEL: name: push_rvlist15
54+
; CHECK-LIBCALL32: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
55+
; CHECK-LIBCALL32-NEXT: {{ $}}
56+
; CHECK-LIBCALL32-NEXT: $x5 = frame-setup PseudoCALLReg target-flags(riscv-call) &__riscv_save_12
57+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 64
58+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -4
59+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8
60+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -12
61+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -16
62+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -20
63+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -24
64+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -28
65+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -32
66+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -36
67+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -40
68+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -44
69+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -48
70+
; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -52
71+
; CHECK-LIBCALL32-NEXT: $x1 = IMPLICIT_DEF
72+
; CHECK-LIBCALL32-NEXT: $x8 = IMPLICIT_DEF
73+
; CHECK-LIBCALL32-NEXT: $x9 = IMPLICIT_DEF
74+
; CHECK-LIBCALL32-NEXT: $x18 = IMPLICIT_DEF
75+
; CHECK-LIBCALL32-NEXT: $x19 = IMPLICIT_DEF
76+
; CHECK-LIBCALL32-NEXT: $x20 = IMPLICIT_DEF
77+
; CHECK-LIBCALL32-NEXT: $x21 = IMPLICIT_DEF
78+
; CHECK-LIBCALL32-NEXT: $x22 = IMPLICIT_DEF
79+
; CHECK-LIBCALL32-NEXT: $x23 = IMPLICIT_DEF
80+
; CHECK-LIBCALL32-NEXT: $x24 = IMPLICIT_DEF
81+
; CHECK-LIBCALL32-NEXT: $x25 = IMPLICIT_DEF
82+
; CHECK-LIBCALL32-NEXT: $x26 = IMPLICIT_DEF
83+
; CHECK-LIBCALL32-NEXT: $x27 = IMPLICIT_DEF
84+
; CHECK-LIBCALL32-NEXT: frame-destroy PseudoTAIL target-flags(riscv-call) &__riscv_restore_12, implicit $x2
85+
;
86+
; CHECK-ZCMP64-LABEL: name: push_rvlist15
87+
; CHECK-ZCMP64: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
88+
; CHECK-ZCMP64-NEXT: {{ $}}
89+
; CHECK-ZCMP64-NEXT: frame-setup CM_PUSH 15, 0, implicit $x1, implicit $x8, implicit $x9, implicit $x18, implicit $x19, implicit $x20, implicit $x21, implicit $x22, implicit $x23, implicit $x24, implicit $x25, implicit $x26, implicit $x27
90+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 112
91+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -104
92+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -96
93+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -88
94+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -80
95+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -72
96+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -64
97+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -56
98+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -48
99+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -40
100+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -32
101+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -24
102+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -16
103+
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -8
104+
; CHECK-ZCMP64-NEXT: $x1 = IMPLICIT_DEF
105+
; CHECK-ZCMP64-NEXT: $x8 = IMPLICIT_DEF
106+
; CHECK-ZCMP64-NEXT: $x9 = IMPLICIT_DEF
107+
; CHECK-ZCMP64-NEXT: $x18 = IMPLICIT_DEF
108+
; CHECK-ZCMP64-NEXT: $x19 = IMPLICIT_DEF
109+
; CHECK-ZCMP64-NEXT: $x20 = IMPLICIT_DEF
110+
; CHECK-ZCMP64-NEXT: $x21 = IMPLICIT_DEF
111+
; CHECK-ZCMP64-NEXT: $x22 = IMPLICIT_DEF
112+
; CHECK-ZCMP64-NEXT: $x23 = IMPLICIT_DEF
113+
; CHECK-ZCMP64-NEXT: $x24 = IMPLICIT_DEF
114+
; CHECK-ZCMP64-NEXT: $x25 = IMPLICIT_DEF
115+
; CHECK-ZCMP64-NEXT: $x26 = IMPLICIT_DEF
116+
; CHECK-ZCMP64-NEXT: $x27 = IMPLICIT_DEF
117+
; CHECK-ZCMP64-NEXT: frame-destroy CM_POP 15, 0, implicit-def $x1, implicit-def $x8, implicit-def $x9, implicit-def $x18, implicit-def $x19, implicit-def $x20, implicit-def $x21, implicit-def $x22, implicit-def $x23, implicit-def $x24, implicit-def $x25, implicit-def $x26, implicit-def $x27
118+
; CHECK-ZCMP64-NEXT: PseudoRET
119+
;
120+
; CHECK-LIBCALL64-LABEL: name: push_rvlist15
121+
; CHECK-LIBCALL64: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
122+
; CHECK-LIBCALL64-NEXT: {{ $}}
123+
; CHECK-LIBCALL64-NEXT: $x5 = frame-setup PseudoCALLReg target-flags(riscv-call) &__riscv_save_12
124+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 112
125+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8
126+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -16
127+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -24
128+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -32
129+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -40
130+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -48
131+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -56
132+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -64
133+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -72
134+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -80
135+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -88
136+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -96
137+
; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -104
138+
; CHECK-LIBCALL64-NEXT: $x1 = IMPLICIT_DEF
139+
; CHECK-LIBCALL64-NEXT: $x8 = IMPLICIT_DEF
140+
; CHECK-LIBCALL64-NEXT: $x9 = IMPLICIT_DEF
141+
; CHECK-LIBCALL64-NEXT: $x18 = IMPLICIT_DEF
142+
; CHECK-LIBCALL64-NEXT: $x19 = IMPLICIT_DEF
143+
; CHECK-LIBCALL64-NEXT: $x20 = IMPLICIT_DEF
144+
; CHECK-LIBCALL64-NEXT: $x21 = IMPLICIT_DEF
145+
; CHECK-LIBCALL64-NEXT: $x22 = IMPLICIT_DEF
146+
; CHECK-LIBCALL64-NEXT: $x23 = IMPLICIT_DEF
147+
; CHECK-LIBCALL64-NEXT: $x24 = IMPLICIT_DEF
148+
; CHECK-LIBCALL64-NEXT: $x25 = IMPLICIT_DEF
149+
; CHECK-LIBCALL64-NEXT: $x26 = IMPLICIT_DEF
150+
; CHECK-LIBCALL64-NEXT: $x27 = IMPLICIT_DEF
151+
; CHECK-LIBCALL64-NEXT: frame-destroy PseudoTAIL target-flags(riscv-call) &__riscv_restore_12, implicit $x2
152+
;
153+
; CHECK-NO-ZCMP32-LABEL: name: push_rvlist15
154+
; CHECK-NO-ZCMP32: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
155+
; CHECK-NO-ZCMP32-NEXT: {{ $}}
156+
; CHECK-NO-ZCMP32-NEXT: $x2 = frame-setup ADDI $x2, -64
157+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 64
158+
; CHECK-NO-ZCMP32-NEXT: SW killed $x1, $x2, 60 :: (store (s32) into %stack.0)
159+
; CHECK-NO-ZCMP32-NEXT: SW killed $x8, $x2, 56 :: (store (s32) into %stack.1)
160+
; CHECK-NO-ZCMP32-NEXT: SW killed $x9, $x2, 52 :: (store (s32) into %stack.2)
161+
; CHECK-NO-ZCMP32-NEXT: SW killed $x18, $x2, 48 :: (store (s32) into %stack.3)
162+
; CHECK-NO-ZCMP32-NEXT: SW killed $x19, $x2, 44 :: (store (s32) into %stack.4)
163+
; CHECK-NO-ZCMP32-NEXT: SW killed $x20, $x2, 40 :: (store (s32) into %stack.5)
164+
; CHECK-NO-ZCMP32-NEXT: SW killed $x21, $x2, 36 :: (store (s32) into %stack.6)
165+
; CHECK-NO-ZCMP32-NEXT: SW killed $x22, $x2, 32 :: (store (s32) into %stack.7)
166+
; CHECK-NO-ZCMP32-NEXT: SW killed $x23, $x2, 28 :: (store (s32) into %stack.8)
167+
; CHECK-NO-ZCMP32-NEXT: SW killed $x24, $x2, 24 :: (store (s32) into %stack.9)
168+
; CHECK-NO-ZCMP32-NEXT: SW killed $x25, $x2, 20 :: (store (s32) into %stack.10)
169+
; CHECK-NO-ZCMP32-NEXT: SW killed $x26, $x2, 16 :: (store (s32) into %stack.11)
170+
; CHECK-NO-ZCMP32-NEXT: SW killed $x27, $x2, 12 :: (store (s32) into %stack.12)
171+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -4
172+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8
173+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -12
174+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -16
175+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -20
176+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -24
177+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -28
178+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -32
179+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -36
180+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -40
181+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -44
182+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -48
183+
; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -52
184+
; CHECK-NO-ZCMP32-NEXT: $x1 = IMPLICIT_DEF
185+
; CHECK-NO-ZCMP32-NEXT: $x8 = IMPLICIT_DEF
186+
; CHECK-NO-ZCMP32-NEXT: $x9 = IMPLICIT_DEF
187+
; CHECK-NO-ZCMP32-NEXT: $x18 = IMPLICIT_DEF
188+
; CHECK-NO-ZCMP32-NEXT: $x19 = IMPLICIT_DEF
189+
; CHECK-NO-ZCMP32-NEXT: $x20 = IMPLICIT_DEF
190+
; CHECK-NO-ZCMP32-NEXT: $x21 = IMPLICIT_DEF
191+
; CHECK-NO-ZCMP32-NEXT: $x22 = IMPLICIT_DEF
192+
; CHECK-NO-ZCMP32-NEXT: $x23 = IMPLICIT_DEF
193+
; CHECK-NO-ZCMP32-NEXT: $x24 = IMPLICIT_DEF
194+
; CHECK-NO-ZCMP32-NEXT: $x25 = IMPLICIT_DEF
195+
; CHECK-NO-ZCMP32-NEXT: $x26 = IMPLICIT_DEF
196+
; CHECK-NO-ZCMP32-NEXT: $x27 = IMPLICIT_DEF
197+
; CHECK-NO-ZCMP32-NEXT: $x1 = LW $x2, 60 :: (load (s32) from %stack.0)
198+
; CHECK-NO-ZCMP32-NEXT: $x8 = LW $x2, 56 :: (load (s32) from %stack.1)
199+
; CHECK-NO-ZCMP32-NEXT: $x9 = LW $x2, 52 :: (load (s32) from %stack.2)
200+
; CHECK-NO-ZCMP32-NEXT: $x18 = LW $x2, 48 :: (load (s32) from %stack.3)
201+
; CHECK-NO-ZCMP32-NEXT: $x19 = LW $x2, 44 :: (load (s32) from %stack.4)
202+
; CHECK-NO-ZCMP32-NEXT: $x20 = LW $x2, 40 :: (load (s32) from %stack.5)
203+
; CHECK-NO-ZCMP32-NEXT: $x21 = LW $x2, 36 :: (load (s32) from %stack.6)
204+
; CHECK-NO-ZCMP32-NEXT: $x22 = LW $x2, 32 :: (load (s32) from %stack.7)
205+
; CHECK-NO-ZCMP32-NEXT: $x23 = LW $x2, 28 :: (load (s32) from %stack.8)
206+
; CHECK-NO-ZCMP32-NEXT: $x24 = LW $x2, 24 :: (load (s32) from %stack.9)
207+
; CHECK-NO-ZCMP32-NEXT: $x25 = LW $x2, 20 :: (load (s32) from %stack.10)
208+
; CHECK-NO-ZCMP32-NEXT: $x26 = LW $x2, 16 :: (load (s32) from %stack.11)
209+
; CHECK-NO-ZCMP32-NEXT: $x27 = LW $x2, 12 :: (load (s32) from %stack.12)
210+
; CHECK-NO-ZCMP32-NEXT: $x2 = frame-destroy ADDI $x2, 64
211+
; CHECK-NO-ZCMP32-NEXT: PseudoRET
212+
;
213+
; CHECK-NO-ZCMP64-LABEL: name: push_rvlist15
214+
; CHECK-NO-ZCMP64: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
215+
; CHECK-NO-ZCMP64-NEXT: {{ $}}
216+
; CHECK-NO-ZCMP64-NEXT: $x2 = frame-setup ADDI $x2, -112
217+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 112
218+
; CHECK-NO-ZCMP64-NEXT: SD killed $x1, $x2, 104 :: (store (s64) into %stack.0)
219+
; CHECK-NO-ZCMP64-NEXT: SD killed $x8, $x2, 96 :: (store (s64) into %stack.1)
220+
; CHECK-NO-ZCMP64-NEXT: SD killed $x9, $x2, 88 :: (store (s64) into %stack.2)
221+
; CHECK-NO-ZCMP64-NEXT: SD killed $x18, $x2, 80 :: (store (s64) into %stack.3)
222+
; CHECK-NO-ZCMP64-NEXT: SD killed $x19, $x2, 72 :: (store (s64) into %stack.4)
223+
; CHECK-NO-ZCMP64-NEXT: SD killed $x20, $x2, 64 :: (store (s64) into %stack.5)
224+
; CHECK-NO-ZCMP64-NEXT: SD killed $x21, $x2, 56 :: (store (s64) into %stack.6)
225+
; CHECK-NO-ZCMP64-NEXT: SD killed $x22, $x2, 48 :: (store (s64) into %stack.7)
226+
; CHECK-NO-ZCMP64-NEXT: SD killed $x23, $x2, 40 :: (store (s64) into %stack.8)
227+
; CHECK-NO-ZCMP64-NEXT: SD killed $x24, $x2, 32 :: (store (s64) into %stack.9)
228+
; CHECK-NO-ZCMP64-NEXT: SD killed $x25, $x2, 24 :: (store (s64) into %stack.10)
229+
; CHECK-NO-ZCMP64-NEXT: SD killed $x26, $x2, 16 :: (store (s64) into %stack.11)
230+
; CHECK-NO-ZCMP64-NEXT: SD killed $x27, $x2, 8 :: (store (s64) into %stack.12)
231+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8
232+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -16
233+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -24
234+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -32
235+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -40
236+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -48
237+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -56
238+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -64
239+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -72
240+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -80
241+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -88
242+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -96
243+
; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -104
244+
; CHECK-NO-ZCMP64-NEXT: $x1 = IMPLICIT_DEF
245+
; CHECK-NO-ZCMP64-NEXT: $x8 = IMPLICIT_DEF
246+
; CHECK-NO-ZCMP64-NEXT: $x9 = IMPLICIT_DEF
247+
; CHECK-NO-ZCMP64-NEXT: $x18 = IMPLICIT_DEF
248+
; CHECK-NO-ZCMP64-NEXT: $x19 = IMPLICIT_DEF
249+
; CHECK-NO-ZCMP64-NEXT: $x20 = IMPLICIT_DEF
250+
; CHECK-NO-ZCMP64-NEXT: $x21 = IMPLICIT_DEF
251+
; CHECK-NO-ZCMP64-NEXT: $x22 = IMPLICIT_DEF
252+
; CHECK-NO-ZCMP64-NEXT: $x23 = IMPLICIT_DEF
253+
; CHECK-NO-ZCMP64-NEXT: $x24 = IMPLICIT_DEF
254+
; CHECK-NO-ZCMP64-NEXT: $x25 = IMPLICIT_DEF
255+
; CHECK-NO-ZCMP64-NEXT: $x26 = IMPLICIT_DEF
256+
; CHECK-NO-ZCMP64-NEXT: $x27 = IMPLICIT_DEF
257+
; CHECK-NO-ZCMP64-NEXT: $x1 = LD $x2, 104 :: (load (s64) from %stack.0)
258+
; CHECK-NO-ZCMP64-NEXT: $x8 = LD $x2, 96 :: (load (s64) from %stack.1)
259+
; CHECK-NO-ZCMP64-NEXT: $x9 = LD $x2, 88 :: (load (s64) from %stack.2)
260+
; CHECK-NO-ZCMP64-NEXT: $x18 = LD $x2, 80 :: (load (s64) from %stack.3)
261+
; CHECK-NO-ZCMP64-NEXT: $x19 = LD $x2, 72 :: (load (s64) from %stack.4)
262+
; CHECK-NO-ZCMP64-NEXT: $x20 = LD $x2, 64 :: (load (s64) from %stack.5)
263+
; CHECK-NO-ZCMP64-NEXT: $x21 = LD $x2, 56 :: (load (s64) from %stack.6)
264+
; CHECK-NO-ZCMP64-NEXT: $x22 = LD $x2, 48 :: (load (s64) from %stack.7)
265+
; CHECK-NO-ZCMP64-NEXT: $x23 = LD $x2, 40 :: (load (s64) from %stack.8)
266+
; CHECK-NO-ZCMP64-NEXT: $x24 = LD $x2, 32 :: (load (s64) from %stack.9)
267+
; CHECK-NO-ZCMP64-NEXT: $x25 = LD $x2, 24 :: (load (s64) from %stack.10)
268+
; CHECK-NO-ZCMP64-NEXT: $x26 = LD $x2, 16 :: (load (s64) from %stack.11)
269+
; CHECK-NO-ZCMP64-NEXT: $x27 = LD $x2, 8 :: (load (s64) from %stack.12)
270+
; CHECK-NO-ZCMP64-NEXT: $x2 = frame-destroy ADDI $x2, 112
271+
; CHECK-NO-ZCMP64-NEXT: PseudoRET
272+
$x1 = IMPLICIT_DEF
273+
$x8 = IMPLICIT_DEF
274+
$x9 = IMPLICIT_DEF
275+
$x18 = IMPLICIT_DEF
276+
$x19 = IMPLICIT_DEF
277+
$x20 = IMPLICIT_DEF
278+
$x21 = IMPLICIT_DEF
279+
$x22 = IMPLICIT_DEF
280+
$x23 = IMPLICIT_DEF
281+
$x24 = IMPLICIT_DEF
282+
$x25 = IMPLICIT_DEF
283+
$x26 = IMPLICIT_DEF
284+
$x27 = IMPLICIT_DEF
285+
PseudoRET
286+
...

0 commit comments

Comments
 (0)