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

i386.c: general_no_elim_operand


I see no documentation either at that function or in the MD file as
to why that function exists or why it has to exclude the eliminable
registers.

I have a crash in purge_address_1 (in a huge Ada program) where INSN is

(insn 295 293 297 (set (mem/f:SI (pre_dec:SI (reg/f:SI 7 esp)) [0 S4 A32])
        (addressof:SI (mem/f:SI (reg/f:SI 16 argp) [260 S4 A8]) 59 146d5f0)) 38 {*pushsi2} (nil)

and when it tries to remove that ADDRESSOF, it tries to make the second
operand (reg/f:SI 16 argp), which is not valid.

It's sort of fundamental in GCC that a register is always valid.  I suppose
we could add code to purge_address_1 to force into a pseudo-register if it's
not already, but that seems wrong.

In any event, some documentation seems required.


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