toplev.c (backend_init_target): Move init_emit_regs and init_regs to...

* toplev.c (backend_init_target): Move init_emit_regs and init_regs to...
	(backend_init) ... here; skip ira_init_once and backend_init_target.
	(target_reinit) ... and here; clear this_target_rtl->lang_dependent_initialized.
	(lang_dependent_init_target): Clear this_target_rtl->lang_dependent_initialized;
	break out rtl initialization to ...
	(initialize_rtl): ... here; call also backend_init_target and ira_init_once.
	* toplev.h (initialize_rtl): New function.
	* function.c: Include toplev.h
	(init_function_start): Call initialize_rtl.
	* rtl.h (target_rtl): Add target_specific_initialized,
	lang_dependent_initialized.

From-SVN: r212007
This commit is contained in:
Jan Hubicka 2014-06-26 04:28:37 +02:00 committed by Jan Hubicka
parent 3b89b26ef6
commit b9b5f43367
5 changed files with 66 additions and 13 deletions

View File

@ -1,3 +1,17 @@
2014-06-25 Jan Hubicka <hubicka@ucw.cz>
* toplev.c (backend_init_target): Move init_emit_regs and init_regs to...
(backend_init) ... here; skip ira_init_once and backend_init_target.
(target_reinit) ... and here; clear this_target_rtl->lang_dependent_initialized.
(lang_dependent_init_target): Clear this_target_rtl->lang_dependent_initialized;
break out rtl initialization to ...
(initialize_rtl): ... here; call also backend_init_target and ira_init_once.
* toplev.h (initialize_rtl): New function.
* function.c: Include toplev.h
(init_function_start): Call initialize_rtl.
* rtl.h (target_rtl): Add target_specific_initialized,
lang_dependent_initialized.
2014-06-25 Paul Gortmaker <paul.gortmaker@windriver.com>
Jakub Jelinek <jakub@redhat.com>

View File

@ -64,6 +64,7 @@ along with GCC; see the file COPYING3. If not see
#include "params.h"
#include "bb-reorder.h"
#include "shrink-wrap.h"
#include "toplev.h"
/* So we can assign to cfun in this file. */
#undef cfun
@ -4630,6 +4631,10 @@ init_function_start (tree subr)
set_cfun (DECL_STRUCT_FUNCTION (subr));
else
allocate_struct_function (subr, false);
/* Initialize backend, if needed. */
initialize_rtl ();
prepare_function_start ();
decide_function_section (subr);

View File

@ -2514,6 +2514,10 @@ struct GTY(()) target_rtl {
/* The default memory attributes for each mode. */
struct mem_attrs *x_mode_mem_attrs[(int) MAX_MACHINE_MODE];
/* Track if RTL has been initialized. */
bool target_specific_initialized;
bool lang_dependent_initialized;
};
extern GTY(()) struct target_rtl default_target_rtl;

View File

@ -1583,14 +1583,6 @@ backend_init_target (void)
/* Initialize alignment variables. */
init_alignments ();
/* This reinitializes hard_frame_pointer, and calls init_reg_modes_target()
to initialize reg_raw_mode[]. */
init_emit_regs ();
/* This invokes target hooks to set fixed_reg[] etc, which is
mode-dependent. */
init_regs ();
/* This depends on stack_pointer_rtx. */
init_fake_stack_mems ();
@ -1632,9 +1624,13 @@ backend_init (void)
init_varasm_once ();
save_register_info ();
/* Initialize the target-specific back end pieces. */
ira_init_once ();
backend_init_target ();
/* Middle end needs this initialization for default mem attributes
used by early calls to make_decl_rtl. */
init_emit_regs ();
/* Middle end needs this initialization for mode tables used to assign
modes to vector variables. */
init_regs ();
}
/* Initialize excess precision settings. */
@ -1686,6 +1682,31 @@ lang_dependent_init_target (void)
front end is initialized. It also depends on the HAVE_xxx macros
generated from the target machine description. */
init_optabs ();
this_target_rtl->lang_dependent_initialized = false;
}
/* Perform initializations that are lang-dependent or target-dependent.
but matters only for late optimizations and RTL generation. */
void
initialize_rtl (void)
{
static int initialized_once;
/* Initialization done just once per compilation, but delayed
till code generation. */
if (!initialized_once)
ira_init_once ();
initialized_once = true;
/* Target specific RTL backend initialization. */
if (!this_target_rtl->target_specific_initialized)
backend_init_target ();
this_target_rtl->target_specific_initialized = true;
if (this_target_rtl->lang_dependent_initialized)
return;
this_target_rtl->lang_dependent_initialized = true;
/* The following initialization functions need to generate rtl, so
provide a dummy function context for them. */
@ -1784,8 +1805,15 @@ target_reinit (void)
regno_reg_rtx = NULL;
}
/* Reinitialize RTL backend. */
backend_init_target ();
this_target_rtl->target_specific_initialized = false;
/* This initializes hard_frame_pointer, and calls init_reg_modes_target()
to initialize reg_raw_mode[]. */
init_emit_regs ();
/* This invokes target hooks to set fixed_reg[] etc, which is
mode-dependent. */
init_regs ();
/* Reinitialize lang-dependent parts. */
lang_dependent_init_target ();

View File

@ -77,4 +77,6 @@ extern bool set_src_pwd (const char *);
extern HOST_WIDE_INT get_random_seed (bool);
extern const char *set_random_seed (const char *);
extern void initialize_rtl (void);
#endif /* ! GCC_TOPLEV_H */