aboutsummaryrefslogtreecommitdiff
path: root/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2015-11-22 20:11:21 +0000
committerDavid Blaikie <dblaikie@gmail.com>2015-11-22 20:11:21 +0000
commitfda69dd73612e81cef21ff6790b094a70734faaf (patch)
tree0ed0f58e1ced845e7d716c560ea52ecb6a4bf59b /llvm/utils/TableGen/CodeGenDAGPatterns.cpp
parentb8fc0186c73c2e9088bdab7a640529dc05cd40c9 (diff)
downloadllvm-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.cpp29
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