This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
i386.c: general_no_elim_operand
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- To: gcc at gcc dot gnu dot org
- Date: Mon, 17 Mar 03 18:28:52 EST
- Subject: 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.