feat: complete Lab3 instruction selection and assembly generation
This commit is contained in:
@@ -8,26 +8,19 @@ namespace mir {
|
||||
namespace {
|
||||
|
||||
bool IsAllowedReg(PhysReg reg) {
|
||||
switch (reg) {
|
||||
case PhysReg::W0:
|
||||
case PhysReg::W8:
|
||||
case PhysReg::W9:
|
||||
case PhysReg::X29:
|
||||
case PhysReg::X30:
|
||||
case PhysReg::SP:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return true; // We allow all defined physical registers
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void RunRegAlloc(MachineFunction& function) {
|
||||
for (const auto& inst : function.GetEntry().GetInstructions()) {
|
||||
for (const auto& operand : inst.GetOperands()) {
|
||||
if (operand.GetKind() == Operand::Kind::Reg &&
|
||||
!IsAllowedReg(operand.GetReg())) {
|
||||
throw std::runtime_error(FormatError("mir", "寄存器分配失败"));
|
||||
for (const auto& block : function.GetBlocks()) {
|
||||
for (const auto& inst : block.GetInstructions()) {
|
||||
for (const auto& operand : inst.GetOperands()) {
|
||||
if (operand.GetKind() == Operand::Kind::Reg &&
|
||||
!IsAllowedReg(operand.GetReg())) {
|
||||
throw std::runtime_error(FormatError("mir", "寄存器分配失败"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user