From 394b15208dc632c744257ca1ea628568d6811d42 Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Tue, 9 Aug 2011 14:35:21 +0000 Subject: [PATCH] re PR rtl-optimization/50026 (Revision 177575 caused many test failures) 2011-08-09 Vladimir Makarov 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 --- gcc/ChangeLog | 9 +++++++++ gcc/ira-costs.c | 24 ++++++++++++++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6adde4a9c5b..24883ea3fb3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2011-08-09 Vladimir Makarov + + 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 * tree-vrp.c (zero_nonzero_bits_from_vr): Also return precise diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c index 39cd432ce09..39ef33a541c 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) { -- 2.30.2