diff options
author | David Blaikie <dblaikie@gmail.com> | 2015-11-22 20:11:21 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2015-11-22 20:11:21 +0000 |
commit | fda69dd73612e81cef21ff6790b094a70734faaf (patch) | |
tree | 0ed0f58e1ced845e7d716c560ea52ecb6a4bf59b /llvm/utils/TableGen/CodeGenDAGPatterns.cpp | |
parent | b8fc0186c73c2e9088bdab7a640529dc05cd40c9 (diff) | |
download | llvm-fda69dd73612e81cef21ff6790b094a70734faaf.zip llvm-fda69dd73612e81cef21ff6790b094a70734faaf.tar.gz llvm-fda69dd73612e81cef21ff6790b094a70734faaf.tar.bz2 |
Further simplify from r253832 with some unique_ptr and coalescing conditions
llvm-svn: 253834
Diffstat (limited to 'llvm/utils/TableGen/CodeGenDAGPatterns.cpp')
-rw-r--r-- | llvm/utils/TableGen/CodeGenDAGPatterns.cpp | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp index 1d09955..e916d87 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp @@ -3523,8 +3523,8 @@ static void CombineChildVariants(TreePatternNode *Orig, std::vector<TreePatternNode*> NewChildren; for (unsigned i = 0, e = ChildVariants.size(); i != e; ++i) NewChildren.push_back(ChildVariants[i][Idxs[i]]); - TreePatternNode *R = new TreePatternNode(Orig->getOperator(), NewChildren, - Orig->getNumTypes()); + auto R = llvm::make_unique<TreePatternNode>( + Orig->getOperator(), NewChildren, Orig->getNumTypes()); // Copy over properties. R->setName(Orig->getName()); @@ -3535,21 +3535,16 @@ static void CombineChildVariants(TreePatternNode *Orig, // If this pattern cannot match, do not include it as a variant. std::string ErrString; - if (!R->canPatternMatch(ErrString, CDP)) { - delete R; - } else { - // Scan to see if this pattern has already been emitted. We can get - // duplication due to things like commuting: - // (and GPRC:$a, GPRC:$b) -> (and GPRC:$b, GPRC:$a) - // which are the same pattern. Ignore the dups. - if (std::any_of(OutVariants.begin(), OutVariants.end(), - [=](TreePatternNode *Variant) { - return R->isIsomorphicTo(Variant, DepVars); - })) - delete R; - else - OutVariants.push_back(R); - } + // Scan to see if this pattern has already been emitted. We can get + // duplication due to things like commuting: + // (and GPRC:$a, GPRC:$b) -> (and GPRC:$b, GPRC:$a) + // which are the same pattern. Ignore the dups. + if (R->canPatternMatch(ErrString, CDP) && + std::none_of(OutVariants.begin(), OutVariants.end(), + [&](TreePatternNode *Variant) { + return R->isIsomorphicTo(Variant, DepVars); + })) + OutVariants.push_back(R.release()); // Increment indices to the next permutation by incrementing the // indices from last index backward, e.g., generate the sequence |