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 --- backend/lib/CodeGen/MachineCombinerPattern.cpp | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) (limited to 'backend/lib/CodeGen/MachineCombinerPattern.cpp') diff --git a/backend/lib/CodeGen/MachineCombinerPattern.cpp b/backend/lib/CodeGen/MachineCombinerPattern.cpp index b1c3c96..f13ba73 100644 --- a/backend/lib/CodeGen/MachineCombinerPattern.cpp +++ b/backend/lib/CodeGen/MachineCombinerPattern.cpp @@ -2,8 +2,6 @@ #include "rcc/CodeGen/MachineCombinerPattern.h" -#include -#include #include #include #include @@ -15,25 +13,12 @@ TargetMachineCombinerInfo::create(std::vector Patterns) TargetMachineCombinerInfo Result(std::move(Patterns)); std::unordered_set Names; for (const MachineCombinerPattern &Pattern : Result.Patterns) { - if (Pattern.Name.empty() || !Pattern.RootOpcode.isValid() || Pattern.Stages == 0 || - !Names.insert(Pattern.Name).second) { + if (Pattern.Name.empty() || !Pattern.RootOpcode.isValid() || + !Pattern.ProducerOpcode.isValid() || !Pattern.ReplacementOpcode.isValid() || + Pattern.ProducerOperand == 0 || Pattern.AddendOperand == 0 || + Pattern.ProducerOperand == Pattern.AddendOperand || !Names.insert(Pattern.Name).second) { return makeUnexpected(ErrorCode::InvalidArgument, - "machine combiner pattern has an invalid identity or stage mask"); - } - for (const MachineCombinerPredicate &Predicate : Pattern.Predicates) { - switch (Predicate.Kind) { - case MachineCombinerPredicateKind::ImmediateEquals: - case MachineCombinerPredicateKind::PhysicalRegisterEquals: - case MachineCombinerPredicateKind::RegisterIsVirtual: - case MachineCombinerPredicateKind::RegisterIsPhysical: - break; - case MachineCombinerPredicateKind::RegisterEquals: - if (Predicate.Operand == Predicate.OtherOperand) { - return makeUnexpected(ErrorCode::InvalidArgument, - "register equality pattern compares an operand with itself"); - } - break; - } + "machine combiner pattern has an invalid target pattern"); } Result.MatchTable[Pattern.RootOpcode].push_back(Pattern); } -- cgit v1.2.3