From 97e5fbaa55b4672db36123c2425d05a4738452ab Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Fri, 14 Aug 2026 20:35:54 +0800 Subject: [GlobalISel] Match LLVM legalization value tracking --- .../rcc/CodeGen/GlobalISel/LegalizerHelper.h | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h') diff --git a/backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h b/backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h index 9a34898..19b3345 100644 --- a/backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h +++ b/backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h @@ -8,6 +8,8 @@ #include "rcc/CodeGen/MachineIRBuilder.h" #include "rcc/Support/Error.h" +#include + namespace rcc { class MachineFunction; @@ -36,7 +38,36 @@ public: std::size_t OperandIndex = 0, GenericOpcode TruncOpcode = GenericOpcode::G_TRUNC); + [[nodiscard]] Expected narrowScalar(MachineInstr &Instruction, std::size_t TypeIndex, + LowLevelType NarrowType); + private: + [[nodiscard]] Expected widenScalarMergeValues(MachineInstr &Instruction, + std::size_t TypeIndex, LowLevelType WideType); + [[nodiscard]] Expected + widenScalarUnmergeValues(MachineInstr &Instruction, std::size_t TypeIndex, LowLevelType WideType); + [[nodiscard]] Expected insertParts(Register Destination, LowLevelType ResultType, + LowLevelType PartType, + const std::vector &PartRegisters, + LowLevelType LeftoverType = {}, + const std::vector &LeftoverRegisters = {}); + [[nodiscard]] Expected extractGCDType(std::vector &Parts, LowLevelType GCDType, + Register Source); + [[nodiscard]] Expected extractGCDType(std::vector &Parts, + LowLevelType DestinationType, + LowLevelType NarrowType, Register Source); + [[nodiscard]] Expected + buildLCMMergePieces(LowLevelType DestinationType, LowLevelType NarrowType, LowLevelType GCDType, + std::vector &Registers, + GenericOpcode PadStrategy = GenericOpcode::G_ANYEXT); + [[nodiscard]] Expected + buildWidenedRemergeToDst(Register Destination, LowLevelType LCMType, + const std::vector &RemergeRegisters); + [[nodiscard]] Expected narrowScalarAddSub(MachineInstr &Instruction, std::size_t TypeIndex, + LowLevelType NarrowType); + [[nodiscard]] Expected narrowScalarExt(MachineInstr &Instruction, std::size_t TypeIndex, + LowLevelType NarrowType); + MachineFunction &Function; MachineRegisterInfo &MRI; const LegalizerInfo &Info; -- cgit v1.2.3