aboutsummaryrefslogtreecommitdiff
path: root/backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-15 20:38:43 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-15 20:38:43 +0800
commit63b14b615eb83ed2b2cdd69b49b283a9b5ff7357 (patch)
tree1520668a2bb756aa5379899b7984050da97a59cb /backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h
parentf30816740e58c5aff72fb14aa8a587b720b41cda (diff)
downloadrcc-project-63b14b615eb83ed2b2cdd69b49b283a9b5ff7357.tar.gz
rcc-project-63b14b615eb83ed2b2cdd69b49b283a9b5ff7357.tar.xz
[GlobalISel] Legalize multi-precision multiplication
Diffstat (limited to 'backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h')
-rw-r--r--backend/include/rcc/CodeGen/GlobalISel/LegalizerHelper.h7
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,