From 47d0d5140b4616ae4dd7c6d2c3c089ccbfc3b009 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Mon, 24 Aug 2026 16:48:50 +0800 Subject: [CodeGen] Match LLVM machine combiner semantics --- .../include/rcc/CodeGen/MachineCombinerPattern.h | 47 ++-------------------- 1 file changed, 4 insertions(+), 43 deletions(-) (limited to 'backend/include/rcc/CodeGen/MachineCombinerPattern.h') diff --git a/backend/include/rcc/CodeGen/MachineCombinerPattern.h b/backend/include/rcc/CodeGen/MachineCombinerPattern.h index 62819ef..3d590f9 100644 --- a/backend/include/rcc/CodeGen/MachineCombinerPattern.h +++ b/backend/include/rcc/CodeGen/MachineCombinerPattern.h @@ -7,7 +7,6 @@ #include "rcc/Support/Error.h" #include -#include #include #include #include @@ -15,51 +14,13 @@ namespace rcc { -enum class MachineCombinerStage : std::uint8_t { - PreLegalizer, - SelectedSSA, - PreRegisterAllocation, - PostRegisterAllocation, -}; - -using MachineCombinerStageMask = std::uint8_t; - -[[nodiscard]] constexpr MachineCombinerStageMask -machineCombinerStageMask(MachineCombinerStage Stage) noexcept { - return static_cast(1U << static_cast(Stage)); -} - -enum class MachineCombinerPredicateKind : std::uint8_t { - ImmediateEquals, - RegisterEquals, - PhysicalRegisterEquals, - RegisterIsVirtual, - RegisterIsPhysical, -}; - -struct MachineCombinerPredicate final { - MachineCombinerPredicateKind Kind = MachineCombinerPredicateKind::ImmediateEquals; - std::size_t Operand = 0; - std::size_t OtherOperand = 0; - std::int64_t Value = 0; -}; - -enum class MachineCombinerActionKind : std::uint8_t { - ReplaceDefWithOperandAndErase, -}; - -struct MachineCombinerAction final { - MachineCombinerActionKind Kind = MachineCombinerActionKind::ReplaceDefWithOperandAndErase; - std::size_t DefinitionOperand = 0; - std::size_t SourceOperand = 0; -}; - struct MachineCombinerPattern final { std::string Name; Opcode RootOpcode; - MachineCombinerStageMask Stages = 0; - std::vector Predicates; - MachineCombinerAction Action; + Opcode ProducerOpcode; + Opcode ReplacementOpcode; + std::size_t ProducerOperand = 0; + std::size_t AddendOperand = 0; }; class TargetMachineCombinerInfo final { -- cgit v1.2.3