* ira.c (ira): Use simple LRA algorithm when not optimizing.

From-SVN: r279550
This commit is contained in:
Eric Botcazou 2019-12-18 23:03:23 +00:00 committed by Eric Botcazou
parent d3769410c6
commit 11b8091fb3
2 changed files with 24 additions and 12 deletions

View File

@ -1,3 +1,7 @@
2019-12-18 Eric Botcazou <ebotcazou@adacore.com>
* ira.c (ira): Use simple LRA algorithm when not optimizing.
2019-12-18 Thomas Schwinge <thomas@codesourcery.com> 2019-12-18 Thomas Schwinge <thomas@codesourcery.com>
* gimplify.c (gimplify_omp_target_update): Elaborate 'exit data' * gimplify.c (gimplify_omp_target_update): Elaborate 'exit data'

View File

@ -5192,8 +5192,6 @@ 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 ();
@ -5207,18 +5205,28 @@ ira (FILE *f)
/* Perform target specific PIC register initialization. */ /* Perform target specific PIC register initialization. */
targetm.init_pic_reg (); targetm.init_pic_reg ();
ira_conflicts_p = optimize > 0; if (optimize)
{
ira_conflicts_p = true;
/* Determine the number of pseudos actually requiring coloring. */ /* Determine the number of pseudos actually requiring coloring. */
for (i = FIRST_PSEUDO_REGISTER; i < DF_REG_SIZE (df); i++) unsigned int num_used_regs = 0;
num_used_regs += !!(DF_REG_USE_COUNT (i) + DF_REG_DEF_COUNT (i)); for (unsigned int i = FIRST_PSEUDO_REGISTER; i < DF_REG_SIZE (df); i++)
if (DF_REG_DEF_COUNT (i) || DF_REG_USE_COUNT (i))
num_used_regs++;
/* 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
&& num_used_regs >= (1 << 26) / last_basic_block_for_fn (cfun)); && num_used_regs >= (1U << 26) / last_basic_block_for_fn (cfun);
}
else
{
ira_conflicts_p = false;
lra_simple_p = ira_use_lra_p;
}
if (lra_simple_p) if (lra_simple_p)
{ {