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] |
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] |