aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2014-02-25 20:34:44 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2014-02-25 20:34:44 +0000
commit88def6374c15e75e1a179b7a066811563d3c93e3 (patch)
tree71b4ad742f98532f60c9692fb44c11d65b6b35f1 /gcc
parent6e6eaecc6ab7c461f13e7a76fa3ab85b721242e8 (diff)
downloadgcc-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')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/lra-assigns.c19
-rw-r--r--gcc/params.def5
-rw-r--r--gcc/params.h2
4 files changed, 27 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 32a74a7..616d8ec 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+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.
+
2014-02-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* config/rs6000/vector.md (*vector_unordered<mode>): Change split
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);
diff --git a/gcc/params.def b/gcc/params.def
index ad63a37..dd2e2cd 100644
--- a/gcc/params.def
+++ b/gcc/params.def
@@ -821,6 +821,11 @@ DEFPARAM (PARAM_IRA_LOOP_RESERVED_REGS,
"The number of registers in each class kept unused by loop invariant motion",
2, 0, 0)
+DEFPARAM (PARAM_LRA_MAX_CONSIDERED_RELOAD_PSEUDOS,
+ "lra-max-considered-reload-pseudos",
+ "The max number of reload pseudos which are considered during spilling a non-reload pseudo",
+ 500, 0, 0)
+
/* Switch initialization conversion will refuse to create arrays that are
bigger than this parameter times the number of switch branches. */
diff --git a/gcc/params.h b/gcc/params.h
index 64f3a0f..0d6daa2 100644
--- a/gcc/params.h
+++ b/gcc/params.h
@@ -196,6 +196,8 @@ extern void init_param_values (int *params);
PARAM_VALUE (PARAM_IRA_MAX_CONFLICT_TABLE_SIZE)
#define IRA_LOOP_RESERVED_REGS \
PARAM_VALUE (PARAM_IRA_LOOP_RESERVED_REGS)
+#define LRA_MAX_CONSIDERED_RELOAD_PSEUDOS \
+ PARAM_VALUE (PARAM_LRA_MAX_CONSIDERED_RELOAD_PSEUDOS)
#define SWITCH_CONVERSION_BRANCH_RATIO \
PARAM_VALUE (PARAM_SWITCH_CONVERSION_BRANCH_RATIO)
#define LOOP_INVARIANT_MAX_BBS_IN_LOOP \