rtx_unstable_p and rtx_varies_p when PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
John David Anglin
dave@hiauly1.hia.nrc.ca
Sun Feb 18 12:59:00 GMT 2001
Currently, PIC_OFFSET_TABLE_REG_CALL_CLOBBERED is defined by only the ia64
and pa ports. In rtx_unstable_p, we have:
case REG:
/* As in rtx_varies_p, we have to use the actual rtx, not reg number. */
if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
|| x == arg_pointer_rtx || RTX_UNCHANGING_P (x))
return 0;
#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
/* ??? When call-clobbered, the value is stable modulo the restore
that must happen after a call. This currently screws up local-alloc
into believing that the restore is not needed. */
if (x == pic_offset_table_rtx)
return 0;
#endif
return 1;
There is similar code in rtx_varies_p.
The code to save and restore the pic offset table register on the pa was
recently revamped and in my initial testing there is no longer a problem with
the store being deleted.
Should we now always return 0 if x == pic_offset_table_rtx?
Dave
--
J. David Anglin dave.anglin@nrc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6605)
More information about the Gcc
mailing list