This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Reload problem on ppc64 (was: Analysis of high priority PR c/2454)


Hi,

On Mon, 1 Jul 2002, Jeff Law wrote:

> Yes, it's true that any paradoxical subreg which exists at reload time
> will be loaded from memory,

Unfortunately this is not entirely true on the 3.1 branch for ppc64.
In one testcase (attached) reload starts with this insn:
(set (reg:DF 229) (float:DF (subreg:DI (reg:SI 338) 0)))

and pseudo 338 gets no hardreg.  It's the floatdidf2 insn, so the
constraints are "=f" resp. "f".  Operand 1 is (subreg:DI (reg:SI 338) 0).

Now reload allocates a stackslot for 338, but obviously somewhen the
reload isn't correctly produced for this, as it looks like:

(set (subreg:SI (reg:DI 43 f11) 4) (mem:SI (plus:DI (reg/f:DI ...

Look at how it tries to produce a subreg of a floating point register.
This is a mode change, but nevertheless it tried to use class FLOAT_REGS
(which is CLASS_CANNOT_CHANGE_MODE) for it.  Of course that insn can't be
recognized.

I tried to analyze it yesterday, but am not sure, why reload doesn't
produce all needed reloads.  First it should create a reload to load the
paradoxical subreg into an integer reg (i.e. to implement the mode
change), and then a second reload to get it into the float reg.  I'm not
yet sure, why it doesn't.


Ciao,
Michael.

Attachment: guppi-alpha-template.i
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]