diff options
author | Florian Hahn <florian.hahn@arm.com> | 2018-06-10 20:38:52 +0000 |
---|---|---|
committer | Florian Hahn <florian.hahn@arm.com> | 2018-06-10 20:38:52 +0000 |
commit | 38270cca203cd83f2c9ab254f1ef7b9d4fd0eda1 (patch) | |
tree | 4f482f837e318c6a47ce5a9b1b598a3bf8392c76 | |
parent | ebb3252f004d8e3b73220eeaed57e768358a7f61 (diff) | |
download | bcm5719-llvm-38270cca203cd83f2c9ab254f1ef7b9d4fd0eda1.tar.gz bcm5719-llvm-38270cca203cd83f2c9ab254f1ef7b9d4fd0eda1.zip |
[TableGen] Move some shared_ptrs to avoid unnecessary copies (NFC).
Those changes were suggested post-commit for D47463.
llvm-svn: 334374
-rw-r--r-- | llvm/utils/TableGen/CodeGenDAGPatterns.cpp | 41 | ||||
-rw-r--r-- | llvm/utils/TableGen/CodeGenDAGPatterns.h | 6 |
2 files changed, 26 insertions, 21 deletions
diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp index 0a571bd8628..5854e068028 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp @@ -1825,7 +1825,7 @@ void TreePatternNode::SubstituteFormalArguments( assert((Child->getPredicateFns().empty() || NewChild->getPredicateFns() == Child->getPredicateFns()) && "Non-empty child predicate clobbered!"); - setChild(i, NewChild); + setChild(i, std::move(NewChild)); } } else { getChild(i)->SubstituteFormalArguments(ArgMap); @@ -1856,7 +1856,7 @@ TreePatternNodePtr TreePatternNode::InlinePatternFragments(TreePatternNodePtr T, NewChild->getPredicateFns() == Child->getPredicateFns()) && "Non-empty child predicate clobbered!"); - setChild(i, NewChild); + setChild(i, std::move(NewChild)); } return T; } @@ -1884,7 +1884,8 @@ TreePatternNodePtr TreePatternNode::InlinePatternFragments(TreePatternNodePtr T, std::map<std::string, TreePatternNodePtr> ArgMap; for (unsigned i = 0, e = Frag->getNumArgs(); i != e; ++i) { TreePatternNodePtr Child = getChildShared(i); - ArgMap[Frag->getArgName(i)] = Child->InlinePatternFragments(Child, TP); + ArgMap[Frag->getArgName(i)] = + Child->InlinePatternFragments(std::move(Child), TP); } FragTree->SubstituteFormalArguments(ArgMap); @@ -2673,9 +2674,8 @@ TreePatternNodePtr TreePattern::ParseTreePattern(Init *TheInit, else // Otherwise, no chain. Operator = getDAGPatterns().get_intrinsic_wo_chain_sdnode(); - TreePatternNodePtr IIDNode = - std::make_shared<TreePatternNode>(IntInit::get(IID), 1); - Children.insert(Children.begin(), IIDNode); + Children.insert(Children.begin(), + std::make_shared<TreePatternNode>(IntInit::get(IID), 1)); } if (Operator->isSubClassOf("ComplexPattern")) { @@ -2736,7 +2736,7 @@ static bool SimplifyTree(TreePatternNodePtr &N) { for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i) { TreePatternNodePtr Child = N->getChildShared(i); MadeChange |= SimplifyTree(Child); - N->setChild(i, Child); + N->setChild(i, std::move(Child)); } return MadeChange; } @@ -3057,7 +3057,7 @@ void CodeGenDAGPatterns::ParseDefaultOperands() { DefaultOps[i]->getName() + "' doesn't have a concrete type!"); } - DefaultOpInfo.DefaultOps.push_back(TPN); + DefaultOpInfo.DefaultOps.push_back(std::move(TPN)); } // Insert it into the DefaultOperands map so we can find it later. @@ -3487,9 +3487,9 @@ const DAGInstruction &CodeGenDAGPatterns::parseInstructionPattern( if (!RNode) I->error("Operand $" + OpName + " does not exist in operand list!"); - ResNodes.push_back(RNode); Record *R = cast<DefInit>(RNode->getLeafValue())->getDef(); + ResNodes.push_back(std::move(RNode)); if (!R) I->error("Operand $" + OpName + " should be a set destination: all " "outputs must occur before inputs in operand list!"); @@ -3554,7 +3554,7 @@ const DAGInstruction &CodeGenDAGPatterns::parseInstructionPattern( OpNode->getNumTypes()); } - ResultNodeOperands.push_back(OpNode); + ResultNodeOperands.push_back(std::move(OpNode)); } if (!InstInputsCheck.empty()) @@ -4080,9 +4080,10 @@ void CodeGenDAGPatterns::ExpandHwModeBasedTypes() { std::vector<Predicate> Preds = P.Predicates; const std::vector<Predicate> &MC = ModeChecks[Mode]; Preds.insert(Preds.end(), MC.begin(), MC.end()); - PatternsToMatch.emplace_back(P.getSrcRecord(), Preds, NewSrc, NewDst, - P.getDstRegs(), P.getAddedComplexity(), - Record::getNewUID(), Mode); + PatternsToMatch.emplace_back(P.getSrcRecord(), Preds, std::move(NewSrc), + std::move(NewDst), P.getDstRegs(), + P.getAddedComplexity(), Record::getNewUID(), + Mode); }; for (PatternToMatch &P : Copy) { @@ -4386,18 +4387,18 @@ static void GenerateVariantsOf(TreePatternNodePtr N, assert(NC >= 3 && "Commutative intrinsic should have at least 3 children!"); std::vector<std::vector<TreePatternNodePtr>> Variants; - Variants.push_back(ChildVariants[0]); // Intrinsic id. - Variants.push_back(ChildVariants[2]); - Variants.push_back(ChildVariants[1]); + Variants.push_back(std::move(ChildVariants[0])); // Intrinsic id. + Variants.push_back(std::move(ChildVariants[2])); + Variants.push_back(std::move(ChildVariants[1])); for (unsigned i = 3; i != NC; ++i) - Variants.push_back(ChildVariants[i]); + Variants.push_back(std::move(ChildVariants[i])); CombineChildVariants(N, Variants, OutVariants, CDP, DepVars); } else if (NC == N->getNumChildren()) { std::vector<std::vector<TreePatternNodePtr>> Variants; - Variants.push_back(ChildVariants[1]); - Variants.push_back(ChildVariants[0]); + Variants.push_back(std::move(ChildVariants[1])); + Variants.push_back(std::move(ChildVariants[0])); for (unsigned i = 2; i != NC; ++i) - Variants.push_back(ChildVariants[i]); + Variants.push_back(std::move(ChildVariants[i])); CombineChildVariants(N, Variants, OutVariants, CDP, DepVars); } } diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.h b/llvm/utils/TableGen/CodeGenDAGPatterns.h index f029b213e0a..defd5232043 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.h +++ b/llvm/utils/TableGen/CodeGenDAGPatterns.h @@ -813,7 +813,11 @@ public: const std::vector<TreePatternNodePtr> &getTrees() const { return Trees; } unsigned getNumTrees() const { return Trees.size(); } const TreePatternNodePtr &getTree(unsigned i) const { return Trees[i]; } - void setTree(unsigned i, TreePatternNodePtr Tree) { Trees[i] = Tree; } + + void setTree(unsigned i, TreePatternNodePtr Tree) { + Trees[i] = std::move(Tree); + } + TreePatternNodePtr getOnlyTree() const { assert(Trees.size() == 1 && "Doesn't have exactly one pattern!"); return Trees[0]; |