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]

rtx_unstable_p and rtx_varies_p when PIC_OFFSET_TABLE_REG_CALL_CLOBBERED


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)


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