OSDN Git Service

* config/bfin/bfin.c (bfin_register_move_cost): Test for subsets of
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 2009 12:44:00 +0000 (12:44 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 2009 12:44:00 +0000 (12:44 +0000)
DREGS rather than comparing directly.  Remove code that tries to
account for latencies.

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

gcc/ChangeLog
gcc/config/bfin/bfin.c

index 39214fb..883f1b8 100644 (file)
@@ -5,6 +5,10 @@
        Remove special case testing for last insn of inner loops. Don't fail if
        the loop ends with a jump, emit an extra nop instead.
 
+       * config/bfin/bfin.c (bfin_register_move_cost): Test for subsets of
+       DREGS rather than comparing directly.  Remove code that tries to
+       account for latencies.
+
 2009-04-29  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/39941
index 43682a3..6a77c57 100644 (file)
@@ -2331,20 +2331,14 @@ bfin_register_move_cost (enum machine_mode mode,
                         enum reg_class class1, enum reg_class class2)
 {
   /* These need secondary reloads, so they're more expensive.  */
-  if ((class1 == CCREGS && class2 != DREGS)
-      || (class1 != DREGS && class2 == CCREGS))
+  if ((class1 == CCREGS && !reg_class_subset_p (class2, DREGS))
+      || (class2 == CCREGS && !reg_class_subset_p (class1, DREGS)))
     return 4;
 
   /* If optimizing for size, always prefer reg-reg over reg-memory moves.  */
   if (optimize_size)
     return 2;
 
-  /* There are some stalls involved when moving from a DREG to a different
-     class reg, and using the value in one of the following instructions.
-     Attempt to model this by slightly discouraging such moves.  */
-  if (class1 == DREGS && class2 != DREGS)
-    return 2 * 2;
-
   if (GET_MODE_CLASS (mode) == MODE_INT)
     {
       /* Discourage trying to use the accumulators.  */