[LLVMdev] ComplexPattern
Chris Lattner
clattner at apple.com
Thu Jan 21 11:39:23 PST 2010
On Jan 19, 2010, at 6:57 AM, Greg Chadwick wrote:
> Hi,
>
> I was wondering if someone could explain precisely what the
> ComplexPattern tablegen class does?
ComplexPattern allows you to define arbitrary c++ code that does
pattern matching. This is useful for things like the X86 addressing
mode matcher, which have lots of special cases.
>
> Here's the first line of the definition (from TargetSelectionDAG.td)
> for
> reference:
>
> class ComplexPattern<ValueType ty, int numops, string fn,
> list<SDNode> roots = [],
> list<SDNodeProperty> props = [],
> list<CPAttribute> attrs = []>
>
> As far as I can tell it gives the name of a selection function (fn)
> that
> will be called to match that particular ComplexPattern. Should that
> function return true that pattern has matched. The match function can
> also fill in some operands that can be used later on (Number is
> specified by numops), ty presumably specifies the type of node that
> this
> match can be attempted on. Is my understanding of this correct?
Yes.
> The thing I'm still unsure about is roots, what exactly does this do?
> The comment above the definition specifies that 'RootNodes are the
> list
> of possible root nodes of the sub-dags to match' (RootsNodes is
> assigned
> to root so they're the same) but I can't make any sense of this.
I don't recall offhand, the best advice is to find an existing target
that does it and look at what it is accomplishing.
-Chris
More information about the llvm-dev
mailing list