Hi,
ira_use_lra_p is a global variable use in ira as well as
backend_init_target ().
It's fine to be used in IRA as it's will be initialized at the beginning
of ira pass.
However, early in backend_init_target (), this variable may not be
initialized yet. There is a check in backend_init_target ():
'''
if (!ira_use_lra_p)
init_reload ();
'''
In this case, init_reload () will always be called if ira_use_lra_p is
not initialized.
ira_init_once () is a better place for the initialization.
It's called early in initialize_rtl (), just before
backend_init_target ().
And as the name suggests, it's called once to initialize function
independent data structure.
aarch64-none-elf regression test Okay, x86-64-linux bootstrap Okay.
Regards,
Renlin
gcc/ChangeLog:
2016-09-21 Renlin Li <renlin...@arm.com>
* ira.c (ira): Move ira_use_lra_p initialization code to ...
(ira_init_once): Here.
diff --git a/gcc/ira.c b/gcc/ira.c
index f8a59e3..9e7ba52 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -1665,6 +1665,8 @@ ira_init_once (void)
{
ira_init_costs_once ();
lra_init_once ();
+
+ ira_use_lra_p = targetm.lra_p ();
}
/* Free ira_max_register_move_cost, ira_may_move_in_cost and
@@ -5082,7 +5084,6 @@ ira (FILE *f)
ira_conflicts_p = optimize > 0;
- ira_use_lra_p = targetm.lra_p ();
/* 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
use simplified and faster algorithms in LRA. */