summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2015-11-27 05:44:04 +0000
committerCraig Topper <craig.topper@gmail.com>2015-11-27 05:44:04 +0000
commit8985efe5463c0fdae284409f7d15fce52905b240 (patch)
treebe38b9344b50e882e7392dfd3c2f421af6ff3852 /llvm/utils/TableGen/CodeGenDAGPatterns.cpp
parente38c57a4b8254cc4615eea85fb92f083baa141e8 (diff)
downloadbcm5719-llvm-8985efe5463c0fdae284409f7d15fce52905b240.tar.gz
bcm5719-llvm-8985efe5463c0fdae284409f7d15fce52905b240.zip
[TableGen] Sort pattern predicates before concatenating into a string so that different orders of the same set will produce the same string. This can reduce the number of unique predicates in the isel tables. NFC
llvm-svn: 254192
Diffstat (limited to 'llvm/utils/TableGen/CodeGenDAGPatterns.cpp')
-rw-r--r--llvm/utils/TableGen/CodeGenDAGPatterns.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
index 38a8653535e..6ba4a8dbda7 100644
--- a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
+++ b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
@@ -857,7 +857,7 @@ getPatternComplexity(const CodeGenDAGPatterns &CGP) const {
/// pattern's predicates concatenated with "&&" operators.
///
std::string PatternToMatch::getPredicateCheck() const {
- std::string PredicateCheck;
+ SmallVector<Record *, 4> PredicateRecs;
for (Init *I : Predicates->getValues()) {
if (DefInit *Pred = dyn_cast<DefInit>(I)) {
Record *Def = Pred->getDef();
@@ -867,11 +867,18 @@ std::string PatternToMatch::getPredicateCheck() const {
#endif
llvm_unreachable("Unknown predicate type!");
}
- if (!PredicateCheck.empty())
- PredicateCheck += " && ";
- PredicateCheck += "(" + Def->getValueAsString("CondString") + ")";
+ PredicateRecs.push_back(Def);
}
}
+ // Sort so that different orders get canonicalized to the same string.
+ std::sort(PredicateRecs.begin(), PredicateRecs.end(), LessRecord());
+
+ std::string PredicateCheck;
+ for (Record *Pred : PredicateRecs) {
+ if (!PredicateCheck.empty())
+ PredicateCheck += " && ";
+ PredicateCheck += "(" + Pred->getValueAsString("CondString") + ")";
+ }
return PredicateCheck;
}
OpenPOWER on IntegriCloud