]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
alias.c (find_base_value): Only return the known base value for pseudo registers.
authorJeffrey A Law <law@cygnus.com>
Wed, 5 Nov 1997 21:17:36 +0000 (21:17 +0000)
committerJeff Law <law@gcc.gnu.org>
Wed, 5 Nov 1997 21:17:36 +0000 (14:17 -0700)
        * alias.c (find_base_value): Only return the known base value for
        pseudo registers.

From-SVN: r16343

gcc/ChangeLog
gcc/alias.c

index 686681cabb98372f06e2a0291062aba48f5fba17..855caae8f852070764c43d9098dcfa48a6e8f670 100644 (file)
@@ -2,6 +2,9 @@ Wed Nov  5 01:42:12 1997  Jeffrey A Law  (law@cygnus.com)
 
        * version.c: Bump for snapshot.
 
+       * alias.c (find_base_value): Only return the known base value for
+       pseudo registers.
+
 Tue Nov  4 16:07:15 1997  Jeffrey A Law  (law@cygnus.com)
 
        * fixincludes: Fix "hypot" prototype in NeXT math.h.
index 0943444185a2c3b00cbc93fa4d486dc38879af40..025da501a427ff9730e9ddd5f88f23feea46f596 100644 (file)
@@ -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;