From: Craig Topper Date: Sat, 15 Apr 2023 02:40:56 +0000 (-0700) Subject: [TableGen] Make InlinePatternFragments a member of TreePatternNode again. NFC X-Git-Tag: upstream/17.0.6~11522 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=56fdac60aa5f718637a33dd2230cba25c1317e45;p=platform%2Fupstream%2Fllvm.git [TableGen] Make InlinePatternFragments a member of TreePatternNode again. NFC Now that we use IntrusiveRefCntPtr instead of std::shared_ptr we don't need to pass a TreePatternNodePtr to this method. --- diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp index c01b412..93e9ea1 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp @@ -2071,31 +2071,30 @@ void TreePatternNode::SubstituteFormalArguments( /// fragments, return the set of inlined versions (this can be more than /// one if a PatFrags record has multiple alternatives). void TreePatternNode::InlinePatternFragments( - const TreePatternNodePtr &T, TreePattern &TP, - std::vector &OutAlternatives) { + TreePattern &TP, std::vector &OutAlternatives) { if (TP.hasError()) return; - if (T->isLeaf()) { - OutAlternatives.push_back(T); // nothing to do. + if (isLeaf()) { + OutAlternatives.push_back(this); // nothing to do. return; } - Record *Op = T->getOperator(); + Record *Op = getOperator(); if (!Op->isSubClassOf("PatFrags")) { - if (T->getNumChildren() == 0) { - OutAlternatives.push_back(T); + if (getNumChildren() == 0) { + OutAlternatives.push_back(this); return; } // Recursively inline children nodes. std::vector> ChildAlternatives( - T->getNumChildren()); - for (unsigned i = 0, e = T->getNumChildren(); i != e; ++i) { - TreePatternNodePtr Child = T->getChildShared(i); - InlinePatternFragments(Child, TP, ChildAlternatives[i]); + getNumChildren()); + for (unsigned i = 0, e = getNumChildren(); i != e; ++i) { + TreePatternNodePtr Child = getChildShared(i); + Child->InlinePatternFragments(TP, ChildAlternatives[i]); // If there are no alternatives for any child, there are no // alternatives for this expression as whole. if (ChildAlternatives[i].empty()) @@ -2120,18 +2119,18 @@ void TreePatternNode::InlinePatternFragments( for (unsigned i = 0, e = ChildAlternatives.size(); i != e; ++i) NewChildren.push_back(ChildAlternatives[i][Idxs[i]]); TreePatternNodePtr R = makeIntrusiveRefCnt( - T->getOperator(), std::move(NewChildren), T->getNumTypes()); + getOperator(), std::move(NewChildren), getNumTypes()); // Copy over properties. - R->setName(T->getName()); - R->setNamesAsPredicateArg(T->getNamesAsPredicateArg()); - R->setPredicateCalls(T->getPredicateCalls()); - R->setGISelFlagsRecord(T->getGISelFlagsRecord()); - R->setTransformFn(T->getTransformFn()); - for (unsigned i = 0, e = T->getNumTypes(); i != e; ++i) - R->setType(i, T->getExtType(i)); - for (unsigned i = 0, e = T->getNumResults(); i != e; ++i) - R->setResultIndex(i, T->getResultIndex(i)); + R->setName(getName()); + R->setNamesAsPredicateArg(getNamesAsPredicateArg()); + R->setPredicateCalls(getPredicateCalls()); + R->setGISelFlagsRecord(getGISelFlagsRecord()); + R->setTransformFn(getTransformFn()); + for (unsigned i = 0, e = getNumTypes(); i != e; ++i) + R->setType(i, getExtType(i)); + for (unsigned i = 0, e = getNumResults(); i != e; ++i) + R->setResultIndex(i, getResultIndex(i)); // Register alternative. OutAlternatives.push_back(R); @@ -2157,7 +2156,7 @@ void TreePatternNode::InlinePatternFragments( TreePattern *Frag = TP.getDAGPatterns().getPatternFragment(Op); // Verify that we are passing the right number of operands. - if (Frag->getNumArgs() != T->getNumChildren()) { + if (Frag->getNumArgs() != getNumChildren()) { TP.error("'" + Op->getName() + "' fragment requires " + Twine(Frag->getNumArgs()) + " operands!"); return; @@ -2171,7 +2170,7 @@ void TreePatternNode::InlinePatternFragments( // Compute the map of formal to actual arguments. std::map ArgMap; for (unsigned i = 0, e = Frag->getNumArgs(); i != e; ++i) { - TreePatternNodePtr Child = T->getChildShared(i); + TreePatternNodePtr Child = getChildShared(i); if (Scope != 0) { Child = Child->clone(); Child->addNameAsPredicateArg(ScopedName(Scope, Frag->getArgName(i))); @@ -2192,20 +2191,20 @@ void TreePatternNode::InlinePatternFragments( // Transfer types. Note that the resolved alternative may have fewer // (but not more) results than the PatFrags node. - FragTree->setName(T->getName()); + FragTree->setName(getName()); for (unsigned i = 0, e = FragTree->getNumTypes(); i != e; ++i) - FragTree->UpdateNodeType(i, T->getExtType(i), TP); + FragTree->UpdateNodeType(i, getExtType(i), TP); if (Op->isSubClassOf("GISelFlags")) FragTree->setGISelFlagsRecord(Op); // Transfer in the old predicates. - for (const TreePredicateCall &Pred : T->getPredicateCalls()) + for (const TreePredicateCall &Pred : getPredicateCalls()) FragTree->addPredicateCall(Pred); // The fragment we inlined could have recursive inlining that is needed. See // if there are any pattern fragments in it and inline them as needed. - InlinePatternFragments(FragTree, TP, OutAlternatives); + FragTree->InlinePatternFragments(TP, OutAlternatives); } } diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.h b/llvm/utils/TableGen/CodeGenDAGPatterns.h index 87cb37e..e04a087 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.h +++ b/llvm/utils/TableGen/CodeGenDAGPatterns.h @@ -820,9 +820,8 @@ public: // Higher level manipulation routines. /// InlinePatternFragments - If \p T pattern refers to any pattern /// fragments, return the set of inlined versions (this can be more than /// one if a PatFrags record has multiple alternatives). - static void - InlinePatternFragments(const TreePatternNodePtr &T, TreePattern &TP, - std::vector &OutAlternatives); + void InlinePatternFragments(TreePattern &TP, + std::vector &OutAlternatives); /// ApplyTypeConstraints - Apply all of the type constraints relevant to /// this node and its children in the tree. This returns true if it makes a @@ -952,7 +951,7 @@ public: std::vector Copy; Trees.swap(Copy); for (const TreePatternNodePtr &C : Copy) - TreePatternNode::InlinePatternFragments(C, *this, Trees); + C->InlinePatternFragments(*this, Trees); } /// InferAllTypes - Infer/propagate as many types throughout the expression