diff options
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/ira-costs.c | 42 | ||||
-rw-r--r-- | gcc/ira-int.h | 20 |
3 files changed, 47 insertions, 25 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 71ed99b1dce..28e2273a2d6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2010-07-12 Richard Sandiford <rdsandiford@googlemail.com> + * ira-int.h (target_ira_int): Add x_max_struct_costs_size, x_init_cost, + x_temp_costs, x_op_costs, x_this_op_costs and x_cost_classes. + * ira-costs.c (max_struct_costs_size, init_cost, temp_costs, op_costs) + (this_op_costs, costs_classes): Redefine as macros. + (record_reg_classes): Don't take op_costs as a parameter. + (record_operand_costs): Likewise. Update calls to record_reg_classes. + (scan_one_insn): Update call to record_operand_costs. + +2010-07-12 Richard Sandiford <rdsandiford@googlemail.com> + * Makefile.in (target-globals.o): Depend on $(IRA_INT_H). * ira-int.h (ira_max_nregs, ira_important_class_nums): Delete. (target_ira_int): New structure. diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c index dd3be9a91ef..24e8393dd0b 100644 --- a/gcc/ira-costs.c +++ b/gcc/ira-costs.c @@ -68,20 +68,18 @@ struct costs int cost[1]; }; -/* Initialized once. It is a maximal possible size of the allocated - struct costs. */ -static int max_struct_costs_size; - -/* Allocated and initialized once, and used to initialize cost values - for each insn. */ -static struct costs *init_cost; - -/* Allocated once, and used for temporary purposes. */ -static struct costs *temp_costs; - -/* Allocated once, and used for the cost calculation. */ -static struct costs *op_costs[MAX_RECOG_OPERANDS]; -static struct costs *this_op_costs[MAX_RECOG_OPERANDS]; +#define max_struct_costs_size \ + (this_target_ira_int->x_max_struct_costs_size) +#define init_cost \ + (this_target_ira_int->x_init_cost) +#define temp_costs \ + (this_target_ira_int->x_temp_costs) +#define op_costs \ + (this_target_ira_int->x_op_costs) +#define this_op_costs \ + (this_target_ira_int->x_this_op_costs) +#define cost_classes \ + (this_target_ira_int->x_cost_classes) /* Costs of each class for each allocno or pseudo. */ static struct costs *costs; @@ -89,11 +87,6 @@ static struct costs *costs; /* Accumulated costs of each class for each allocno. */ static struct costs *total_allocno_costs; -/* Classes used for cost calculation. They may be different on - different iterations of the cost calculations or in different - optimization modes. */ -static enum reg_class *cost_classes; - /* The size of the previous array. */ static int cost_classes_num; @@ -210,8 +203,7 @@ copy_cost (rtx x, enum machine_mode mode, enum reg_class rclass, bool to_p, static void record_reg_classes (int n_alts, int n_ops, rtx *ops, enum machine_mode *modes, const char **constraints, - rtx insn, struct costs **op_costs, - enum reg_class *pref) + rtx insn, enum reg_class *pref) { int alt; int i, j, k; @@ -945,7 +937,7 @@ record_address_regs (enum machine_mode mode, rtx x, int context, /* Calculate the costs of insn operands. */ static void -record_operand_costs (rtx insn, struct costs **op_costs, enum reg_class *pref) +record_operand_costs (rtx insn, enum reg_class *pref) { const char *constraints[MAX_RECOG_OPERANDS]; enum machine_mode modes[MAX_RECOG_OPERANDS]; @@ -998,11 +990,11 @@ record_operand_costs (rtx insn, struct costs **op_costs, enum reg_class *pref) xconstraints[i+1] = constraints[i]; record_reg_classes (recog_data.n_alternatives, recog_data.n_operands, recog_data.operand, modes, - xconstraints, insn, op_costs, pref); + xconstraints, insn, pref); } record_reg_classes (recog_data.n_alternatives, recog_data.n_operands, recog_data.operand, modes, - constraints, insn, op_costs, pref); + constraints, insn, pref); } @@ -1047,7 +1039,7 @@ scan_one_insn (rtx insn) 0, MEM, SCRATCH, frequency * 2); } - record_operand_costs (insn, op_costs, pref); + record_operand_costs (insn, pref); /* Now add the cost for each operand to the total costs for its allocno. */ diff --git a/gcc/ira-int.h b/gcc/ira-int.h index 8c5377065a6..f32c22bb1ca 100644 --- a/gcc/ira-int.h +++ b/gcc/ira-int.h @@ -715,6 +715,26 @@ minmax_set_iter_next (minmax_set_iterator *i) minmax_set_iter_next (&(ITER))) struct target_ira_int { + /* Initialized once. It is a maximal possible size of the allocated + struct costs. */ + int x_max_struct_costs_size; + + /* Allocated and initialized once, and used to initialize cost values + for each insn. */ + struct costs *x_init_cost; + + /* Allocated once, and used for temporary purposes. */ + struct costs *x_temp_costs; + + /* Allocated once, and used for the cost calculation. */ + struct costs *x_op_costs[MAX_RECOG_OPERANDS]; + struct costs *x_this_op_costs[MAX_RECOG_OPERANDS]; + + /* Classes used for cost calculation. They may be different on + different iterations of the cost calculations or in different + optimization modes. */ + enum reg_class *x_cost_classes; + /* Hard registers that can not be used for the register allocator for all functions of the current compilation unit. */ HARD_REG_SET x_no_unit_alloc_regs; |