This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Your change to emit_group_{load,store}
On Wed, Oct 27, 2004 at 01:52:56PM -0400, Aldy Hernandez wrote:
> I know rth already fixed this, but I still think the PPC back-end
> is generating confusing RTL:
>
> > (parallel:TF [
> > (expr_list:REG_DEP_TRUE (reg:DF 45 f13 [ g ])
> > (const_int 0 [0x0]))
> > ])
>
> What does this mean exactly?
It's more or less the same as returning (reg:DF f13). Admittedly, I
can't see now why I used a parallel in this particular case. It was
possibly to cover bugs elsewhere that have now been fixed.
> It *doesn't* mean that the value goes partly in the stack,
No, not by itself. Partly in memory is implied by
function_arg_partial_nregs returning non-zero, which it will do in this
case.
> because that's specified with the first operand
> of the first expr_list being zero.
No, a zero there says that the *whole* arg goes in memory, and also in
regs as specified by other elements of the parallel.
> If TF should go in multiple locations (in DF registers), it would be
> something like this:
>
> (parallel:TF [
> (expr_list (reg:DF f13) (const_int 0))
> (expr_list (reg:DF f14) (const_int 8)))
>
> For that matter, I don't understand why we can't just return:
>
> (reg:TF f13)
Because that would say the arg goes in f13 and f14. And the ABI says we
only use f1..f13 for function params.
--
Alan Modra
IBM OzLabs - Linux Technology Centre