summaryrefslogtreecommitdiff
path: root/gcc/rtlanal.c
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>2001-02-19 00:05:49 +0000
committerJeff Law <law@gcc.gnu.org>2001-02-18 17:05:49 -0700
commit3335f1d984358b093678719844d52027ec5d01e1 (patch)
tree19d7be78d89e48bd3e789632fac7f037bd11c43d /gcc/rtlanal.c
parent021921d0e44e1ab96434d8881b96306bd3df4c31 (diff)
downloadgcc-3335f1d984358b093678719844d52027ec5d01e1.tar.gz
Makefile.in (rtlanal.o): Depend on hard-reg-set.h.
* Makefile.in (rtlanal.o): Depend on hard-reg-set.h. ($HOST_PREFIX_1)rtlanal.o: Remove rules for building (mostlyclean): Corresponding changes. * rtlanal.c (hard-reg-set.h): Include. (rtx_unstable_p): Do not treat the argument pointer specially if it is not a fixed register. (rtx_varies_p, rtx_addr_can_trap_p): Similarly. From-SVN: r39860
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r--gcc/rtlanal.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 5dc2af586a3..6e6ed8e7b2b 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -24,6 +24,7 @@ Boston, MA 02111-1307, USA. */
#include "system.h"
#include "toplev.h"
#include "rtl.h"
+#include "hard-reg-set.h"
/* Forward declarations */
static void set_of_1 PARAMS ((rtx, rtx, void *));
@@ -67,7 +68,9 @@ rtx_unstable_p (x)
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))
+ /* The arg pointer varies if it is not a fixed register. */
+ || (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM])
+ || RTX_UNCHANGING_P (x))
return 0;
#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
/* ??? When call-clobbered, the value is stable modulo the restore
@@ -143,7 +146,8 @@ rtx_varies_p (x, for_alias)
eliminated the frame and/or arg pointer and are using it
for pseudos. */
if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
- || x == arg_pointer_rtx)
+ /* The arg pointer varies if it is not a fixed register. */
+ || (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM]))
return 0;
if (x == pic_offset_table_rtx
#ifdef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
@@ -211,7 +215,9 @@ rtx_addr_can_trap_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 == stack_pointer_rtx || x == arg_pointer_rtx);
+ || x == stack_pointer_rtx
+ /* The arg pointer varies if it is not a fixed register. */
+ || (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM]));
case CONST:
return rtx_addr_can_trap_p (XEXP (x, 0));