OSDN Git Service

Re-apply this patch:
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Apr 2003 17:41:10 +0000 (17:41 +0000)
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Apr 2003 17:41:10 +0000 (17:41 +0000)
2002-05-16  Dale Johannesen  <dalej@apple.com>
  * combine.c (cant_combine_insn_p):  Reenable combinations
  involving hard regs unless CLASS_LIKELY_SPILLED_P.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65689 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/combine.c

index 6d31695..6fd841d 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 ed98db2..f7c9852 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;