Changes in directory llvm/utils/TableGen:
DAGISelEmitter.cpp updated: 1.194 -> 1.195 DAGISelEmitter.h updated: 1.61 -> 1.62 --- Log message: Allow "let AddedCost = n in" to increase pattern complexity. --- Diffs of the changes: (+21 -7) DAGISelEmitter.cpp | 21 ++++++++++++++++----- DAGISelEmitter.h | 7 +++++-- 2 files changed, 21 insertions(+), 7 deletions(-) Index: llvm/utils/TableGen/DAGISelEmitter.cpp diff -u llvm/utils/TableGen/DAGISelEmitter.cpp:1.194 llvm/utils/TableGen/DAGISelEmitter.cpp:1.195 --- llvm/utils/TableGen/DAGISelEmitter.cpp:1.194 Thu Apr 6 15:36:51 2006 +++ llvm/utils/TableGen/DAGISelEmitter.cpp Wed Apr 19 13:07:24 2006 @@ -1504,7 +1504,8 @@ TreePatternNode *DstPattern = TheInst.getResultPattern(); PatternsToMatch. push_back(PatternToMatch(Instr->getValueAsListInit("Predicates"), - SrcPattern, DstPattern)); + SrcPattern, DstPattern, + Instr->getValueAsInt("AddedCost"))); } } @@ -1580,7 +1581,8 @@ PatternsToMatch. push_back(PatternToMatch(Patterns[i]->getValueAsListInit("Predicates"), Pattern->getOnlyTree(), - Temp.getOnlyTree())); + Temp.getOnlyTree(), + Patterns[i]->getValueAsInt("AddedCost"))); } } @@ -1823,7 +1825,8 @@ // Otherwise, add it to the list of patterns we have. PatternsToMatch. push_back(PatternToMatch(PatternsToMatch[i].getPredicates(), - Variant, PatternsToMatch[i].getDstPattern())); + Variant, PatternsToMatch[i].getDstPattern(), + PatternsToMatch[i].getAddedCost())); } DEBUG(std::cerr << "\n"); @@ -1933,6 +1936,8 @@ PatternToMatch *RHS) { unsigned LHSSize = getPatternSize(LHS->getSrcPattern(), ISE); unsigned RHSSize = getPatternSize(RHS->getSrcPattern(), ISE); + LHSSize += LHS->getAddedCost(); + RHSSize += RHS->getAddedCost(); if (LHSSize > RHSSize) return true; // LHS -> bigger -> less cost if (LHSSize < RHSSize) return false; @@ -2003,6 +2008,8 @@ // Predicates. ListInit *Predicates; + // Pattern cost. + unsigned Cost; // Instruction selector pattern. TreePatternNode *Pattern; // Matched instruction. @@ -2939,8 +2946,10 @@ OS << "\n" << std::string(Indent, ' ') << "// Emits: "; Pattern.getDstPattern()->print(OS); OS << "\n"; + unsigned AddedCost = Pattern.getAddedCost(); OS << std::string(Indent, ' ') << "// Pattern complexity = " - << getPatternSize(Pattern.getSrcPattern(), *this) << " cost = " + << getPatternSize(Pattern.getSrcPattern(), *this) + AddedCost + << " cost = " << getResultPatternCost(Pattern.getDstPattern(), *this) << "\n"; } if (!FirstCodeLine.first) { @@ -2960,8 +2969,10 @@ OS << "\n" << std::string(Indent, ' ') << "// Emits: "; Pattern.getDstPattern()->print(OS); OS << "\n"; + unsigned AddedCost = Pattern.getAddedCost(); OS << std::string(Indent, ' ') << "// Pattern complexity = " - << getPatternSize(Pattern.getSrcPattern(), *this) << " cost = " + << getPatternSize(Pattern.getSrcPattern(), *this) + AddedCost + << " cost = " << getResultPatternCost(Pattern.getDstPattern(), *this) << "\n"; } EmitPatterns(Other, Indent, OS); Index: llvm/utils/TableGen/DAGISelEmitter.h diff -u llvm/utils/TableGen/DAGISelEmitter.h:1.61 llvm/utils/TableGen/DAGISelEmitter.h:1.62 --- llvm/utils/TableGen/DAGISelEmitter.h:1.61 Fri Mar 24 17:10:39 2006 +++ llvm/utils/TableGen/DAGISelEmitter.h Wed Apr 19 13:07:24 2006 @@ -394,16 +394,19 @@ /// PatternToMatch - Used by DAGISelEmitter to keep tab of patterns processed /// to produce isel. struct PatternToMatch { - PatternToMatch(ListInit *preds, TreePatternNode *src, TreePatternNode *dst): - Predicates(preds), SrcPattern(src), DstPattern(dst) {}; + PatternToMatch(ListInit *preds, + TreePatternNode *src, TreePatternNode *dst, unsigned cost): + Predicates(preds), SrcPattern(src), DstPattern(dst), AddedCost(cost) {}; ListInit *Predicates; // Top level predicate conditions to match. TreePatternNode *SrcPattern; // Source pattern to match. TreePatternNode *DstPattern; // Resulting pattern. + unsigned AddedCost; // Add to matching pattern complexity. ListInit *getPredicates() const { return Predicates; } TreePatternNode *getSrcPattern() const { return SrcPattern; } TreePatternNode *getDstPattern() const { return DstPattern; } + unsigned getAddedCost() const { return AddedCost; } }; /// DAGISelEmitter - The top-level class which coordinates construction _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits