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 middle-end/32889] [4.2 Regression] ICE in delete_output_reload, at reload1.c:7926



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


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