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