Hi Guys,

  I am applying the patch below to fix a bug with the
  rx_memory_move_cost function.  The problem was that the costs are
  meant to be relative to the cost of moving a value between registers,
  but the existing definition was making stores cheaper than moves, and
  loads the same cost as moves.  Thus gcc was sometimes choosing to store
  values in memory when actually it was better to keep them in memory.

  The patch fixes the problem by adding in the register move cost to the
  memory move cost.  It also removes the call to
  memory_move_secondary_cost since there is no secondary cost.

Cheers
  Nick

gcc/ChangeLog
2011-05-17  Nick Clifton  <ni...@redhat.com>

        * config/rx/rx.c (rx_memory_move_cost): Include cost of register
        moves.

Index: gcc/config/rx/rx.c
===================================================================
--- gcc/config/rx/rx.c  (revision 173815)
+++ gcc/config/rx/rx.c  (working copy)
@@ -2638,7 +2638,7 @@
 static int
 rx_memory_move_cost (enum machine_mode mode, reg_class_t regclass, bool in)
 {
-  return (in ? 2 : 0) + memory_move_secondary_cost (mode, regclass, in);
+  return (in ? 2 : 0) + REGISTER_MOVE_COST (mode, regclass, regclass);
 }
 
 /* Convert a CC_MODE to the set of flags that it represents.  */
  

Reply via email to