Commit c0fc376b by Richard Henderson Committed by Richard Henderson

rtlanal.c (rtx_unstable_p, [...]): Don't consider pic register stable if…

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
parent d7836e38
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> 2000-10-24 Aldy Hernandez <aldyh@redhat.com>
* gcse.c (cprop_insn): do not propagate constants into jump_insn * gcse.c (cprop_insn): do not propagate constants into jump_insn
......
...@@ -70,9 +70,17 @@ rtx_unstable_p (x) ...@@ -70,9 +70,17 @@ rtx_unstable_p (x)
case REG: case REG:
/* As in rtx_varies_p, we have to use the actual rtx, not reg number. */ /* 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 if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
|| x == arg_pointer_rtx || x == pic_offset_table_rtx || x == arg_pointer_rtx || RTX_UNCHANGING_P (x))
|| 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: case ASM_OPERANDS:
if (MEM_VOLATILE_P (x)) if (MEM_VOLATILE_P (x))
...@@ -135,8 +143,17 @@ rtx_varies_p (x) ...@@ -135,8 +143,17 @@ rtx_varies_p (x)
and arg pointers and not just the register number in case we have and arg pointers and not just the register number in case we have
eliminated the frame and/or arg pointer and are using it eliminated the frame and/or arg pointer and are using it
for pseudos. */ for pseudos. */
return ! (x == frame_pointer_rtx || x == hard_frame_pointer_rtx if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
|| x == arg_pointer_rtx || x == pic_offset_table_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: case LO_SUM:
/* The operand 0 of a LO_SUM is considered constant /* The operand 0 of a LO_SUM is considered constant
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment