From 77884c967d1cbc48afcbaef7e5a35adcb3c5da1b Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Sat, 8 Aug 2026 04:14:34 +0800 Subject: [CodeGen] Implement machine SSA exit --- backend/lib/CodeGen/MachineOperand.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'backend/lib/CodeGen/MachineOperand.cpp') diff --git a/backend/lib/CodeGen/MachineOperand.cpp b/backend/lib/CodeGen/MachineOperand.cpp index ae46505..43a4f91 100644 --- a/backend/lib/CodeGen/MachineOperand.cpp +++ b/backend/lib/CodeGen/MachineOperand.cpp @@ -2,6 +2,7 @@ #include "rcc/CodeGen/MachineOperand.h" +#include "rcc/CodeGen/MachineBasicBlock.h" #include "rcc/CodeGen/MachineFunction.h" #include "rcc/CodeGen/MachineInstr.h" #include "rcc/CodeGen/MachineRegisterInfo.h" @@ -172,8 +173,7 @@ std::string IntegerImmediate::toUnsignedDecimal() const { return "0"; std::vector Remaining = Words; std::string Digits; - while (!std::ranges::all_of(Remaining, - [](std::uint64_t Word) { return Word == 0; })) { + while (!std::ranges::all_of(Remaining, [](std::uint64_t Word) { return Word == 0; })) { unsigned __int128 Remainder = 0; for (auto Iterator = Remaining.rbegin(); Iterator != Remaining.rend(); ++Iterator) { const unsigned __int128 Dividend = (Remainder << 64U) | *Iterator; @@ -537,6 +537,17 @@ Expected MachineOperand::setSubReg(SubRegIndex SubReg) { return {}; } +Expected MachineOperand::setBasicBlock(MachineBasicBlock &Block) { + if (OperandKind != Kind::BasicBlock) + return makeUnexpected(ErrorCode::InvalidArgument, + "setBasicBlock requires a basic-block operand"); + if (Parent != nullptr && &Block.function() != &Parent->function()) + return makeUnexpected(ErrorCode::InvalidArgument, + "basic-block operand references another machine function"); + std::get(Storage).Block = &Block; + return {}; +} + MachineOperand MachineOperand::cloneDetached() const { MachineOperand Result(OperandKind, Storage, TargetFlags); Result.RegFlags = RegFlags; -- cgit v1.2.3