[llvm] [SelectionDAG] Add space-optimized forms of OPC_CheckPredicate (PR #73488)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 11 01:47:07 PST 2023


================
@@ -85,7 +83,45 @@ class MatcherTableEmitter {
 
 public:
   MatcherTableEmitter(const CodeGenDAGPatterns &cgp)
-      : CGP(cgp), OpcodeCounts(Matcher::HighestKind + 1, 0) {}
+      : CGP(cgp), OpcodeCounts(Matcher::HighestKind + 1, 0) {
+    // Sort ComplexPatterns by usage.
+    auto &Usage = cgp.getComplexPatternUsage();
+    std::vector<std::pair<const ComplexPattern *, unsigned>> PatternList(
+        Usage.begin(), Usage.end());
+    sort(PatternList, [](auto &A, auto &B) { return A.second > B.second; });
+    for (auto &Pattern : PatternList)
+      ComplexPatterns.push_back(Pattern.first);
+
+    // Sort Predicates by usage.
+    auto &PredicateUsage = cgp.getPredicateUsage();
+    // Merge predicates with same code.
+    for (auto &Usage : PredicateUsage) {
+      TreePattern *TP = Usage.first;
+      TreePredicateFn Pred(TP);
+      NodePredicatesByCodeToRun[Pred.getCodeToRunOnSDNode()].push_back(TP);
+    }
+
+    std::vector<std::pair<TreePattern *, unsigned>> PredicateList;
+    // Sum the usage.
+    for (auto &Predicate : NodePredicatesByCodeToRun) {
+      TinyPtrVector<TreePattern *> TPs = Predicate.second;
----------------
arsenm wrote:

Why copy?

https://github.com/llvm/llvm-project/pull/73488


More information about the llvm-commits mailing list