Re-apply this patch:
authorJ"orn Rennecke <joern.rennecke@superh.com>
Wed, 16 Apr 2003 17:41:10 +0000 (17:41 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Wed, 16 Apr 2003 17:41:10 +0000 (18:41 +0100)
2002-05-16  Dale Johannesen  <dalej@apple.com>
  * combine.c (cant_combine_insn_p):  Reenable combinations
  involving hard regs unless CLASS_LIKELY_SPILLED_P.

From-SVN: r65689

gcc/ChangeLog
gcc/combine.c

index 6d31695eef5821af87733ff41054e5884c6eea3d..6fd841d902a59ca49bafdfe7eee756d8a2213d0c 100644 (file)
@@ -1,3 +1,11 @@
+2003-04-16  J"orn Rennecke <joern.rennecke@superh.com>
+
+       Re-apply this patch:
+
+       2002-05-16  Dale Johannesen  <dalej@apple.com>
+         * combine.c (cant_combine_insn_p):  Reenable combinations
+         involving hard regs unless CLASS_LIKELY_SPILLED_P.
+
 2003-04-16  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
        PR/10271
index ed98db217ebb9f45718e6c0154580eca689ef419..f7c98526833e23f11bb7f2d6123a34dc8d375dd1 100644 (file)
@@ -1435,10 +1435,10 @@ cant_combine_insn_p (insn)
   if (! INSN_P (insn))
     return 1;
 
-  /* Never combine loads and stores involving hard regs.  The register
-     allocator can usually handle such reg-reg moves by tying.  If we allow
-     the combiner to make substitutions of hard regs, we risk aborting in
-     reload on machines that have SMALL_REGISTER_CLASSES.
+  /* Never combine loads and stores involving hard regs that are likely
+     to be spilled.  The register allocator can usually handle such
+     reg-reg moves by tying.  If we allow the combiner to make 
+     substitutions of likely-spilled regs, we may abort in reload.
      As an exception, we allow combinations involving fixed regs; these are
      not available to the register allocator so there's no risk involved.  */
 
@@ -1453,9 +1453,11 @@ cant_combine_insn_p (insn)
     dest = SUBREG_REG (dest);
   if (REG_P (src) && REG_P (dest)
       && ((REGNO (src) < FIRST_PSEUDO_REGISTER
-          && ! fixed_regs[REGNO (src)])
+          && ! fixed_regs[REGNO (src)]
+          && CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (REGNO (src))))
          || (REGNO (dest) < FIRST_PSEUDO_REGISTER
-             && ! fixed_regs[REGNO (dest)])))
+             && ! fixed_regs[REGNO (dest)]
+             && CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (REGNO (dest))))))
     return 1;
 
   return 0;