aboutsummaryrefslogtreecommitdiff
path: root/gcc/alias.c
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1997-11-04 23:09:21 +0000
committerJeff Law <law@gcc.gnu.org>1997-11-04 16:09:21 -0700
commit73774bc7c0e05ba6bc4f81997d6145ce2c427b21 (patch)
tree476445edc9aeed101589d0824bd4334a68ce425f /gcc/alias.c
parent30c317f5da1ff0144dd6dd8143d830a2223f17b8 (diff)
downloadgcc-73774bc7c0e05ba6bc4f81997d6145ce2c427b21.zip
gcc-73774bc7c0e05ba6bc4f81997d6145ce2c427b21.tar.gz
gcc-73774bc7c0e05ba6bc4f81997d6145ce2c427b21.tar.bz2
alias.c (find_base_value): When copying arguments, return the tenative value for a hard register.
* alias.c (find_base_value): When copying arguments, return the tenative value for a hard register. From-SVN: r16319
Diffstat (limited to 'gcc/alias.c')
-rw-r--r--gcc/alias.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/alias.c b/gcc/alias.c
index 855abae..0943444 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -95,16 +95,19 @@ find_base_value (src)
return src;
case REG:
- /* If this REG is related to a known base value, return it. */
- if (reg_base_value[REGNO (src)])
- return reg_base_value[REGNO (src)];
-
/* At the start of a function argument registers have known base
values which may be lost later. Returning an ADDRESS
expression here allows optimization based on argument values
even when the argument registers are used for other purposes. */
if (REGNO (src) < FIRST_PSEUDO_REGISTER && copying_arguments)
return new_reg_base_value[REGNO (src)];
+
+ /* If this REG is related to a known base value, return it.
+ This must happen after the arg register check above to avoid
+ circular set chains. */
+ if (reg_base_value[REGNO (src)])
+ return reg_base_value[REGNO (src)];
+
return src;
case MEM: