This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/32889] [4.2 Regression] ICE in delete_output_reload, at reload1.c:7926
- From: "danglin at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 11 Nov 2007 16:49:54 -0000
- Subject: [Bug middle-end/32889] [4.2 Regression] ICE in delete_output_reload, at reload1.c:7926
- References: <bug-32889-10464@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #10 from danglin at gcc dot gnu dot org 2007-11-11 16:49 -------
This is a regression in reload.
(gdb) p debug_rtx (insn)
(insn 73 78 76 5 (set (mem/c:SI (plus:SI (reg/f:SI 3 %r3)
(const_int 17888 [0x45e0])) [19 S4 A32])
(plus:SI (reg/f:SI 3 %r3)
(const_int 1056 [0x420]))) 114 {addsi3} (nil)
(expr_list:REG_EQUIV (plus:SI (reg/f:SI 3 %r3)
(const_int 1056 [0x420]))
(nil)))
The problem is in the handling of the destination of insn 73. The
constraints for the addsi3 pattern only accept register operands.
The pseudo in the lreg pass has been replaced by a temp which must
be reloaded.
I looked at pa_secondary_reload. It simply returns NO_REGS for
(mem/c:SI (plus:SI (reg/f:SI 3 %r3) (const_int 17888 [0x45e0]))).
The frame offset in the temp exceeds that which can be handled
in a simple move. So, an intermediate registers is needed.
--
danglin at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|target |middle-end
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32889