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