From 19c708dc8316d80ca3611106fd989b317d55b968 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Fri, 12 Sep 2014 07:27:10 +0000 Subject: [PATCH] ira.h (ira_finish_once): Delete. gcc/ * ira.h (ira_finish_once): Delete. * ira-int.h (target_ira_int::~target_ira_int): Declare. (target_ira_int::free_ira_costs): Likewise. (target_ira_int::free_register_move_costs): Likewise. (ira_finish_costs_once): Delete. * ira.c (free_register_move_costs): Replace with... (target_ira_int::free_register_move_costs): ...this new function. (target_ira_int::~target_ira_int): Define. (ira_init): Call free_register_move_costs as a member function rather than a global function. (ira_finish_once): Delete. * ira-costs.c (free_ira_costs): Replace with... (target_ira_int::free_ira_costs): ...this new function. (ira_init_costs): Call free_ira_costs as a member function rather than a global function. (ira_finish_costs_once): Delete. * target-globals.c (target_globals::~target_globals): Call the target_ira_int destructor. * toplev.c: Include lra.h. (finalize): Call lra_finish_once rather than ira_finish_once. From-SVN: r215200 --- gcc/ChangeLog | 23 +++++++++++++++++++++++ gcc/ira-costs.c | 27 ++++++++++----------------- gcc/ira-int.h | 6 +++++- gcc/ira.c | 39 ++++++++++++++++++--------------------- gcc/ira.h | 1 - gcc/target-globals.c | 1 + gcc/toplev.c | 3 ++- 7 files changed, 59 insertions(+), 41 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ba4a0ddffe1..27e0b599aed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,26 @@ +2014-09-12 Richard Sandiford + + * ira.h (ira_finish_once): Delete. + * ira-int.h (target_ira_int::~target_ira_int): Declare. + (target_ira_int::free_ira_costs): Likewise. + (target_ira_int::free_register_move_costs): Likewise. + (ira_finish_costs_once): Delete. + * ira.c (free_register_move_costs): Replace with... + (target_ira_int::free_register_move_costs): ...this new function. + (target_ira_int::~target_ira_int): Define. + (ira_init): Call free_register_move_costs as a member function rather + than a global function. + (ira_finish_once): Delete. + * ira-costs.c (free_ira_costs): Replace with... + (target_ira_int::free_ira_costs): ...this new function. + (ira_init_costs): Call free_ira_costs as a member function rather + than a global function. + (ira_finish_costs_once): Delete. + * target-globals.c (target_globals::~target_globals): Call the + target_ira_int destructor. + * toplev.c: Include lra.h. + (finalize): Call lra_finish_once rather than ira_finish_once. + 2014-09-11 Jan Hubicka * common.opt (flto-odr-type-merging): New flag. diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c index 57239f5b19b..34da9a73ba3 100644 --- a/gcc/ira-costs.c +++ b/gcc/ira-costs.c @@ -2047,21 +2047,21 @@ ira_init_costs_once (void) } /* Free allocated temporary cost vectors. */ -static void -free_ira_costs (void) +void +target_ira_int::free_ira_costs () { int i; - free (init_cost); - init_cost = NULL; + free (x_init_cost); + x_init_cost = NULL; for (i = 0; i < MAX_RECOG_OPERANDS; i++) { - free (op_costs[i]); - free (this_op_costs[i]); - op_costs[i] = this_op_costs[i] = NULL; + free (x_op_costs[i]); + free (x_this_op_costs[i]); + x_op_costs[i] = x_this_op_costs[i] = NULL; } - free (temp_costs); - temp_costs = NULL; + free (x_temp_costs); + x_temp_costs = NULL; } /* This is called each time register related information is @@ -2071,7 +2071,7 @@ ira_init_costs (void) { int i; - free_ira_costs (); + this_target_ira_int->free_ira_costs (); max_struct_costs_size = sizeof (struct costs) + sizeof (int) * (ira_important_classes_num - 1); /* Don't use ira_allocate because vectors live through several IRA @@ -2088,13 +2088,6 @@ ira_init_costs (void) temp_costs = (struct costs *) xmalloc (max_struct_costs_size); } -/* Function called once at the end of compiler work. */ -void -ira_finish_costs_once (void) -{ - free_ira_costs (); -} - /* Common initialization function for ira_costs and diff --git a/gcc/ira-int.h b/gcc/ira-int.h index 2c82366edac..1db064193cd 100644 --- a/gcc/ira-int.h +++ b/gcc/ira-int.h @@ -770,6 +770,11 @@ minmax_set_iter_next (minmax_set_iterator *i) minmax_set_iter_next (&(ITER))) struct target_ira_int { + ~target_ira_int (); + + void free_ira_costs (); + void free_register_move_costs (); + /* Initialized once. It is a maximal possible size of the allocated struct costs. */ int x_max_struct_costs_size; @@ -1025,7 +1030,6 @@ extern void ira_destroy (void); /* ira-costs.c */ extern void ira_init_costs_once (void); extern void ira_init_costs (void); -extern void ira_finish_costs_once (void); extern void ira_costs (void); extern void ira_tune_allocno_costs (void); diff --git a/gcc/ira.c b/gcc/ira.c index 09b1f88b280..dc69a9c4307 100644 --- a/gcc/ira.c +++ b/gcc/ira.c @@ -1674,40 +1674,46 @@ ira_init_once (void) /* Free ira_max_register_move_cost, ira_may_move_in_cost and ira_may_move_out_cost for each mode. */ -static void -free_register_move_costs (void) +void +target_ira_int::free_register_move_costs (void) { int mode, i; /* Reset move_cost and friends, making sure we only free shared table entries once. */ for (mode = 0; mode < MAX_MACHINE_MODE; mode++) - if (ira_register_move_cost[mode]) + if (x_ira_register_move_cost[mode]) { for (i = 0; - i < mode && (ira_register_move_cost[i] - != ira_register_move_cost[mode]); + i < mode && (x_ira_register_move_cost[i] + != x_ira_register_move_cost[mode]); i++) ; if (i == mode) { - free (ira_register_move_cost[mode]); - free (ira_may_move_in_cost[mode]); - free (ira_may_move_out_cost[mode]); + free (x_ira_register_move_cost[mode]); + free (x_ira_may_move_in_cost[mode]); + free (x_ira_may_move_out_cost[mode]); } } - memset (ira_register_move_cost, 0, sizeof ira_register_move_cost); - memset (ira_may_move_in_cost, 0, sizeof ira_may_move_in_cost); - memset (ira_may_move_out_cost, 0, sizeof ira_may_move_out_cost); + memset (x_ira_register_move_cost, 0, sizeof x_ira_register_move_cost); + memset (x_ira_may_move_in_cost, 0, sizeof x_ira_may_move_in_cost); + memset (x_ira_may_move_out_cost, 0, sizeof x_ira_may_move_out_cost); last_mode_for_init_move_cost = -1; } +target_ira_int::~target_ira_int () +{ + free_ira_costs (); + free_register_move_costs (); +} + /* This is called every time when register related information is changed. */ void ira_init (void) { - free_register_move_costs (); + this_target_ira_int->free_register_move_costs (); setup_reg_mode_hard_regset (); setup_alloc_regs (flag_omit_frame_pointer != 0); setup_class_subset_and_memory_move_costs (); @@ -1719,15 +1725,6 @@ ira_init (void) ira_init_costs (); } -/* Function called once at the end of compiler work. */ -void -ira_finish_once (void) -{ - ira_finish_costs_once (); - free_register_move_costs (); - lra_finish_once (); -} - #define ira_prohibited_mode_move_regs_initialized_p \ (this_target_ira_int->x_ira_prohibited_mode_move_regs_initialized_p) diff --git a/gcc/ira.h b/gcc/ira.h index 66030d6f00b..1d1ec65a237 100644 --- a/gcc/ira.h +++ b/gcc/ira.h @@ -177,7 +177,6 @@ extern struct ira_reg_equiv_s *ira_reg_equiv; extern void ira_init_once (void); extern void ira_init (void); -extern void ira_finish_once (void); extern void ira_setup_eliminable_regset (void); extern rtx ira_eliminate_regs (rtx, enum machine_mode); extern void ira_set_pseudo_classes (bool, FILE *); diff --git a/gcc/target-globals.c b/gcc/target-globals.c index 5a9843f6bb9..43f9f4a0bb1 100644 --- a/gcc/target-globals.c +++ b/gcc/target-globals.c @@ -121,6 +121,7 @@ save_target_globals_default_opts () target_globals::~target_globals () { + ira_int->~target_ira_int (); /* default_target_globals points to static data so shouldn't be freed. */ if (this != &default_target_globals) { diff --git a/gcc/toplev.c b/gcc/toplev.c index 492a7ef58e5..0e626b34b8f 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see #include "params.h" #include "reload.h" #include "ira.h" +#include "lra.h" #include "dwarf2asm.h" #include "debug.h" #include "target.h" @@ -1887,7 +1888,7 @@ finalize (bool no_backend) g->get_passes ()->finish_optimization_passes (); - ira_finish_once (); + lra_finish_once (); } if (mem_report) -- 2.30.2