OSDN Git Service

Fix performance problem on SH with unnecessary move instructions.
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 8 Mar 1999 17:50:37 +0000 (17:50 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 8 Mar 1999 17:50:37 +0000 (17:50 +0000)
* local-alloc.c (combine_regs): Don't combine if we have a hard reg
for which CLASS_LIKELY_SPILLED_P is true.

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

gcc/ChangeLog
gcc/local-alloc.c

index fc6d1ef..4f83b46 100644 (file)
@@ -1,5 +1,8 @@
 Mon Mar  8 16:04:44 1999  Jim Wilson  <wilson@cygnus.com>
 
+       * local-alloc.c (combine_regs): Don't combine if we have a hard reg
+       for which CLASS_LIKELY_SPILLED_P is true.
+
        * unroll.c (loop_iterations): Only call loop_find_equiv_value if we
        have a REG or SUBREG.
 
index ea97f33..d3dde6b 100644 (file)
@@ -1648,6 +1648,11 @@ combine_regs (usedreg, setreg, may_save_copy, insn_number, insn, already_dead)
       || ureg == sreg
       /* Don't try to connect two different hardware registers.  */
       || (ureg < FIRST_PSEUDO_REGISTER && sreg < FIRST_PSEUDO_REGISTER)
+      /* Don't use a hard reg that might be spilled.  */
+      || (ureg < FIRST_PSEUDO_REGISTER
+         && CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (ureg)))
+      || (sreg < FIRST_PSEUDO_REGISTER
+         && CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (sreg)))
       /* Don't connect two different machine modes if they have different
         implications as to which registers may be used.  */
       || !MODES_TIEABLE_P (GET_MODE (usedreg), GET_MODE (setreg)))