aboutsummaryrefslogtreecommitdiff
path: root/gcc/alias.c
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1997-10-26 18:39:57 +0000
committerJeff Law <law@gcc.gnu.org>1997-10-26 11:39:57 -0700
commitadb9effb26586361b5dbf9ec28ce68c7b681b10e (patch)
tree2d0c7c51e1df19e150887c87735c985cfd5b1d7e /gcc/alias.c
parente85988b5d5d75a13e0a6908abd8e287f1b6264c6 (diff)
downloadgcc-adb9effb26586361b5dbf9ec28ce68c7b681b10e.zip
gcc-adb9effb26586361b5dbf9ec28ce68c7b681b10e.tar.gz
gcc-adb9effb26586361b5dbf9ec28ce68c7b681b10e.tar.bz2
Take out find_base_value change -- not needed, only the find_base_term
change was needed. From-SVN: r16185
Diffstat (limited to 'gcc/alias.c')
-rw-r--r--gcc/alias.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/gcc/alias.c b/gcc/alias.c
index ea62cd5..07f98e6 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -93,13 +93,6 @@ find_base_value (src)
case LABEL_REF:
return src;
- case PRE_INC:
- case PRE_DEC:
- case POST_INC:
- case POST_DEC:
- src = XEXP (src, 0);
- /* fall through */
-
case REG:
/* At the start of a function argument registers have known base
values which may be lost later. Returning an ADDRESS
@@ -107,6 +100,8 @@ find_base_value (src)
even when the argument registers are used for other purposes. */
if (REGNO (src) < FIRST_PSEUDO_REGISTER && copying_arguments)
return reg_base_value[REGNO (src)];
+ if (REG_N_SETS (REGNO (src)) == 1 && reg_base_value[REGNO (src)])
+ return reg_base_value[REGNO (src)];
return src;
case MEM:
@@ -129,7 +124,21 @@ find_base_value (src)
case PLUS:
case MINUS:
{
- rtx src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
+ rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
+
+ if (GET_CODE (src_0) == REG)
+ {
+ temp = find_base_value (src_0);
+ if (temp)
+ src_0 = temp;
+ }
+
+ if (GET_CODE (src_1) == REG)
+ {
+ temp = find_base_value (src_1);
+ if (temp)
+ src_1 = temp;
+ }
/* Guess which operand is the base address.
@@ -144,6 +153,12 @@ find_base_value (src)
|| GET_CODE (src_0) == CONST)
return find_base_value (src_0);
+ if (GET_CODE (src_0) == CONST_INT
+ || GET_CODE (src_1) == SYMBOL_REF
+ || GET_CODE (src_1) == LABEL_REF
+ || GET_CODE (src_1) == CONST)
+ return find_base_value (src_1);
+
if (GET_CODE (src_0) == REG && REGNO_POINTER_FLAG (REGNO (src_0)))
return find_base_value (src_0);