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]

Reload bug on Sparc


I have the following in a .greg file:

Reloads for insn # 1179
Reload 0: reload_in (SI) = (plus:SI (reg/f:SI 30 %fp)
                                    (const_int -16544 [0xffffffffffffbf60]))
	GENERAL_REGS, RELOAD_FOR_OUTPUT_ADDRESS (opnum = 0), can't combine
	reload_in_reg: (plus:SI (reg/f:SI 30 %fp)
                                (const_int -16544 [0xffffffffffffbf60]))
	reload_reg_rtx: (reg:SI 10 %o2)
Reload 1: GENERAL_REGS, RELOAD_FOR_OUTPUT (opnum = 0)
	reload_out_reg: (reg:SI 198)
Reload 2: reload_in (SI) = (plus:SI (reg/f:SI 30 %fp)
                                    (const_int -16 [0xfffffffffffffff0]))
	reload_out (SI) = (mem:SI (plus:SI (reg/f:SI 30 %fp)
                      (const_int -16544 [0xffffffffffffbf60])) [179 S4 A32])
	GENERAL_REGS, RELOAD_OTHER (opnum = 1)
	reload_in_reg: (plus:SI (reg/f:SI 30 %fp)
                                (const_int -16 [0xfffffffffffffff0]))
	reload_out_reg: (reg:SI 198)
	reload_reg_rtx: (reg:SI 11 %o3)
Reload 3: reload_in (SI) = (const_int -16464 [0xffffffffffffbfb0])
	GENERAL_REGS, RELOAD_FOR_INPUT (opnum = 2), can't combine
	reload_in_reg: (reg:SI 142)
	reload_reg_rtx: (reg:SI 10 %o2)

Note that it appears that reload 1 is combined into reload 2 and changed
to RELOAD_OTHER.

However, reload 0 is RELOAD_FOR_OUTPUT_ADDRESS, but that's wrong: it's really
RELOAD_FOR_OTHER_ADDRESS.  We're getting incorrect code from this.

I don't see any code that attempts to change these reload types.  Is there
such code that I'm missing and isn't working or is this simply something
that was forgotten?


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