diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-17 03:16:26 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-17 03:16:26 +0800 |
| commit | f5c592905e6e1ef4b78337d76c8215e543607b8d (patch) | |
| tree | 193400315338b57af33699ad7f952fb3731b3a65 /backend/utils/TableGen/Common/CodeGenSelection.cpp | |
| parent | 9720e989ccdce77a2c45a8379d36ff4428e6c2bf (diff) | |
| download | rcc-project-f5c592905e6e1ef4b78337d76c8215e543607b8d.tar.gz rcc-project-f5c592905e6e1ef4b78337d76c8215e543607b8d.tar.xz | |
[RISCV][GlobalISel] Generate conditional branch selection
Diffstat (limited to 'backend/utils/TableGen/Common/CodeGenSelection.cpp')
| -rw-r--r-- | backend/utils/TableGen/Common/CodeGenSelection.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/backend/utils/TableGen/Common/CodeGenSelection.cpp b/backend/utils/TableGen/Common/CodeGenSelection.cpp index 95a924f..df9bf7b 100644 --- a/backend/utils/TableGen/Common/CodeGenSelection.cpp +++ b/backend/utils/TableGen/Common/CodeGenSelection.cpp @@ -355,9 +355,22 @@ bool CodeGenTarget::normalizeSelectionRules(NormalizedTargetModel &Result) { NormalizedSelectionDefUsePredicate NormalizedPredicate{ .RootOperandIndex = Predicate.RootOperandIndex, .Opcode = *DefOpcode, + .IntegerPredicate = std::nullopt, .Captures = {}, .OperandDefConstants = {}, }; + if (Predicate.IntegerPredicate) { + const auto Integer = integerPredicateValue(Predicate.IntegerPredicate->Predicate); + if (!Integer) { + fail(Predicate.IntegerPredicate->Range, + "selection def-use integer predicate is not a recognized integer predicate"); + return false; + } + NormalizedPredicate.IntegerPredicate = { + .OperandIndex = Predicate.IntegerPredicate->OperandIndex, + .Predicate = *Integer, + }; + } std::unordered_set<std::uint32_t> CapturedOperands; for (const SourceSelectionDefUseCapture &Capture : Predicate.Captures) { if (!isIdentifier(Capture.Symbol) || @@ -390,7 +403,9 @@ bool CodeGenTarget::normalizeSelectionRules(NormalizedTargetModel &Result) { }); } Normalized.DefUsePredicates.push_back(std::move(NormalizedPredicate)); - Normalized.Specificity += 1U + static_cast<std::uint32_t>(Predicate.Captures.size()) + + Normalized.Specificity += 1U + + static_cast<std::uint32_t>(Predicate.IntegerPredicate.has_value()) + + static_cast<std::uint32_t>(Predicate.Captures.size()) + static_cast<std::uint32_t>(Predicate.OperandDefConstants.size()); } |
