OSDN Git Service

Reenable combination of hard regs unless CLASS_LIKELY_SPILLED_P.
authordalej <dalej@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 16 May 2002 21:30:48 +0000 (21:30 +0000)
committerdalej <dalej@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 16 May 2002 21:30:48 +0000 (21:30 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@53531 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/combine.c

index a9b68cf..43b6a8c 100644 (file)
@@ -1,3 +1,8 @@
+2002-05-16  Dale Johannesen  <dalej@apple.com>
+
+       * combine.c (cant_combine_insn_p):  Reenable combinations
+       involving hard regs unless CLASS_LIKELY_SPILLED_P.
+
 2002-05-16  Neil Booth  <neil@daikokuya.demon.co.uk>
 
        * c-common.c (cb_register_builtins): Handle more built-ins
index 10587fd..aaf1bcf 100644 (file)
@@ -1459,10 +1459,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.  */
 
@@ -1477,9 +1477,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;