OSDN Git Service

2011-08-09 Vladimir Makarov <vmakarov@redhat.com>
authorvmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Aug 2011 14:35:21 +0000 (14:35 +0000)
committervmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Aug 2011 14:35:21 +0000 (14:35 +0000)
PR target/50026
Revert:
PR rtl-optimization/49990
* ira-costs.c (print_allocno_costs, print_pseudo_costs): Don't
ignore classes which can not change mode.
(find_costs_and_classes): Ditto.

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

gcc/ChangeLog
gcc/ira-costs.c

index 6adde4a..24883ea 100644 (file)
@@ -1,3 +1,12 @@
+2011-08-09  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/50026
+       Revert:
+       PR rtl-optimization/49990
+       * ira-costs.c (print_allocno_costs, print_pseudo_costs): Don't
+       ignore classes which can not change mode.
+       (find_costs_and_classes): Ditto.
+
 2011-08-09  Richard Guenther  <rguenther@suse.de>
 
        * tree-vrp.c (zero_nonzero_bits_from_vr): Also return precise
index 39cd432..39ef33a 100644 (file)
@@ -1367,7 +1367,11 @@ print_allocno_costs (FILE *f)
       for (k = 0; k < cost_classes_ptr->num; k++)
        {
          rclass = cost_classes[k];
-         if (contains_reg_of_mode[rclass][PSEUDO_REGNO_MODE (regno)])
+         if (contains_reg_of_mode[rclass][PSEUDO_REGNO_MODE (regno)]
+#ifdef CANNOT_CHANGE_MODE_CLASS
+             && ! invalid_mode_change_p (regno, (enum reg_class) rclass)
+#endif
+             )
            {
              fprintf (f, " %s:%d", reg_class_names[rclass],
                       COSTS (costs, i)->cost[k]);
@@ -1405,7 +1409,11 @@ print_pseudo_costs (FILE *f)
       for (k = 0; k < cost_classes_ptr->num; k++)
        {
          rclass = cost_classes[k];
-         if (contains_reg_of_mode[rclass][PSEUDO_REGNO_MODE (regno)])
+         if (contains_reg_of_mode[rclass][PSEUDO_REGNO_MODE (regno)]
+#ifdef CANNOT_CHANGE_MODE_CLASS
+             && ! invalid_mode_change_p (regno, (enum reg_class) rclass)
+#endif
+             )
            fprintf (f, " %s:%d", reg_class_names[rclass],
                     COSTS (costs, regno)->cost[k]);
        }
@@ -1642,7 +1650,11 @@ find_costs_and_classes (FILE *dump_file)
              rclass = cost_classes[k];
              /* Ignore classes that are too small or invalid for this
                 operand.  */
-             if (! contains_reg_of_mode[rclass][PSEUDO_REGNO_MODE (i)])
+             if (! contains_reg_of_mode[rclass][PSEUDO_REGNO_MODE (i)]
+#ifdef CANNOT_CHANGE_MODE_CLASS
+                 || invalid_mode_change_p (i, (enum reg_class) rclass)
+#endif
+                 )
                continue;
              if (i_costs[k] < best_cost)
                {
@@ -1713,7 +1725,11 @@ find_costs_and_classes (FILE *dump_file)
                        continue;
                      /* Ignore classes that are too small or invalid
                         for this operand.  */
-                     if (! contains_reg_of_mode[rclass][PSEUDO_REGNO_MODE (i)])
+                     if (! contains_reg_of_mode[rclass][PSEUDO_REGNO_MODE (i)]
+#ifdef CANNOT_CHANGE_MODE_CLASS
+                         || invalid_mode_change_p (i, (enum reg_class) rclass)
+#endif
+                         )
                        ;
                      else if (total_a_costs[k] < best_cost)
                        {