[llvm] r213521 - TableGen: Allow AddedComplexity values to be negative
Richard Smith
richard at metafoo.co.uk
Mon Jul 21 18:48:51 PDT 2014
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?
> +// 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/3c42f55b/attachment.html>
More information about the llvm-commits
mailing list