[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