This is the mail archive of the gcc-bugs@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]

[Bug target/41176] [4.4/4.5 Regression] ICE in reload_cse_simplify_operands at postreload.c:396



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


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