On 02/14/2018 04:57 AM, Jakub Jelinek wrote:
> On Wed, Feb 14, 2018 at 12:52:45PM +0100, Richard Biener wrote:
>> On Tue, 13 Feb 2018, Jeff Law wrote:
>>
>>> On 01/30/2018 02:59 AM, Richard Biener wrote:
>>>>
>>>> This patch tries to deal with the "easy" part of a function ABI,
>>>> the return value location, in vectorization costing.  The testcase
>>>> shows that if we vectorize the returned value but the function
>>>> doesn't return in memory or in a vector register but as in this
>>>> case in an integer register pair (reg:TI ax) (bah, ABI details
>>>> exposed late?  why's this not a parallel?) we end up spilling
>>>> badly.
>>> PARALLEL is used when the ABI mandates a value be returned in multiple
>>> places.  Typically that happens when the value is returned in different
>>> types of registers (integer, floating point, vector).
>>>
>>> Presumably it's not a PARALLEL in this case because the value is only
>>> returned in %eax.
>>
>> It's returned in %eax and %rdx (TImode after all).  But maybe
>> "standard register pairs" are not represented as PARALLEL ...
> 
> Yes, it is (reg:TI %rax) if low part is in register 0 and high part in
> register 1.
Right.  In general we shouldn't see CONCATs the in the insn chain.
They'll be converted to a suitably wide REG.

PARALLEL is for a value that appears in two places.  So for example on
the m68k you might return pointers in a0 and d0.  So we wrap those reg
expressions inside a PARALLEL.

Jeff

Reply via email to