Skip to content

Commit 6082a50

Browse files
authored
[RISCV] Mark all registers marked isConstant as reserved (#96002)
This makes use of the information from TableGen instead of duplicating it in the code.
1 parent abbf3bc commit 6082a50

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,17 @@ BitVector RISCVRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
104104
BitVector Reserved(getNumRegs());
105105
auto &Subtarget = MF.getSubtarget<RISCVSubtarget>();
106106

107-
// Mark any registers requested to be reserved as such
108107
for (size_t Reg = 0; Reg < getNumRegs(); Reg++) {
108+
// Mark any GPRs requested to be reserved as such
109109
if (Subtarget.isRegisterReservedByUser(Reg))
110110
markSuperRegs(Reserved, Reg);
111+
112+
// Mark all the registers defined as constant in TableGen as reserved.
113+
if (isConstantPhysReg(Reg))
114+
markSuperRegs(Reserved, Reg);
111115
}
112116

113117
// Use markSuperRegs to ensure any register aliases are also reserved
114-
markSuperRegs(Reserved, RISCV::X0); // zero
115118
markSuperRegs(Reserved, RISCV::X2); // sp
116119
markSuperRegs(Reserved, RISCV::X3); // gp
117120
markSuperRegs(Reserved, RISCV::X4); // tp
@@ -136,7 +139,6 @@ BitVector RISCVRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
136139
markSuperRegs(Reserved, RISCV::VTYPE);
137140
markSuperRegs(Reserved, RISCV::VXSAT);
138141
markSuperRegs(Reserved, RISCV::VXRM);
139-
markSuperRegs(Reserved, RISCV::VLENB); // vlenb (constant)
140142

141143
// Floating point environment registers.
142144
markSuperRegs(Reserved, RISCV::FRM);

0 commit comments

Comments
 (0)