[llvm] r213521 - TableGen: Allow AddedComplexity values to be negative

Richard Smith richard at metafoo.co.uk
Mon Jul 21 19:41:20 PDT 2014


On Mon, Jul 21, 2014 at 6:48 PM, Richard Smith <richard at metafoo.co.uk>
wrote:

> On Mon, Jul 21, 2014 at 6:28 AM, Tom Stellard <thomas.stellard at amd.com>
> wrote:
>
>> Author: tstellar
>> Date: Mon Jul 21 08:28:54 2014
>> New Revision: 213521
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=213521&view=rev
>> Log:
>> TableGen: Allow AddedComplexity values to be negative
>>
>> This is useful for cases when stand-alone patterns are preferred to the
>> patterns included in the instruction definitions.  Instead of requiring
>> that stand-alone patterns set a larger AddedComplexity value, which
>> can be confusing to new developers, the allows us to reduce the
>> complexity of the included patterns to achieve the same result.
>>
>> Added:
>>     llvm/trunk/test/TableGen/NegativeAddedComplexity.ll
>> Modified:
>>     llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
>>     llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h
>>     llvm/trunk/utils/TableGen/DAGISelEmitter.cpp
>>
>> Added: llvm/trunk/test/TableGen/NegativeAddedComplexity.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/TableGen/NegativeAddedComplexity.ll?rev=213521&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/test/TableGen/NegativeAddedComplexity.ll (added)
>> +++ llvm/trunk/test/TableGen/NegativeAddedComplexity.ll Mon Jul 21
>> 08:28:54 2014
>> @@ -0,0 +1,41 @@
>> +// RUN: llvm-tblgen -I../../include -gen-dag-isel %s | FileCheck %s
>> +// XFAIL: vg_leak
>> +
>> +include "llvm/Target/Target.td"
>>
>
> It seems unreasonable for this test to include a source file. No other
> test does this; can you reduce this to directly specify a minimal set of
> necessary functionality?
>

Reverted in r213596, so that this change isn't part of the 3.5 branch
that's being cut tonight.


> +// Make sure the higher complexity pattern comes first
>> +// CHECK: TARGET_VAL(::ADD0)
>> +// CHECK: Complexity = {{[^-]}}
>> +// Make sure the ADD1 pattern has a negative complexity
>> +// CHECK: TARGET_VAL(::ADD1)
>> +// CHECK: Complexity = -{{[0-9]+}}
>> +
>> +def TestRC : RegisterClass<"TEST", [i32], 32, (add)>;
>> +
>> +def TestInstrInfo : InstrInfo;
>> +
>> +def Test : Target {
>> +  let InstructionSet = TestInstrInfo;
>> +}
>> +
>> +def ADD0 : Instruction {
>> +  let OutOperandList = (outs TestRC:$dst);
>> +  let InOperandList = (ins TestRC:$src0, TestRC:$src1);
>> +}
>> +
>> +def ADD1 : Instruction {
>> +  let OutOperandList = (outs TestRC:$dst);
>> +  let InOperandList = (ins TestRC:$src0, TestRC:$src1);
>> +}
>> +
>> +def : Pat <
>> +  (add i32:$src0, i32:$src1),
>> +  (ADD1 $src0, $src1)
>> +> {
>> +  let AddedComplexity = -1000;
>> +}
>> +
>> +def : Pat <
>> +   (add i32:$src0, i32:$src1),
>> +   (ADD0 $src0, $src1)
>> +>;
>>
>> Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp?rev=213521&r1=213520&r2=213521&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp (original)
>> +++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp Mon Jul 21 08:28:54
>> 2014
>> @@ -771,7 +771,7 @@ static unsigned getPatternSize(const Tre
>>
>>  /// Compute the complexity metric for the input pattern.  This roughly
>>  /// corresponds to the number of nodes that are covered.
>> -unsigned PatternToMatch::
>> +int PatternToMatch::
>>  getPatternComplexity(const CodeGenDAGPatterns &CGP) const {
>>    return getPatternSize(getSrcPattern(), CGP) + getAddedComplexity();
>>  }
>>
>> Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h?rev=213521&r1=213520&r2=213521&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h (original)
>> +++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h Mon Jul 21 08:28:54
>> 2014
>> @@ -667,7 +667,7 @@ public:
>>    PatternToMatch(Record *srcrecord, ListInit *preds,
>>                   TreePatternNode *src, TreePatternNode *dst,
>>                   const std::vector<Record*> &dstregs,
>> -                 unsigned complexity, unsigned uid)
>> +                 int complexity, unsigned uid)
>>      : SrcRecord(srcrecord), Predicates(preds), SrcPattern(src),
>> DstPattern(dst),
>>        Dstregs(dstregs), AddedComplexity(complexity), ID(uid) {}
>>
>> @@ -676,7 +676,7 @@ public:
>>    TreePatternNode *SrcPattern;  // Source pattern to match.
>>    TreePatternNode *DstPattern;  // Resulting pattern.
>>    std::vector<Record*> Dstregs; // Physical register defs being matched.
>> -  unsigned         AddedComplexity; // Add to matching pattern
>> complexity.
>> +  int              AddedComplexity; // Add to matching pattern
>> complexity.
>>    unsigned         ID;          // Unique ID for the record.
>>
>>    Record          *getSrcRecord()  const { return SrcRecord; }
>> @@ -684,13 +684,13 @@ public:
>>    TreePatternNode *getSrcPattern() const { return SrcPattern; }
>>    TreePatternNode *getDstPattern() const { return DstPattern; }
>>    const std::vector<Record*> &getDstRegs() const { return Dstregs; }
>> -  unsigned         getAddedComplexity() const { return AddedComplexity; }
>> +  int         getAddedComplexity() const { return AddedComplexity; }
>>
>>    std::string getPredicateCheck() const;
>>
>>    /// Compute the complexity metric for the input pattern.  This roughly
>>    /// corresponds to the number of nodes that are covered.
>> -  unsigned getPatternComplexity(const CodeGenDAGPatterns &CGP) const;
>> +  int getPatternComplexity(const CodeGenDAGPatterns &CGP) const;
>>  };
>>
>>  class CodeGenDAGPatterns {
>>
>> Modified: llvm/trunk/utils/TableGen/DAGISelEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelEmitter.cpp?rev=213521&r1=213520&r2=213521&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/utils/TableGen/DAGISelEmitter.cpp (original)
>> +++ llvm/trunk/utils/TableGen/DAGISelEmitter.cpp Mon Jul 21 08:28:54 2014
>> @@ -94,8 +94,8 @@ struct PatternSortingPredicate {
>>      // Otherwise, if the patterns might both match, sort based on
>> complexity,
>>      // which means that we prefer to match patterns that cover more
>> nodes in the
>>      // input over nodes that cover fewer.
>> -    unsigned LHSSize = LHS->getPatternComplexity(CGP);
>> -    unsigned RHSSize = RHS->getPatternComplexity(CGP);
>> +    int LHSSize = LHS->getPatternComplexity(CGP);
>> +    int RHSSize = RHS->getPatternComplexity(CGP);
>>      if (LHSSize > RHSSize) return true;   // LHS -> bigger -> less cost
>>      if (LHSSize < RHSSize) return false;
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140721/a3ec1d2f/attachment.html>


More information about the llvm-commits mailing list