Skip to content

Commit ad2bb1b

Browse files
author
Francis Visoiu Mistrih
committed
[RISCV] Mark all registers marked isConstant as reserved
This makes use of the information from TableGen instead of duplicating it in the code.
1 parent 773ee62 commit ad2bb1b

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,18 @@ 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
108-
for (size_t Reg = 0; Reg < getNumRegs(); Reg++) {
109-
if (Subtarget.isRegisterReservedByUser(Reg))
107+
for (Register Reg = RISCV::NoRegister; Reg < RISCV::NUM_TARGET_REGS; Reg++) {
108+
// Mark any GPRs requested to be reserved as such
109+
if (Reg >= RISCV::X0 && Reg <= RISCV::X31 &&
110+
Subtarget.isRegisterReservedByUser(Reg))
111+
markSuperRegs(Reserved, Reg);
112+
113+
// Mark all the registers defined as constant in TableGen as reserved.
114+
if (isConstantPhysReg(Reg))
110115
markSuperRegs(Reserved, Reg);
111116
}
112117

113118
// Use markSuperRegs to ensure any register aliases are also reserved
114-
markSuperRegs(Reserved, RISCV::X0); // zero
115119
markSuperRegs(Reserved, RISCV::X2); // sp
116120
markSuperRegs(Reserved, RISCV::X3); // gp
117121
markSuperRegs(Reserved, RISCV::X4); // tp
@@ -136,7 +140,6 @@ BitVector RISCVRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
136140
markSuperRegs(Reserved, RISCV::VTYPE);
137141
markSuperRegs(Reserved, RISCV::VXSAT);
138142
markSuperRegs(Reserved, RISCV::VXRM);
139-
markSuperRegs(Reserved, RISCV::VLENB); // vlenb (constant)
140143

141144
// Floating point environment registers.
142145
markSuperRegs(Reserved, RISCV::FRM);

0 commit comments

Comments
 (0)