aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2015-02-27 22:02:05 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2015-02-27 22:02:05 +0000
commitfb8a0e4094cffe6142efdd68a8fe28b911503b34 (patch)
treeae377d5c8ca1e5541cbd91a12715c6659a96ad26
parentb94097dc6f7ed9086e1c9577cbd4948173b0d847 (diff)
downloadgcc-fb8a0e4094cffe6142efdd68a8fe28b911503b34.zip
gcc-fb8a0e4094cffe6142efdd68a8fe28b911503b34.tar.gz
gcc-fb8a0e4094cffe6142efdd68a8fe28b911503b34.tar.bz2
re PR rtl-optimization/64317 (Ineffective allocation of PIC base register)
2015-02-27 Vladimir Makarov <vmakarov@redhat.com> PR target/64317 * params.def (PARAM_LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF): New. * params.h (LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF): New. * lra-constraints.c: Include "params.h". (EBB_PROBABILITY_CUTOFF): Use LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF. (lra_inheritance): Use '<' instead of '<=' for EBB_PROBABILITY_CUTOFF. * doc/invoke.texi (lra-inheritance-ebb-probability-cutoff): Document change. From-SVN: r221070
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/doc/invoke.texi8
-rw-r--r--gcc/lra-constraints.c6
-rw-r--r--gcc/params.def5
-rw-r--r--gcc/params.h2
5 files changed, 32 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0fe78df4..766556b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2015-02-27 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR target/64317
+ * params.def (PARAM_LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF): New.
+ * params.h (LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF): New.
+ * lra-constraints.c: Include "params.h".
+ (EBB_PROBABILITY_CUTOFF): Use
+ LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF.
+ (lra_inheritance): Use '<' instead of '<=' for
+ EBB_PROBABILITY_CUTOFF.
+ * doc/invoke.texi (lra-inheritance-ebb-probability-cutoff):
+ Document change.
+
2015-02-27 Martin Liska <mliska@suse.cz>
* ipa-icf.h (struct symbol_compare_hashmap_traits): Add missing
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index b07eed0..a87376e 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -10570,6 +10570,14 @@ by this parameter. The default value of the parameter is 2, which is
the minimal number of registers needed by typical instructions.
This value is the best found from numerous experiments.
+@item lra-inheritance-ebb-probability-cutoff
+LRA tries to reuse values reloaded in registers in subsequent insns.
+This optimization is called inheritance. EBB is used as a region to
+do this optimization. The parameter defines a minimal fall-through
+edge probability in percentage used to add BB to inheritance EBB in
+LRA. The default value of the parameter is 40. The value was chosen
+from numerous runs of SPEC2000 on x86-64.
+
@item loop-invariant-max-bbs-in-loop
Loop invariant motion can be very expensive, both in compilation time and
in amount of needed compile-time memory, with very large loops. Loops
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 827c453..0ddd842 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -154,6 +154,7 @@
#include "df.h"
#include "ira.h"
#include "rtl-error.h"
+#include "params.h"
#include "lra-int.h"
/* Value of LRA_CURR_RELOAD_NUM at the beginning of BB of the current
@@ -5694,7 +5695,8 @@ inherit_in_ebb (rtx_insn *head, rtx_insn *tail)
/* This value affects EBB forming. If probability of edge from EBB to
a BB is not greater than the following value, we don't add the BB
to EBB. */
-#define EBB_PROBABILITY_CUTOFF ((REG_BR_PROB_BASE * 50) / 100)
+#define EBB_PROBABILITY_CUTOFF \
+ ((REG_BR_PROB_BASE * LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF) / 100)
/* Current number of inheritance/split iteration. */
int lra_inheritance_iter;
@@ -5740,7 +5742,7 @@ lra_inheritance (void)
e = find_fallthru_edge (bb->succs);
if (! e)
break;
- if (e->probability <= EBB_PROBABILITY_CUTOFF)
+ if (e->probability < EBB_PROBABILITY_CUTOFF)
break;
bb = bb->next_bb;
}
diff --git a/gcc/params.def b/gcc/params.def
index 4d3b398..905c9e2 100644
--- a/gcc/params.def
+++ b/gcc/params.def
@@ -836,6 +836,11 @@ DEFPARAM (PARAM_LRA_MAX_CONSIDERED_RELOAD_PSEUDOS,
"The max number of reload pseudos which are considered during spilling a non-reload pseudo",
500, 0, 0)
+DEFPARAM (PARAM_LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF,
+ "lra-inheritance-ebb-probability-cutoff",
+ "Minimal fall-through edge probability in percentage used to add BB to inheritance EEB in LRA",
+ 40, 0, 100)
+
/* 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 2e50ff4..28d077f 100644
--- a/gcc/params.h
+++ b/gcc/params.h
@@ -202,6 +202,8 @@ extern void init_param_values (int *params);
PARAM_VALUE (PARAM_IRA_LOOP_RESERVED_REGS)
#define LRA_MAX_CONSIDERED_RELOAD_PSEUDOS \
PARAM_VALUE (PARAM_LRA_MAX_CONSIDERED_RELOAD_PSEUDOS)
+#define LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF \
+ PARAM_VALUE (PARAM_LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF)
#define SWITCH_CONVERSION_BRANCH_RATIO \
PARAM_VALUE (PARAM_SWITCH_CONVERSION_BRANCH_RATIO)
#define LOOP_INVARIANT_MAX_BBS_IN_LOOP \