aboutsummaryrefslogtreecommitdiff
path: root/backend/include/rcc/CodeGen/MachineFunction.h
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-14 04:33:41 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-14 04:33:41 +0800
commit8be4d04455f70892a94d1e0798e266c948b4750a (patch)
tree6ef304317a6980ecfbe32868d64cd05f5e8af8bd /backend/include/rcc/CodeGen/MachineFunction.h
parentaa69e15c6909c3b162b15f5326f0a72ba9bb7163 (diff)
downloadrcc-project-8be4d04455f70892a94d1e0798e266c948b4750a.tar.gz
rcc-project-8be4d04455f70892a94d1e0798e266c948b4750a.tar.xz
[CodeGen] Match LLVM Legalizer ownership
Diffstat (limited to 'backend/include/rcc/CodeGen/MachineFunction.h')
-rw-r--r--backend/include/rcc/CodeGen/MachineFunction.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/backend/include/rcc/CodeGen/MachineFunction.h b/backend/include/rcc/CodeGen/MachineFunction.h
index 563aa4e..501f334 100644
--- a/backend/include/rcc/CodeGen/MachineFunction.h
+++ b/backend/include/rcc/CodeGen/MachineFunction.h
@@ -37,6 +37,13 @@ class Opcode;
class MachineFunction final {
public:
+ class Delegate {
+ public:
+ virtual ~Delegate() = default;
+ virtual void handleInsertion(MachineInstr &Instruction) = 0;
+ virtual void handleRemoval(MachineInstr &Instruction) = 0;
+ };
+
[[nodiscard]] static Expected<std::unique_ptr<MachineFunction>>
create(std::string Name, MachineFunctionStableID StableID);
@@ -154,6 +161,14 @@ public:
[[nodiscard]] Expected<const MachineMemOperand *>
createMemOperand(MachineMemOperandDesc Description);
+ void setDelegate(Delegate &NewDelegate) noexcept {
+ TheDelegate = &NewDelegate;
+ }
+ void resetDelegate(Delegate &CurrentDelegate) noexcept {
+ if (TheDelegate == &CurrentDelegate)
+ TheDelegate = nullptr;
+ }
+
[[nodiscard]] Expected<void> appendBlock(MachineBasicBlock &Block);
[[nodiscard]] Expected<void> insertBlockBefore(MachineBasicBlock &Position,
MachineBasicBlock &Block);
@@ -224,6 +239,7 @@ private:
StableIDGenerator<MachineInstrStableID> InstrIDGenerator;
std::uint32_t DebugInstrNumberingCount = 0;
std::unique_ptr<MachineArena> Arena;
+ Delegate *TheDelegate = nullptr;
friend class MachineBasicBlock;
friend class MachineCFGUpdater;