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/53065] ICE replace_reg_with_saved_mem, at caller-save.c:1125


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53065

Georg-Johann Lay <gjl at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |pinskia at gcc dot gnu.org
              Build|4.7.0                       |

--- Comment #3 from Georg-Johann Lay <gjl at gcc dot gnu.org> 2012-04-24 11:49:33 UTC ---
Would you please explain why this is a target issue?

The ICE occurs while caller-save.c:save_call_clobbered_regs:858 processes the
following:

(debug_insn 34 33 35 2 (var_location:SF y (concatn:SF [
            (reg:SI 16 r16)
            (reg:SI 17 r17)
            (mem/c:QI (plus:HI (reg/f:HI 32 __SP_L__)
                    (const_int 13 [0xd])) [29 S1 A8])
            (mem/c:QI (plus:HI (reg/f:HI 32 __SP_L__)
                    (const_int 14 [0xe])) [29 S1 A8])
        ])) AHRS.cpp:267 -1
     (nil))

save_mode[16] = SImode
save_mode[17] = VOIDmode

replace_reg_with_saved_mem then sees VOIDmode for R17

This looks wrong because R16 overlaps R17. All hard registers are 8 bits wide,
i.e. the next register after (reg:SI 16) is R20.

Obviously some pass generates a bad debug_insn and cannot process it.

The backend does not generate such insns.


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