diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2015-02-27 22:02:05 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2015-02-27 22:02:05 +0000 |
commit | fb8a0e4094cffe6142efdd68a8fe28b911503b34 (patch) | |
tree | ae377d5c8ca1e5541cbd91a12715c6659a96ad26 | |
parent | b94097dc6f7ed9086e1c9577cbd4948173b0d847 (diff) | |
download | gcc-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/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 8 | ||||
-rw-r--r-- | gcc/lra-constraints.c | 6 | ||||
-rw-r--r-- | gcc/params.def | 5 | ||||
-rw-r--r-- | gcc/params.h | 2 |
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 \ |