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

Reply via email to