diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-14 20:35:54 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-14 20:35:54 +0800 |
| commit | 97e5fbaa55b4672db36123c2425d05a4738452ab (patch) | |
| tree | c2750bd49922edc8c76bc831ad7bfc8b0bf42bb8 /backend/include/rcc/CodeGen/MachineIRBuilder.h | |
| parent | 8be4d04455f70892a94d1e0798e266c948b4750a (diff) | |
| download | rcc-project-97e5fbaa55b4672db36123c2425d05a4738452ab.tar.gz rcc-project-97e5fbaa55b4672db36123c2425d05a4738452ab.tar.xz | |
[GlobalISel] Match LLVM legalization value tracking
Diffstat (limited to 'backend/include/rcc/CodeGen/MachineIRBuilder.h')
| -rw-r--r-- | backend/include/rcc/CodeGen/MachineIRBuilder.h | 51 |
1 files changed, 36 insertions, 15 deletions
diff --git a/backend/include/rcc/CodeGen/MachineIRBuilder.h b/backend/include/rcc/CodeGen/MachineIRBuilder.h index 01cd648..70a313a 100644 --- a/backend/include/rcc/CodeGen/MachineIRBuilder.h +++ b/backend/include/rcc/CodeGen/MachineIRBuilder.h @@ -11,6 +11,7 @@ #include <cstddef> #include <cstdint> +#include <initializer_list> #include <memory> #include <optional> #include <string> @@ -178,17 +179,20 @@ public: } [[nodiscard]] Expected<MachineInstrBuilder> buildInstr(Opcode InstructionOpcode) const; + [[nodiscard]] Expected<MachineInstr *> buildInstr(Opcode InstructionOpcode, + std::initializer_list<Register> Destinations, + std::initializer_list<Register> Sources) 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 *> 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 *> buildUndef(Register Destination) const; [[nodiscard]] Expected<MachineInstr *> buildAnyExtOrTrunc(Register Destination, Register Source) const; [[nodiscard]] Expected<MachineInstr *> buildSExtOrTrunc(Register Destination, - Register Source) const; + Register Source) const; [[nodiscard]] Expected<MachineInstr *> buildConstant(Register Destination, APInt Value) const; [[nodiscard]] Expected<MachineInstr *> buildConstant(Register Destination, std::int64_t Value) const; @@ -196,23 +200,40 @@ public: 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 *> buildOr(Register Destination, Register Left, + Register Right) const; + [[nodiscard]] Expected<MachineInstr *> buildAdd(Register Destination, Register Left, + Register Right) const; + [[nodiscard]] Expected<MachineInstr *> buildSub(Register Destination, Register Left, + Register Right) const; + [[nodiscard]] Expected<MachineInstr *> buildShl(Register Destination, Register Left, + Register Right) const; + [[nodiscard]] Expected<MachineInstr *> buildLShr(Register Destination, Register Left, + Register Right) const; + [[nodiscard]] Expected<MachineInstr *> buildAShr(Register Destination, Register Left, + Register Right) const; + [[nodiscard]] Expected<MachineInstr *> buildPtrToInt(Register Destination, Register Source) const; + [[nodiscard]] Expected<MachineInstr *> buildIntToPtr(Register Destination, Register Source) const; + [[nodiscard]] Expected<MachineInstr *> buildICmp(IntegerPredicate Predicate, Register Destination, + Register Left, Register Right) const; + [[nodiscard]] Expected<MachineInstr *> + buildMergeLikeInstr(Register Destination, const std::vector<Register> &Sources) 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; + [[nodiscard]] Expected<MachineInstr *> buildInsert(Register Destination, Register Source, + Register Inserted, std::uint64_t Offset) const; private: - [[nodiscard]] Expected<MachineInstr *> buildUnary(Opcode InstructionOpcode, - Register Destination, + [[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<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; |
