diff options
author | Craig Topper <craig.topper@gmail.com> | 2015-11-27 05:44:04 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2015-11-27 05:44:04 +0000 |
commit | 8985efe5463c0fdae284409f7d15fce52905b240 (patch) | |
tree | be38b9344b50e882e7392dfd3c2f421af6ff3852 /llvm/utils/TableGen/CodeGenDAGPatterns.cpp | |
parent | e38c57a4b8254cc4615eea85fb92f083baa141e8 (diff) | |
download | bcm5719-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.cpp | 15 |
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; } |