Patch to fix recent local-alloc IA-64 breakage

John Wehle john@feith.com
Mon Oct 23 05:17:00 GMT 2000


>	* local-alloc.c (equiv_init_call_clobbered_p): New function.
>	(struct equivalence): Add call_clobbered field.
>	(update_equiv_regs): Set it.
>	(equiv_init_movable_p): An equivalence which uses a call clobbered
>	register can't be moved past any calls.

Actually a better solution may be to change update_equiv_regs:

  if (note && ! rtx_varies_p (XEXP (note, 0)))
    PUT_MODE (note, (enum machine_mode) REG_EQUIV);

to something like:

  if (note && ! rtx_varies_p (XEXP (note, 0))
      && ! call clobbered (XEXP (note, 0)) && ! call clobbered (src))

since REG_EQUIV means that the equivalence is valid throughout the
entire function which certainly isn't the case if a call clobbered
register is present.

I'll look at this a bit further.

-- John
-------------------------------------------------------------------------
|   Feith Systems  |   Voice: 1-215-646-8000  |  Email: john@feith.com  |
|    John Wehle    |     Fax: 1-215-540-5495  |                         |
-------------------------------------------------------------------------



More information about the Gcc-patches mailing list