aboutsummaryrefslogtreecommitdiff
path: root/gcc/ira-costs.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2011-08-09 14:35:21 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2011-08-09 14:35:21 +0000
commit394b15208dc632c744257ca1ea628568d6811d42 (patch)
tree02c89d121a3f84c19b723fc49907f254bf6b1ea1 /gcc/ira-costs.c
parent3cb6e5bd17614aa4e87619cb00895985df3d006b (diff)
downloadgcc-394b15208dc632c744257ca1ea628568d6811d42.zip
gcc-394b15208dc632c744257ca1ea628568d6811d42.tar.gz
gcc-394b15208dc632c744257ca1ea628568d6811d42.tar.bz2
re PR rtl-optimization/50026 (Revision 177575 caused many test failures)
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. From-SVN: r177599
Diffstat (limited to 'gcc/ira-costs.c')
-rw-r--r--gcc/ira-costs.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c
index 39cd432..39ef33a 100644
--- a/gcc/ira-costs.c
+++ b/gcc/ira-costs.c
@@ -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)
{