diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2011-08-09 14:35:21 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2011-08-09 14:35:21 +0000 |
commit | 394b15208dc632c744257ca1ea628568d6811d42 (patch) | |
tree | 02c89d121a3f84c19b723fc49907f254bf6b1ea1 /gcc/ira-costs.c | |
parent | 3cb6e5bd17614aa4e87619cb00895985df3d006b (diff) | |
download | gcc-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.c | 24 |
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) { |