This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/41176] [4.4/4.5 Regression] ICE in reload_cse_simplify_operands at postreload.c:396
- From: "jakub at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 8 Oct 2009 13:33:17 -0000
- Subject: [Bug target/41176] [4.4/4.5 Regression] ICE in reload_cse_simplify_operands at postreload.c:396
- References: <bug-41176-271@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #8 from jakub at gcc dot gnu dot org 2009-10-08 13:33 -------
This is on (set (reg:DF X) (mem:DF ((plus:DI (reg:DI Y) (const_int 3)))).
When X is still a pseudo, this is considered valid, as lfd accept any offset,
but when RA chooses to assign X to a GPR register, the address doesn't match
the Y constraint in movdf_hardfloat64. Is this a bug in reload that it doesn't
attempt to force the address into a register, or in target description that it
should tell reload to do so somehow? Or does the backend need to be able to
handle these, perhaps by forcing splitting of it?
ld X,disp(Y) for (disp & 3) != 0 could be splitted into addi X,Y,disp;ld
X,0(X),
for std X,disp(Y), (disp & 3) != 0 if X != Y perhaps addi Y,Y,disp;std
X,0(Y);adddi Y,Y,-disp but for std X,disp(Y) I have no idea if there are no
scratch regs available.
--
jakub at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |uweigand at gcc dot gnu dot
| |org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41176