[PATCH] D51035: [TableGen] CodeGenDAGPatterns::GenerateVariants - basic caching of matching predicates
Simon Pilgrim via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 28 08:43:03 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL340837: [TableGen] CodeGenDAGPatterns::GenerateVariants - basic caching of matching… (authored by RKSimon, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D51035?vs=161710&id=162882#toc
Repository:
rL LLVM
https://reviews.llvm.org/D51035
Files:
llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
Index: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
===================================================================
--- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
+++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
@@ -13,6 +13,7 @@
//===----------------------------------------------------------------------===//
#include "CodeGenDAGPatterns.h"
+#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallSet.h"
@@ -4477,6 +4478,16 @@
LLVM_DEBUG(errs() << "FOUND VARIANTS OF: ";
PatternsToMatch[i].getSrcPattern()->dump(); errs() << "\n");
+ // Cache matching predicates.
+ // TODO: Is it performant to pull this out of the loop entirely?
+ BitVector MatchedPredicates(PatternsToMatch.size(), false);
+ for (unsigned p = 0, e = PatternsToMatch.size(); p != e; ++p)
+ MatchedPredicates[p] = (i == p) || (PatternsToMatch[i].getPredicates() ==
+ PatternsToMatch[p].getPredicates());
+
+ unsigned NumMatches = MatchedPredicates.count();
+ (void)NumMatches;
+
for (unsigned v = 0, e = Variants.size(); v != e; ++v) {
TreePatternNodePtr Variant = Variants[v];
@@ -4487,8 +4498,7 @@
bool AlreadyExists = false;
for (unsigned p = 0, e = PatternsToMatch.size(); p != e; ++p) {
// Skip if the top level predicates do not match.
- if ((i != p) && (PatternsToMatch[i].getPredicates() !=
- PatternsToMatch[p].getPredicates()))
+ if (!MatchedPredicates[p])
continue;
// Check to see if this variant already exists.
if (Variant->isIsomorphicTo(PatternsToMatch[p].getSrcPattern(),
@@ -4507,6 +4517,8 @@
Variant, PatternsToMatch[i].getDstPatternShared(),
PatternsToMatch[i].getDstRegs(),
PatternsToMatch[i].getAddedComplexity(), Record::getNewUID()));
+ MatchedPredicates.resize(PatternsToMatch.size());
+ MatchedPredicates[PatternsToMatch.size() - 1] = true;
}
LLVM_DEBUG(errs() << "\n");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51035.162882.patch
Type: text/x-patch
Size: 2102 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180828/095c523b/attachment.bin>
More information about the llvm-commits
mailing list