Commit b9b5f433 by Jan Hubicka Committed by Jan Hubicka

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
parent 3b89b26e
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> 2014-06-25 Paul Gortmaker <paul.gortmaker@windriver.com>
Jakub Jelinek <jakub@redhat.com> Jakub Jelinek <jakub@redhat.com>
......
...@@ -64,6 +64,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -64,6 +64,7 @@ along with GCC; see the file COPYING3. If not see
#include "params.h" #include "params.h"
#include "bb-reorder.h" #include "bb-reorder.h"
#include "shrink-wrap.h" #include "shrink-wrap.h"
#include "toplev.h"
/* So we can assign to cfun in this file. */ /* So we can assign to cfun in this file. */
#undef cfun #undef cfun
...@@ -4630,6 +4631,10 @@ init_function_start (tree subr) ...@@ -4630,6 +4631,10 @@ init_function_start (tree subr)
set_cfun (DECL_STRUCT_FUNCTION (subr)); set_cfun (DECL_STRUCT_FUNCTION (subr));
else else
allocate_struct_function (subr, false); allocate_struct_function (subr, false);
/* Initialize backend, if needed. */
initialize_rtl ();
prepare_function_start (); prepare_function_start ();
decide_function_section (subr); decide_function_section (subr);
......
...@@ -2514,6 +2514,10 @@ struct GTY(()) target_rtl { ...@@ -2514,6 +2514,10 @@ struct GTY(()) target_rtl {
/* The default memory attributes for each mode. */ /* The default memory attributes for each mode. */
struct mem_attrs *x_mode_mem_attrs[(int) MAX_MACHINE_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; extern GTY(()) struct target_rtl default_target_rtl;
......
...@@ -1583,14 +1583,6 @@ backend_init_target (void) ...@@ -1583,14 +1583,6 @@ backend_init_target (void)
/* Initialize alignment variables. */ /* Initialize alignment variables. */
init_alignments (); 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. */ /* This depends on stack_pointer_rtx. */
init_fake_stack_mems (); init_fake_stack_mems ();
...@@ -1632,9 +1624,13 @@ backend_init (void) ...@@ -1632,9 +1624,13 @@ backend_init (void)
init_varasm_once (); init_varasm_once ();
save_register_info (); save_register_info ();
/* Initialize the target-specific back end pieces. */ /* Middle end needs this initialization for default mem attributes
ira_init_once (); used by early calls to make_decl_rtl. */
backend_init_target (); init_emit_regs ();
/* Middle end needs this initialization for mode tables used to assign
modes to vector variables. */
init_regs ();
} }
/* Initialize excess precision settings. */ /* Initialize excess precision settings. */
...@@ -1686,6 +1682,31 @@ lang_dependent_init_target (void) ...@@ -1686,6 +1682,31 @@ lang_dependent_init_target (void)
front end is initialized. It also depends on the HAVE_xxx macros front end is initialized. It also depends on the HAVE_xxx macros
generated from the target machine description. */ generated from the target machine description. */
init_optabs (); 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 /* The following initialization functions need to generate rtl, so
provide a dummy function context for them. */ provide a dummy function context for them. */
...@@ -1784,8 +1805,15 @@ target_reinit (void) ...@@ -1784,8 +1805,15 @@ target_reinit (void)
regno_reg_rtx = NULL; regno_reg_rtx = NULL;
} }
/* Reinitialize RTL backend. */ this_target_rtl->target_specific_initialized = false;
backend_init_target ();
/* 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. */ /* Reinitialize lang-dependent parts. */
lang_dependent_init_target (); lang_dependent_init_target ();
......
...@@ -77,4 +77,6 @@ extern bool set_src_pwd (const char *); ...@@ -77,4 +77,6 @@ extern bool set_src_pwd (const char *);
extern HOST_WIDE_INT get_random_seed (bool); extern HOST_WIDE_INT get_random_seed (bool);
extern const char *set_random_seed (const char *); extern const char *set_random_seed (const char *);
extern void initialize_rtl (void);
#endif /* ! GCC_TOPLEV_H */ #endif /* ! GCC_TOPLEV_H */
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