Commit 891f31f9 by Andreas Krebbel Committed by Andreas Krebbel

re PR rtl-optimization/88751 (Performance regression reload vs lra)

Fix PR88751

This patch implements a small improvement for the heuristic in lra
which decides when it has to activate the simpler register allocation
algorithm.

gcc/ChangeLog:

2019-06-06  Andreas Krebbel  <krebbel@linux.ibm.com>

	PR rtl-optimization/88751
	* ira.c (ira): Use the number of the actually referenced registers
	when calculating the threshold.

From-SVN: r271996
parent a96ed9f7
2019-06-06 Andreas Krebbel <krebbel@linux.ibm.com>
PR rtl-optimization/88751
* ira.c (ira): Use the number of the actually referenced registers
when calculating the threshold.
2019-06-06 Jakub Jelinek <jakub@redhat.com> 2019-06-06 Jakub Jelinek <jakub@redhat.com>
* configure: Regenerate. * configure: Regenerate.
......
...@@ -5198,6 +5198,8 @@ ira (FILE *f) ...@@ -5198,6 +5198,8 @@ ira (FILE *f)
int ira_max_point_before_emit; int ira_max_point_before_emit;
bool saved_flag_caller_saves = flag_caller_saves; bool saved_flag_caller_saves = flag_caller_saves;
enum ira_region saved_flag_ira_region = flag_ira_region; enum ira_region saved_flag_ira_region = flag_ira_region;
unsigned int i;
int num_used_regs = 0;
clear_bb_flags (); clear_bb_flags ();
...@@ -5213,12 +5215,17 @@ ira (FILE *f) ...@@ -5213,12 +5215,17 @@ ira (FILE *f)
ira_conflicts_p = optimize > 0; ira_conflicts_p = optimize > 0;
/* Determine the number of pseudos actually requiring coloring. */
for (i = FIRST_PSEUDO_REGISTER; i < DF_REG_SIZE (df); i++)
num_used_regs += !!(DF_REG_USE_COUNT (i) + DF_REG_DEF_COUNT (i));
/* If there are too many pseudos and/or basic blocks (e.g. 10K /* If there are too many pseudos and/or basic blocks (e.g. 10K
pseudos and 10K blocks or 100K pseudos and 1K blocks), we will pseudos and 10K blocks or 100K pseudos and 1K blocks), we will
use simplified and faster algorithms in LRA. */ use simplified and faster algorithms in LRA. */
lra_simple_p lra_simple_p
= (ira_use_lra_p = (ira_use_lra_p
&& max_reg_num () >= (1 << 26) / last_basic_block_for_fn (cfun)); && num_used_regs >= (1 << 26) / last_basic_block_for_fn (cfun));
if (lra_simple_p) if (lra_simple_p)
{ {
/* It permits to skip live range splitting in LRA. */ /* It permits to skip live range splitting in LRA. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment