[llvm] 31db7af - [TableGen] Split DAGISelMatcherOpt FactorNodes into 2 functions. NFC (#125330)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 2 19:05:03 PST 2025
Author: Craig Topper
Date: 2025-02-02T19:04:59-08:00
New Revision: 31db7afacf4dae051fcd0da22e440813663b61f3
URL: https://github.com/llvm/llvm-project/commit/31db7afacf4dae051fcd0da22e440813663b61f3
DIFF: https://github.com/llvm/llvm-project/commit/31db7afacf4dae051fcd0da22e440813663b61f3.diff
LOG: [TableGen] Split DAGISelMatcherOpt FactorNodes into 2 functions. NFC (#125330)
The loop at the top of FactorNodes creates additional variables to deal
with needing to use a pointer to a unique_ptr instead of a reference.
Encapsulate this to its own function for better scoping.
This also allows us to directly skip this loop when we already know we
have a ScopeMatcher.
Added:
Modified:
llvm/utils/TableGen/DAGISelMatcherOpt.cpp
Removed:
################################################################################
diff --git a/llvm/utils/TableGen/DAGISelMatcherOpt.cpp b/llvm/utils/TableGen/DAGISelMatcherOpt.cpp
index e2a9d9a7f14178..1092b33ec94fee 100644
--- a/llvm/utils/TableGen/DAGISelMatcherOpt.cpp
+++ b/llvm/utils/TableGen/DAGISelMatcherOpt.cpp
@@ -191,7 +191,9 @@ static Matcher *FindNodeWithKind(Matcher *M, Matcher::KindTy Kind) {
return nullptr;
}
-/// FactorNodes - Turn matches like this:
+static void FactorNodes(std::unique_ptr<Matcher> &InputMatcherPtr);
+
+/// Turn matches like this:
/// Scope
/// OPC_CheckType i32
/// ABC
@@ -203,22 +205,8 @@ static Matcher *FindNodeWithKind(Matcher *M, Matcher::KindTy Kind) {
/// ABC
/// XYZ
///
-static void FactorNodes(std::unique_ptr<Matcher> &InputMatcherPtr) {
- // Look for a push node. Iterates instead of recurses to reduce stack usage.
- ScopeMatcher *Scope = nullptr;
- std::unique_ptr<Matcher> *RebindableMatcherPtr = &InputMatcherPtr;
- while (!Scope) {
- // If we reached the end of the chain, we're done.
- Matcher *N = RebindableMatcherPtr->get();
- if (!N)
- return;
-
- // If this is not a push node, just scan for one.
- Scope = dyn_cast<ScopeMatcher>(N);
- if (!Scope)
- RebindableMatcherPtr = &(N->getNextPtr());
- }
- std::unique_ptr<Matcher> &MatcherPtr = *RebindableMatcherPtr;
+static void FactorScope(std::unique_ptr<Matcher> &MatcherPtr) {
+ ScopeMatcher *Scope = cast<ScopeMatcher>(MatcherPtr.get());
// Okay, pull together the children of the scope node into a vector so we can
// inspect it more easily.
@@ -353,7 +341,7 @@ static void FactorNodes(std::unique_ptr<Matcher> &InputMatcherPtr) {
Shared->setNext(new ScopeMatcher(std::move(EqualMatchers)));
// Recursively factor the newly created node.
- FactorNodes(Shared->getNextPtr());
+ FactorScope(Shared->getNextPtr());
}
// Put the new Matcher where we started in OptionsToMatch.
@@ -469,7 +457,7 @@ static void FactorNodes(std::unique_ptr<Matcher> &InputMatcherPtr) {
for (auto &M : Cases) {
if (ScopeMatcher *SM = dyn_cast<ScopeMatcher>(M.second)) {
std::unique_ptr<Matcher> Scope(SM);
- FactorNodes(Scope);
+ FactorScope(Scope);
M.second = Scope.release();
assert(M.second && "null matcher");
}
@@ -491,6 +479,20 @@ static void FactorNodes(std::unique_ptr<Matcher> &InputMatcherPtr) {
Scope->resetChild(i, OptionsToMatch[i]);
}
+/// Search a ScopeMatcher to factor with FactorScope.
+static void FactorNodes(std::unique_ptr<Matcher> &InputMatcherPtr) {
+ // Look for a scope matcher. Iterates instead of recurses to reduce stack
+ // usage.
+ std::unique_ptr<Matcher> *MatcherPtr = &InputMatcherPtr;
+ do {
+ if (isa<ScopeMatcher>(*MatcherPtr))
+ return FactorScope(*MatcherPtr);
+
+ // If this is not a scope matcher, go to the next node.
+ MatcherPtr = &(MatcherPtr->get()->getNextPtr());
+ } while (MatcherPtr->get());
+}
+
void llvm::OptimizeMatcher(std::unique_ptr<Matcher> &MatcherPtr,
const CodeGenDAGPatterns &CGP) {
ContractNodes(MatcherPtr, CGP);
More information about the llvm-commits
mailing list