[LLVMdev] codeGen, instruction write one value to the input register.
kewuzhang
kewu.zhang at amd.com
Mon Jul 7 11:22:59 PDT 2014
Tks Cameron,
I did some study on it.
Now I am having the same problem as mentioned in this thread;"http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-January/057654.html” ,
> Looking at the X86 back-end code, it looks like there do exist
> multi-output instructions, but they all use physical (implicit) registers
> for the second destination, not arbitrary register types. And if I change
> the second destination to be a certain physical register, this problem goes
> away in my code. Is this just not a supported case currently? Or am I
> doing something wrong?
Wondering if there is any update about it?
best
kevin
On Jun 16, 2014, at 5:08 PM, Cameron McInally <cameron.mcinally at nyu.edu> wrote:
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140707/1d786003/attachment.html>
More information about the llvm-dev
mailing list