From: Jeffrey A Law Date: Wed, 8 Jul 1998 01:58:58 +0000 (+0000) Subject: rtlanal.c (reg_overlap_mentioned_p): Handle STRICT_LOW_PART. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b98b49ac727f969a64be0dcd20d5493cdd325ac8;p=gcc.git rtlanal.c (reg_overlap_mentioned_p): Handle STRICT_LOW_PART. * rtlanal.c (reg_overlap_mentioned_p): Handle STRICT_LOW_PART. If either argument is CONSTANT_P, then return zero. * reload.c (reg_overlap_mentioned_for_reload_p): Similarly. From-SVN: r21005 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9b3a8efcc90..ecce7d2d30e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ Wed Jul 8 02:43:34 1998 Jeffrey A Law (law@cygnus.com) + * rtlanal.c (reg_overlap_mentioned_p): Handle STRICT_LOW_PART. If + either argument is CONSTANT_P, then return zero. + * reload.c (reg_overlap_mentioned_for_reload_p): Similarly. + * configure.in: Also look at $srcdir/gas/configure to find a gas version #. diff --git a/gcc/reload.c b/gcc/reload.c index 0520554fea9..0b76bb709ba 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -5822,7 +5822,14 @@ reg_overlap_mentioned_for_reload_p (x, in) { int regno, endregno; - if (GET_CODE (x) == SUBREG) + /* Overly conservative. */ + if (GET_CODE (x) == STRICT_LOW_PART) + x = XEXP (x, 0); + + /* If either argument is a constant, then modifying X can not affect IN. */ + if (CONSTANT_P (x) || CONSTANT_P (in)) + return 0; + else if (GET_CODE (x) == SUBREG) { regno = REGNO (SUBREG_REG (x)); if (regno < FIRST_PSEUDO_REGISTER) @@ -5844,8 +5851,6 @@ reg_overlap_mentioned_for_reload_p (x, in) abort (); } } - else if (CONSTANT_P (x)) - return 0; else if (GET_CODE (x) == MEM) return refers_to_mem_for_reload_p (in); else if (GET_CODE (x) == SCRATCH || GET_CODE (x) == PC diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index b410553f327..8f423915b15 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -817,7 +817,14 @@ reg_overlap_mentioned_p (x, in) { int regno, endregno; - if (GET_CODE (x) == SUBREG) + /* Overly conservative. */ + if (GET_CODE (x) == STRICT_LOW_PART) + x = XEXP (x, 0); + + /* If either argument is a constant, then modifying X can not affect IN. */ + if (CONSTANT_P (x) || CONSTANT_P (in)) + return 0; + else if (GET_CODE (x) == SUBREG) { regno = REGNO (SUBREG_REG (x)); if (regno < FIRST_PSEUDO_REGISTER) @@ -825,8 +832,6 @@ reg_overlap_mentioned_p (x, in) } else if (GET_CODE (x) == REG) regno = REGNO (x); - else if (CONSTANT_P (x)) - return 0; else if (GET_CODE (x) == MEM) { char *fmt;