[LLVMdev] Tablegen: Instructions that take immediates or registers as operands
Villmow, Micah
Micah.Villmow at amd.com
Thu Nov 3 11:40:02 PDT 2011
Tom,
There is no way to do this that I know of. Maybe David Greene or someone who hacks on Tablegen a lot would know.
Micah
> -----Original Message-----
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu]
> On Behalf Of Tom Stellard
> Sent: Thursday, November 03, 2011 10:23 AM
> To: LLVM Developers Mailing List
> Subject: [LLVMdev] Tablegen: Instructions that take immediates or
> registers as operands
>
> Hi,
>
> I'm working on an LLVM backend for GPUs. One thing that is a little
> different about some GPUs is that instructions can take registers or
> 32-bit floating point immediates as arguments. I was wondering if
> there
> is a way to model this using tablegen, without having to define an
> instruction for each possible combination of registers and immediates
> (e.g. For ADD it would require four definitions: ADD_imm_imm,
> ADD_reg_reg, ADD_imm_reg, ADD_reg_imm).
>
> I have tried a few different ways to make this work in tablegen, but I
> have been unsuccessful so far. Here is an example of something I have
> tried. It fails to compile with tablegen, but I hope it can help
> demonstrate what I am trying to do:
>
>
> def F32Node : PatLeaf<(vt), [{return N->getVT() == MVT::f32;}]>;
>
> def F32Op : Operand <f32> {
> let MIOperandInfo = (ops GPR, f32imm);
> }
>
> def ADD : InstAMD <
> (outs GPR:$dst),
> (ins F32Op:$src0, F32Op:$src1),
> "ADD $dst, $src0, $src1"),
> [(set GPR:$dst, (fadd F32Node:$src0, F32Node:$src1))]
> >;
>
> Is what I am trying to do possible with tablegen, and if so what is the
> best way for me to do it?
>
> Thanks,
> Tom Stellard
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list