mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-08 06:40:25 +08:00
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:
parent
3b89b26ef6
commit
b9b5f43367
@ -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>
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
54
gcc/toplev.c
54
gcc/toplev.c
@ -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 ();
|
||||
|
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user