diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2014-02-25 20:34:44 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2014-02-25 20:34:44 +0000 |
commit | 88def6374c15e75e1a179b7a066811563d3c93e3 (patch) | |
tree | 71b4ad742f98532f60c9692fb44c11d65b6b35f1 /gcc/lra-assigns.c | |
parent | 6e6eaecc6ab7c461f13e7a76fa3ab85b721242e8 (diff) | |
download | gcc-88def6374c15e75e1a179b7a066811563d3c93e3.zip gcc-88def6374c15e75e1a179b7a066811563d3c93e3.tar.gz gcc-88def6374c15e75e1a179b7a066811563d3c93e3.tar.bz2 |
re PR rtl-optimization/60317 (find_hard_regno_for compile time hog in libvpx)
2014-02-25 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/60317
* params.def (PARAM_LRA_MAX_CONSIDERED_RELOAD_PSEUDOS): New.
* params.h (LRA_MAX_CONSIDERED_RELOAD_PSEUDOS): New.
* lra-assigns.c: Include params.h.
(spill_for): Use LRA_MAX_CONSIDERED_RELOAD_PSEUDOS as guard for
other reload pseudos considerations.
From-SVN: r208155
Diffstat (limited to 'gcc/lra-assigns.c')
-rw-r--r-- | gcc/lra-assigns.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/gcc/lra-assigns.c b/gcc/lra-assigns.c index 268edcc..f94ebe6 100644 --- a/gcc/lra-assigns.c +++ b/gcc/lra-assigns.c @@ -94,6 +94,7 @@ along with GCC; see the file COPYING3. If not see #include "df.h" #include "ira.h" #include "sparseset.h" +#include "params.h" #include "lra-int.h" /* Array containing corresponding values of function @@ -896,14 +897,16 @@ spill_for (int regno, bitmap spilled_pseudo_bitmap) } } n = 0; - EXECUTE_IF_SET_IN_SPARSESET (live_range_reload_inheritance_pseudos, - reload_regno) - if ((int) reload_regno != regno - && (ira_reg_classes_intersect_p - [rclass][regno_allocno_class_array[reload_regno]]) - && live_pseudos_reg_renumber[reload_regno] < 0 - && find_hard_regno_for (reload_regno, &cost, -1) < 0) - sorted_reload_pseudos[n++] = reload_regno; + if (sparseset_cardinality (live_range_reload_inheritance_pseudos) + <= LRA_MAX_CONSIDERED_RELOAD_PSEUDOS) + EXECUTE_IF_SET_IN_SPARSESET (live_range_reload_inheritance_pseudos, + reload_regno) + if ((int) reload_regno != regno + && (ira_reg_classes_intersect_p + [rclass][regno_allocno_class_array[reload_regno]]) + && live_pseudos_reg_renumber[reload_regno] < 0 + && find_hard_regno_for (reload_regno, &cost, -1) < 0) + sorted_reload_pseudos[n++] = reload_regno; EXECUTE_IF_SET_IN_BITMAP (&spill_pseudos_bitmap, 0, spill_regno, bi) { update_lives (spill_regno, true); |