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

Richard Smith richard at metafoo.co.uk
Tue Jul 22 12:48:55 PDT 2014


That works for me; most of our tablegen backends are tested merely through
the fact that they generate code that passes its tests.
On 22 Jul 2014 10:43, "Tom Stellard" <tom at stellard.net> wrote:

> On Mon, Jul 21, 2014 at 06:48:51PM -0700, Richard Smith 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?
> >
>
> I tried to do this, but it looks like I will need to copy and paste large
> portions of the include files into the test to get it to work.  Since I
> have some target changes with test cases that depend on this patch,
> would it be better to drop the test case and add a note to the commit
> message saying there are test cases in the R600 target?
>
> -Tom
>
> >
> > > +// 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
> > >
>
> > _______________________________________________
> > 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/20140722/48119cf3/attachment.html>


More information about the llvm-commits mailing list