diff options
Diffstat (limited to 'backend/lib/CodeGen')
| -rw-r--r-- | backend/lib/CodeGen/MIRParser/MIRParser.cpp | 2 | ||||
| -rw-r--r-- | backend/lib/CodeGen/MachineFunctionAttributes.cpp | 2 | ||||
| -rw-r--r-- | backend/lib/CodeGen/MachineOperand.cpp | 5 |
3 files changed, 9 insertions, 0 deletions
diff --git a/backend/lib/CodeGen/MIRParser/MIRParser.cpp b/backend/lib/CodeGen/MIRParser/MIRParser.cpp index c7e92a0..944d0c9 100644 --- a/backend/lib/CodeGen/MIRParser/MIRParser.cpp +++ b/backend/lib/CodeGen/MIRParser/MIRParser.cpp @@ -276,6 +276,8 @@ bool MIRDocumentParser::parseFunction(const yaml::Node &Root, MIRDocument &Docum return importError(NameNode->range(), Created.error()); MachineFunction &Function = **Created; ActiveFunction = &Function; + if (IRFunction != nullptr && IRFunction->hasMinSize()) + Function.attributes().set(MachineFunctionAttribute::MinSize); MIRFunctionDocumentInfo DocumentInfo{ .Function = Function.stableID(), diff --git a/backend/lib/CodeGen/MachineFunctionAttributes.cpp b/backend/lib/CodeGen/MachineFunctionAttributes.cpp index 799e701..afe18a9 100644 --- a/backend/lib/CodeGen/MachineFunctionAttributes.cpp +++ b/backend/lib/CodeGen/MachineFunctionAttributes.cpp @@ -31,6 +31,8 @@ std::string_view getMachineFunctionAttributeName(MachineFunctionAttribute Attrib return "DebugInstrRef"; case MachineFunctionAttribute::TracksDebugUserValues: return "TracksDebugUserValues"; + case MachineFunctionAttribute::MinSize: + return "MinSize"; case MachineFunctionAttribute::Count: return "Invalid"; } diff --git a/backend/lib/CodeGen/MachineOperand.cpp b/backend/lib/CodeGen/MachineOperand.cpp index f265c3f..3994286 100644 --- a/backend/lib/CodeGen/MachineOperand.cpp +++ b/backend/lib/CodeGen/MachineOperand.cpp @@ -300,6 +300,11 @@ Expected<void> MachineOperand::setRegister(Register Reg) { return makeUnexpected(ErrorCode::InvalidArgument, "setRegister requires a register operand"); } + if (std::get<Register>(Storage) == Reg) + return {}; + + RegFlags.clear(RegisterOperandFlag::Renamable); + MachineRegisterInfo *RegInfo = LinkedRegInfo; if (RegInfo == nullptr && Parent != nullptr) RegInfo = &Parent->function().registerInfo(); |
