mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-28 06:14:10 +08:00
rtlanal.c (rtx_unstable_p, [...]): Don't consider pic register stable if PIC_OFFSET_TABLE_REG_CALL_CLOBBERED.
* rtlanal.c (rtx_unstable_p, rtx_varies_p): Don't consider pic register stable if PIC_OFFSET_TABLE_REG_CALL_CLOBBERED. From-SVN: r37040
This commit is contained in:
parent
d7836e38b7
commit
c0fc376bcf
@ -1,3 +1,8 @@
|
||||
2000-10-24 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* rtlanal.c (rtx_unstable_p, rtx_varies_p): Don't consider pic
|
||||
register stable if PIC_OFFSET_TABLE_REG_CALL_CLOBBERED.
|
||||
|
||||
2000-10-24 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* gcse.c (cprop_insn): do not propagate constants into jump_insn
|
||||
|
@ -70,9 +70,17 @@ rtx_unstable_p (x)
|
||||
|
||||
case REG:
|
||||
/* As in rtx_varies_p, we have to use the actual rtx, not reg number. */
|
||||
return ! (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
|
||||
|| x == arg_pointer_rtx || x == pic_offset_table_rtx
|
||||
|| RTX_UNCHANGING_P (x));
|
||||
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;
|
||||
|
||||
case ASM_OPERANDS:
|
||||
if (MEM_VOLATILE_P (x))
|
||||
@ -135,8 +143,17 @@ rtx_varies_p (x)
|
||||
and arg pointers and not just the register number in case we have
|
||||
eliminated the frame and/or arg pointer and are using it
|
||||
for pseudos. */
|
||||
return ! (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
|
||||
|| x == arg_pointer_rtx || x == pic_offset_table_rtx);
|
||||
if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
|
||||
|| x == arg_pointer_rtx)
|
||||
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;
|
||||
|
||||
case LO_SUM:
|
||||
/* The operand 0 of a LO_SUM is considered constant
|
||||
|
Loading…
Reference in New Issue
Block a user