diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-15 20:38:43 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-15 20:38:43 +0800 |
| commit | 63b14b615eb83ed2b2cdd69b49b283a9b5ff7357 (patch) | |
| tree | 1520668a2bb756aa5379899b7984050da97a59cb /backend/include/rcc/CodeGen/GlobalISel | |
| parent | f30816740e58c5aff72fb14aa8a587b720b41cda (diff) | |
| download | rcc-project-63b14b615eb83ed2b2cdd69b49b283a9b5ff7357.tar.gz rcc-project-63b14b615eb83ed2b2cdd69b49b283a9b5ff7357.tar.xz | |
[GlobalISel] Legalize multi-precision multiplication
Diffstat (limited to 'backend/include/rcc/CodeGen/GlobalISel')
| -rw-r--r-- | backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h b/backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h index 55665df..eb83c5a 100644 --- a/backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h +++ b/backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h @@ -36,6 +36,7 @@ public: [[nodiscard]] Expected<void> lowerMinMax(MachineInstr &Instruction); [[nodiscard]] Expected<void> lowerThreewayCompare(MachineInstr &Instruction); [[nodiscard]] Expected<void> lowerDivRem(MachineInstr &Instruction); + [[nodiscard]] Expected<void> lowerHighMultiply(MachineInstr &Instruction); [[nodiscard]] Expected<void> lowerBitCount(MachineInstr &Instruction); [[nodiscard]] Expected<void> lowerBswap(MachineInstr &Instruction); [[nodiscard]] Expected<void> lowerFunnelShift(MachineInstr &Instruction); @@ -84,8 +85,14 @@ private: [[nodiscard]] Expected<void> buildWidenedRemergeToDst(Register Destination, LowLevelType LCMType, const std::vector<Register> &RemergeRegisters); + [[nodiscard]] Expected<void> multiplyRegisters(std::vector<Register> &Destinations, + const std::vector<Register> &FirstSources, + const std::vector<Register> &SecondSources, + LowLevelType NarrowType); [[nodiscard]] Expected<void> narrowScalarAddSub(MachineInstr &Instruction, std::size_t TypeIndex, LowLevelType NarrowType); + [[nodiscard]] Expected<void> narrowScalarMul(MachineInstr &Instruction, std::size_t TypeIndex, + LowLevelType NarrowType); [[nodiscard]] Expected<void> narrowScalarBasic(MachineInstr &Instruction, std::size_t TypeIndex, LowLevelType NarrowType); [[nodiscard]] Expected<void> narrowScalarExt(MachineInstr &Instruction, std::size_t TypeIndex, |
