From eaf407a54e7e7e220b4e4a622e65f7d870c27394 Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Wed, 5 Nov 1997 21:24:45 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/alias.c | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2801ba2280d..4ed25d50079 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Nov 5 14:26:05 1997 Jeffrey A Law (law@cygnus.com) + + * alias.c (find_base_value): Only return the known base value for + pseudo registers. + Wed Nov 5 11:27:14 1997 Jim Wilson * i386.c (load_pic_register): Call prologue_get_pc_and_set_got. diff --git a/gcc/alias.c b/gcc/alias.c index 0943444185a..025da501a42 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;