diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-24 16:48:50 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-24 16:48:50 +0800 |
| commit | 47d0d5140b4616ae4dd7c6d2c3c089ccbfc3b009 (patch) | |
| tree | 363cb222cb041dc2aee5e2cce4df5adb0fd64d3e /backend/lib/CodeGen/MachineCombinerPattern.cpp | |
| parent | 540c73a2f450af3d0aec6e039fab054471efdbb1 (diff) | |
| download | rcc-project-47d0d5140b4616ae4dd7c6d2c3c089ccbfc3b009.tar.gz rcc-project-47d0d5140b4616ae4dd7c6d2c3c089ccbfc3b009.tar.xz | |
[CodeGen] Match LLVM machine combiner semantics
Diffstat (limited to 'backend/lib/CodeGen/MachineCombinerPattern.cpp')
| -rw-r--r-- | backend/lib/CodeGen/MachineCombinerPattern.cpp | 25 |
1 files changed, 5 insertions, 20 deletions
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 <cstddef> -#include <ranges> #include <string> #include <unordered_set> #include <utility> @@ -15,25 +13,12 @@ TargetMachineCombinerInfo::create(std::vector<MachineCombinerPattern> Patterns) TargetMachineCombinerInfo Result(std::move(Patterns)); std::unordered_set<std::string> 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); } |
