aboutsummaryrefslogtreecommitdiff
path: root/backend/utils/TableGen/Common
diff options
context:
space:
mode:
Diffstat (limited to 'backend/utils/TableGen/Common')
-rw-r--r--backend/utils/TableGen/Common/CodeGenSelection.cpp17
-rw-r--r--backend/utils/TableGen/Common/CodeGenTarget.h1
2 files changed, 17 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());
}
diff --git a/backend/utils/TableGen/Common/CodeGenTarget.h b/backend/utils/TableGen/Common/CodeGenTarget.h
index d66cfee..97e1447 100644
--- a/backend/utils/TableGen/Common/CodeGenTarget.h
+++ b/backend/utils/TableGen/Common/CodeGenTarget.h
@@ -217,6 +217,7 @@ struct NormalizedSelectionDefUseCapture final {
struct NormalizedSelectionDefUsePredicate final {
std::uint32_t RootOperandIndex = 0;
std::uint32_t Opcode = 0;
+ std::optional<NormalizedSelectionIntegerPredicate> IntegerPredicate;
std::vector<NormalizedSelectionDefUseCapture> Captures;
std::vector<NormalizedSelectionOperandDefConstantPredicate> OperandDefConstants;
};