SUBREGs of hard registers: when not to simplify

Geoff Keating geoffk@ozemail.com.au
Sun Oct 31 23:33:00 GMT 1999


> Date: Wed, 27 Oct 1999 15:57:35 -0400
> From: Michael Meissner <meissner@cygnus.com>
> 
> On Wed, Oct 27, 1999 at 02:25:49PM +1000, Geoff Keating wrote:
> > 
> > If you turn (subreg:SF (reg/i:SC r3) 1) into (reg:SF r4) before function
> > inlining has finished, integrate will have trouble when it goes to
> > look for the return value because you've lost the '/i'.  This was causing
> > complex-5 to fail at -O3.
> 
> This looks reasonable.  Note, movsf seems to have such extra baggage compared
> to movdf, that I wonder sometimes if it is worth it to keep around (either by
> simplifying movsf so it is like movdf, or adding the same stuff to movdf).
> Note, this will obviously affect AIX (or sysv/eabi's -mcall-aix) more than
> sysv/eabi, since there fp is never passed in integer registers.

I can't see any difference in gcc's code generation for his procedure:

__complex__ float foo(void)
{
  return 1.0f + 1.5fi;
}

under sysv, sysv/eabi, or -mcall-aix.  I'm suspicious about the
call-aix result, though.  In all the cases, the return value got
passed in registers r3 and r4, not FP registers.

Anyway, I've committed the patch.

-- 
Geoffrey Keating <geoffk@cygnus.com>



More information about the Gcc-patches mailing list