[LLVMdev] codeGen, instruction write one value to the input register.

Cameron McInally cameron.mcinally at nyu.edu
Mon Jun 16 14:08:32 PDT 2014


On Mon, Jun 16, 2014 at 4:51 PM, kewuzhang <kewu.zhang at amd.com> wrote:
> Hi Guys,
>
> In  LLVM codegen,
> a typical binary operation instruction is defined something like below:
>
> "  def _rr: NVPTXInst<(outs Int1Regs:$dst), (ins Int1Regs:$a, Int1Regs:$b),
>           "xor.pred \t$dst, $a, $b;",
>       [(set Int1Regs:$dst, (OpNode Int1Regs:$a, Int1Regs:$b))]>;
>>
> which takes two inputs and write the result to the $dst register.
>
> Then how to define a binary instruction which returns two results, one is
> written to the $dst register, and the other one is written to one of the
> inputs? I mean, to implement something like:
>> Type sincos( Type input,  Type * cosVal)
>>
> the instruction will compute sin and cos value of input, return the sin
> result and write the cos result to cosVal.
> Is there anything special constraints or something I should put onto the cos
> register?
>

Hey Kevin,

You might get a good start looking at the AVX2 VGATHER patterns in
llvm/lib/Target/X86/X86InstrSSE.td. Those patterns return two results.
They also make use of the @earlyclobber constraint.

Hope that helps,
Cameron




More information about the llvm-dev mailing list