aboutsummaryrefslogtreecommitdiff
path: root/backend/include/rcc/CodeGen/MachineIRBuilder.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/MachineIRBuilder.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/MachineIRBuilder.h')
-rw-r--r--backend/include/rcc/CodeGen/MachineIRBuilder.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/backend/include/rcc/CodeGen/MachineIRBuilder.h b/backend/include/rcc/CodeGen/MachineIRBuilder.h
index b8ff248..01cd648 100644
--- a/backend/include/rcc/CodeGen/MachineIRBuilder.h
+++ b/backend/include/rcc/CodeGen/MachineIRBuilder.h
@@ -178,8 +178,42 @@ public:
}
[[nodiscard]] Expected<MachineInstrBuilder> buildInstr(Opcode InstructionOpcode) const;
+ [[nodiscard]] Expected<MachineInstr *> buildTrunc(Register Destination, Register Source) const;
+ [[nodiscard]] Expected<MachineInstr *> buildCopy(Register Destination, Register Source) const;
+ [[nodiscard]] Expected<MachineInstr *> buildImplicitDef(Register Destination) const;
+ [[nodiscard]] Expected<MachineInstr *> buildAnyExt(Register Destination,
+ Register Source) const;
+ [[nodiscard]] Expected<MachineInstr *> buildZExt(Register Destination, Register Source) const;
+ [[nodiscard]] Expected<MachineInstr *> buildSExt(Register Destination, Register Source) const;
+ [[nodiscard]] Expected<MachineInstr *> buildAnyExtOrTrunc(Register Destination,
+ Register Source) const;
+ [[nodiscard]] Expected<MachineInstr *> buildSExtOrTrunc(Register Destination,
+ Register Source) const;
+ [[nodiscard]] Expected<MachineInstr *> buildConstant(Register Destination, APInt Value) const;
+ [[nodiscard]] Expected<MachineInstr *> buildConstant(Register Destination,
+ std::int64_t Value) const;
+ [[nodiscard]] Expected<MachineInstr *> buildSExtInReg(Register Destination, Register Source,
+ std::uint32_t Width) const;
+ [[nodiscard]] Expected<MachineInstr *> buildAnd(Register Destination, Register Left,
+ Register Right) const;
+ [[nodiscard]] Expected<MachineInstr *> buildMergeValues(
+ Register Destination, const std::vector<Register> &Sources) const;
+ [[nodiscard]] Expected<MachineInstr *> buildUnmergeValues(
+ const std::vector<Register> &Destinations, Register Source) const;
+ [[nodiscard]] Expected<MachineInstr *> buildExtract(Register Destination, Register Source,
+ std::uint64_t Offset) const;
private:
+ [[nodiscard]] Expected<MachineInstr *> buildUnary(Opcode InstructionOpcode,
+ Register Destination,
+ Register Source) const;
+ [[nodiscard]] Expected<MachineInstr *> buildBinary(Opcode InstructionOpcode,
+ Register Destination, Register Left,
+ Register Right) const;
+ [[nodiscard]] Expected<MachineInstr *> buildExtOrTrunc(Opcode ExtensionOpcode,
+ Register Destination,
+ Register Source) const;
+ [[nodiscard]] Expected<LowLevelType> registerType(Register Reg) const;
[[nodiscard]] Expected<void> validateBlock(const MachineBasicBlock &Block) const;
[[nodiscard]] Expected<void> validateInstruction(const MachineInstr &Instruction) const;