@@ -104,14 +104,17 @@ BitVector RISCVRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
104
104
BitVector Reserved (getNumRegs ());
105
105
auto &Subtarget = MF.getSubtarget <RISCVSubtarget>();
106
106
107
- // Mark any registers requested to be reserved as such
108
107
for (size_t Reg = 0 ; Reg < getNumRegs (); Reg++) {
108
+ // Mark any GPRs requested to be reserved as such
109
109
if (Subtarget.isRegisterReservedByUser (Reg))
110
110
markSuperRegs (Reserved, Reg);
111
+
112
+ // Mark all the registers defined as constant in TableGen as reserved.
113
+ if (isConstantPhysReg (Reg))
114
+ markSuperRegs (Reserved, Reg);
111
115
}
112
116
113
117
// Use markSuperRegs to ensure any register aliases are also reserved
114
- markSuperRegs (Reserved, RISCV::X0); // zero
115
118
markSuperRegs (Reserved, RISCV::X2); // sp
116
119
markSuperRegs (Reserved, RISCV::X3); // gp
117
120
markSuperRegs (Reserved, RISCV::X4); // tp
@@ -136,7 +139,6 @@ BitVector RISCVRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
136
139
markSuperRegs (Reserved, RISCV::VTYPE);
137
140
markSuperRegs (Reserved, RISCV::VXSAT);
138
141
markSuperRegs (Reserved, RISCV::VXRM);
139
- markSuperRegs (Reserved, RISCV::VLENB); // vlenb (constant)
140
142
141
143
// Floating point environment registers.
142
144
markSuperRegs (Reserved, RISCV::FRM);
0 commit comments