Reenable combination of hard regs unless CLASS_LIKELY_SPILLED_P.
authorDale Johannesen <dalej@apple.com>
Thu, 16 May 2002 21:30:48 +0000 (21:30 +0000)
committerDale Johannesen <dalej@gcc.gnu.org>
Thu, 16 May 2002 21:30:48 +0000 (21:30 +0000)
From-SVN: r53531

gcc/ChangeLog
gcc/combine.c

index a9b68cfe3ee1de4f08fccc5e2d5e18fb4406a792..43b6a8c6d6ec6e0a8813291f53a531ba432bb401 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 10587fda84e68f298ceee012eaa9b0408e682179..aaf1bcf3e26b7967289d814629b0d9f268341b76 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;