aboutsummaryrefslogtreecommitdiff
path: root/gcc/alias.c
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1997-11-05 21:24:45 +0000
committerJeff Law <law@gcc.gnu.org>1997-11-05 14:24:45 -0700
commiteaf407a54e7e7e220b4e4a622e65f7d870c27394 (patch)
treeed8e91baeb0cedb880fffc44406d29f431257697 /gcc/alias.c
parent4f9ca067a1b0f3dcb9d18187726fc7beac791b18 (diff)
downloadgcc-eaf407a54e7e7e220b4e4a622e65f7d870c27394.zip
gcc-eaf407a54e7e7e220b4e4a622e65f7d870c27394.tar.gz
gcc-eaf407a54e7e7e220b4e4a622e65f7d870c27394.tar.bz2
alias.c (find_base_value): Only return the known base value for pseudo registers.
* alias.c (find_base_value): Only return the known base value for pseudo registers. From-SVN: r16345
Diffstat (limited to 'gcc/alias.c')
-rw-r--r--gcc/alias.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/alias.c b/gcc/alias.c
index 0943444..025da50 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -102,10 +102,14 @@ find_base_value (src)
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)])
+ /* If a pseudo has a known base value, return it. Do not do this
+ for hard regs since it can result in a circular dependency
+ chain for registers which have values at function entry.
+
+ The test above is not sufficient because the scheduler may move
+ a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN. */
+ if (REGNO (src) >= FIRST_PSEUDO_REGISTER
+ && reg_base_value[REGNO (src)])
return reg_base_value[REGNO (src)];
return src;