diff options
author | Jeffrey A Law <law@cygnus.com> | 1997-11-05 21:24:45 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1997-11-05 14:24:45 -0700 |
commit | eaf407a54e7e7e220b4e4a622e65f7d870c27394 (patch) | |
tree | ed8e91baeb0cedb880fffc44406d29f431257697 /gcc/alias.c | |
parent | 4f9ca067a1b0f3dcb9d18187726fc7beac791b18 (diff) | |
download | gcc-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.c | 12 |
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; |