[LLVMdev] Tablegen generic class argument that accepts SDNode or Intrinsic
David A. Greene
greened at obbligato.org
Tue Nov 1 11:51:25 PDT 2011
Tom Stellard <thomas.stellard at amd.com> writes:
> Hi,
>
> I'm trying to define a class in tablegen that can have either an SDNode
> or an Intrinsic as an argument. Basically something like this:
>
> class OP1 <Record NodeOrIntr> : Instruction {
> let pattern = [(set Reg:$dst, (NodeOrIntr Reg:$src))];
> }
>
> I haven't been able to come with a way to do this yet. Is this
> something that is possible with tablegen?
Usually these get split into separate patterns, one for the SDNode and
one for the Intrinsic. I don't know of a reasonable way to
programmatically substitute one for another. Probably a !cast<>() from
string is the closest but you still need to know statically what you are
casting to, so I don't think it helps much.
This is one area of redundancy I never successfully completely
eliminated, though I was able to factor it down to a small set of
pattern-containing classes which I could reuse.
-Dave
More information about the llvm-dev
mailing list