Commit 5d86f5f9 by David Malcolm Committed by David Malcolm

reload: Use rtx_insn (also touches caller-save.c and config/arc/arc)

gcc/
	* reload.h (struct insn_chain): Strengthen field "insn" from rtx
	to rtx_insn *.
	(find_reloads): Likewise for param 1.
	(subst_reloads): Likewise for sole param.
	(find_equiv_reg): Likwise for param 2.
	(regno_clobbered_p): Likwise for param 2.
	(reload): Likewise for param 1.

	* caller-save.c (save_call_clobbered_regs): Strengthen local
	"insn" from rtx to rtx_insn *.
	(insert_one_insn): Likewise for local "insn".

	* reload.c (this_insn): Likewise for this global.
	(find_reloads): Likewise for param "insn".
	(find_reloads_toplev): Likewise.
	(find_reloads_address): Likewise.
	(subst_reg_equivs): Likewise.
	(update_auto_inc_notes): Likewise.
	(find_reloads_address_1): Likewise.
	(find_reloads_subreg_address): Likewise.
	(subst_reloads): Likewise.
	(find_equiv_reg): Likewise, also for local "p".
	(regno_clobbered_p): Likewise for param "insn".

	* reload1.c (reg_reloaded_insn): Likewise for the elements of this
	array.
	(spill_reg_store): Likewise for the elements of this array.
	(remove_init_insns): Likewise for local "equiv_insn".
	(will_delete_init_insn_p): Likewise for param "insn".
	(reload): Likewise for param ""first" and local "insn".
	(calculate_needs_all_insns): Strengthen local "insn" from rtx to
	rtx_insn *.
	(calculate_elim_costs_all_insns): Likewise.
	(delete_caller_save_insns): Likewise.
	(spill_failure): Likewise for param "insn".
	(delete_dead_insn): Likewise.
	(set_label_offsets): Likewise.
	(eliminate_regs_in_insn): Likewise, also for locals "base_insn" and
	"prev_insn".
	(elimination_costs_in_insn): Likewise for param "insn".
	(set_initial_eh_label_offset): Replace use of NULL_RTX with NULL
	when referring to an insn.
	(set_initial_label_offsets): Likewise.
	(set_offsets_for_label): Strengthen param "insn" from rtx to
	rtx_insn *.
	(init_eliminable_invariants): Likewise for param "first" and local
	"insn".
	(fixup_eh_region_note): Likewise for param "insn".
	(reload_as_needed): Likewise for locals "prev", "insn",
	"old_next", "old_prev", "next".
	(gen_reload_chain_without_interm_reg_p): Likewise for locals "insn",
	"last".
	(reload_inheritance_insn): Strengthen elements of this array from
	rtx to rtx_insn *.
	(failed_reload): Likewise for param "insn".
	(choose_reload_regs): Likewise for local "insn".  Replace use of
	NULL_RTX with NULL when referring to an insn.
	(input_reload_insns): Strengthen elements of this array from rtx
	to rtx_insn *.
	(other_input_address_reload_insns): Likewise for this global.
	(other_input_reload_insns): Likewise for this global.
	(input_address_reload_insns): Likwise for the elements of this
	array.
	(inpaddr_address_reload_insns): Likwise for the elements of this
	array.
	(output_reload_insns): Likewise for the elements of this array.
	(output_address_reload_insns): Likewise for the elements of this
	array.
	(outaddr_address_reload_insns): Likewise for the elements of this
	array.
	(operand_reload_insns): Likewise for this global.
	(other_operand_reload_insns): Likewise for this global.
	(other_output_reload_insns): Likewise for the elements of this
	array.
	(new_spill_reg_store): Likewise for the elements of this
	array.
	(emit_input_reload_insns): Likewise for locals "insn", "temp".
	Strengthen local "where" from rtx * to rtx_insn **.
	(emit_output_reload_insns): Strengthen locals "insn", "p", "next"
	from rtx to rtx_insn *.
	(do_input_reload): Likewise for local "insn".
	(do_output_reload): Likewise for local "insn".
	(emit_reload_insns): Likewise for locals "insn" and "store_insn".
	(emit_insn_if_valid_for_reload): Likewise for return type and local
	"last".  Add checked cast to rtx_insn when returning "insn" since
	this has been through emit_insn.
	(gen_reload): Strengthen return type and locals "last", "insn", "set"
	from rtx to rtx_insn *.  Add checked cast to rtx_insn when
	returning "insn" since it's been through
	emit_insn_if_valid_for_reload at this point.
	(delete_output_reload): Strengthen param "insn" and locals
	"output_reload_insn", "i2" from rtx to rtx_insn *.
	(delete_address_reloads): Likewise for params "dead_insn",
	"current_insn" and locals "prev", "next".
	(delete_address_reloads_1): Likewise for params "dead_insn",
	"current_insn" and locals "prev", "i2".
	(inc_for_reload): Likewise for locals "last", "add_insn".
	(add_auto_inc_notes): Strengthen param "insn" from rtx to
	rtx_insn *.

	* config/arc/arc-protos.h (regno_clobbered_p): Likewise for 2nd
	param of this duplicate of the prototype from reload.h

From-SVN: r214370
parent 7839a073
2014-08-22 David Malcolm <dmalcolm@redhat.com> 2014-08-22 David Malcolm <dmalcolm@redhat.com>
* reload.h (struct insn_chain): Strengthen field "insn" from rtx
to rtx_insn *.
(find_reloads): Likewise for param 1.
(subst_reloads): Likewise for sole param.
(find_equiv_reg): Likwise for param 2.
(regno_clobbered_p): Likwise for param 2.
(reload): Likewise for param 1.
* caller-save.c (save_call_clobbered_regs): Strengthen local
"insn" from rtx to rtx_insn *.
(insert_one_insn): Likewise for local "insn".
* reload.c (this_insn): Likewise for this global.
(find_reloads): Likewise for param "insn".
(find_reloads_toplev): Likewise.
(find_reloads_address): Likewise.
(subst_reg_equivs): Likewise.
(update_auto_inc_notes): Likewise.
(find_reloads_address_1): Likewise.
(find_reloads_subreg_address): Likewise.
(subst_reloads): Likewise.
(find_equiv_reg): Likewise, also for local "p".
(regno_clobbered_p): Likewise for param "insn".
* reload1.c (reg_reloaded_insn): Likewise for the elements of this
array.
(spill_reg_store): Likewise for the elements of this array.
(remove_init_insns): Likewise for local "equiv_insn".
(will_delete_init_insn_p): Likewise for param "insn".
(reload): Likewise for param ""first" and local "insn".
(calculate_needs_all_insns): Strengthen local "insn" from rtx to
rtx_insn *.
(calculate_elim_costs_all_insns): Likewise.
(delete_caller_save_insns): Likewise.
(spill_failure): Likewise for param "insn".
(delete_dead_insn): Likewise.
(set_label_offsets): Likewise.
(eliminate_regs_in_insn): Likewise, also for locals "base_insn" and
"prev_insn".
(elimination_costs_in_insn): Likewise for param "insn".
(set_initial_eh_label_offset): Replace use of NULL_RTX with NULL
when referring to an insn.
(set_initial_label_offsets): Likewise.
(set_offsets_for_label): Strengthen param "insn" from rtx to
rtx_insn *.
(init_eliminable_invariants): Likewise for param "first" and local
"insn".
(fixup_eh_region_note): Likewise for param "insn".
(reload_as_needed): Likewise for locals "prev", "insn",
"old_next", "old_prev", "next".
(gen_reload_chain_without_interm_reg_p): Likewise for locals "insn",
"last".
(reload_inheritance_insn): Strengthen elements of this array from
rtx to rtx_insn *.
(failed_reload): Likewise for param "insn".
(choose_reload_regs): Likewise for local "insn". Replace use of
NULL_RTX with NULL when referring to an insn.
(input_reload_insns): Strengthen elements of this array from rtx
to rtx_insn *.
(other_input_address_reload_insns): Likewise for this global.
(other_input_reload_insns): Likewise for this global.
(input_address_reload_insns): Likwise for the elements of this
array.
(inpaddr_address_reload_insns): Likwise for the elements of this
array.
(output_reload_insns): Likewise for the elements of this array.
(output_address_reload_insns): Likewise for the elements of this
array.
(outaddr_address_reload_insns): Likewise for the elements of this
array.
(operand_reload_insns): Likewise for this global.
(other_operand_reload_insns): Likewise for this global.
(other_output_reload_insns): Likewise for the elements of this
array.
(new_spill_reg_store): Likewise for the elements of this
array.
(emit_input_reload_insns): Likewise for locals "insn", "temp".
Strengthen local "where" from rtx * to rtx_insn **.
(emit_output_reload_insns): Strengthen locals "insn", "p", "next"
from rtx to rtx_insn *.
(do_input_reload): Likewise for local "insn".
(do_output_reload): Likewise for local "insn".
(emit_reload_insns): Likewise for locals "insn" and "store_insn".
(emit_insn_if_valid_for_reload): Likewise for return type and local
"last". Add checked cast to rtx_insn when returning "insn" since
this has been through emit_insn.
(gen_reload): Strengthen return type and locals "last", "insn", "set"
from rtx to rtx_insn *. Add checked cast to rtx_insn when
returning "insn" since it's been through
emit_insn_if_valid_for_reload at this point.
(delete_output_reload): Strengthen param "insn" and locals
"output_reload_insn", "i2" from rtx to rtx_insn *.
(delete_address_reloads): Likewise for params "dead_insn",
"current_insn" and locals "prev", "next".
(delete_address_reloads_1): Likewise for params "dead_insn",
"current_insn" and locals "prev", "i2".
(inc_for_reload): Likewise for locals "last", "add_insn".
(add_auto_inc_notes): Strengthen param "insn" from rtx to
rtx_insn *.
* config/arc/arc-protos.h (regno_clobbered_p): Likewise for 2nd
param of this duplicate of the prototype from reload.h
2014-08-22 David Malcolm <dmalcolm@redhat.com>
* regstat.c (regstat_bb_compute_ri): Strengthen local "insn" from * regstat.c (regstat_bb_compute_ri): Strengthen local "insn" from
rtx to rtx_insn *. rtx to rtx_insn *.
(regstat_bb_compute_calls_crossed): Likewise. (regstat_bb_compute_calls_crossed): Likewise.
......
...@@ -755,7 +755,7 @@ save_call_clobbered_regs (void) ...@@ -755,7 +755,7 @@ save_call_clobbered_regs (void)
for (chain = reload_insn_chain; chain != 0; chain = next) for (chain = reload_insn_chain; chain != 0; chain = next)
{ {
rtx insn = chain->insn; rtx_insn *insn = chain->insn;
enum rtx_code code = GET_CODE (insn); enum rtx_code code = GET_CODE (insn);
next = chain->next; next = chain->next;
...@@ -1372,7 +1372,7 @@ add_used_regs (rtx *loc, void *data) ...@@ -1372,7 +1372,7 @@ add_used_regs (rtx *loc, void *data)
static struct insn_chain * static struct insn_chain *
insert_one_insn (struct insn_chain *chain, int before_p, int code, rtx pat) insert_one_insn (struct insn_chain *chain, int before_p, int code, rtx pat)
{ {
rtx insn = chain->insn; rtx_insn *insn = chain->insn;
struct insn_chain *new_chain; struct insn_chain *new_chain;
#ifdef HAVE_cc0 #ifdef HAVE_cc0
......
...@@ -113,6 +113,6 @@ extern int arc_decl_pretend_args (tree decl); ...@@ -113,6 +113,6 @@ extern int arc_decl_pretend_args (tree decl);
extern bool arc_short_comparison_p (rtx, int); extern bool arc_short_comparison_p (rtx, int);
extern bool arc_epilogue_uses (int regno); extern bool arc_epilogue_uses (int regno);
/* insn-attrtab.c doesn't include reload.h, which declares regno_clobbered_p. */ /* insn-attrtab.c doesn't include reload.h, which declares regno_clobbered_p. */
extern int regno_clobbered_p (unsigned int, rtx, enum machine_mode, int); extern int regno_clobbered_p (unsigned int, rtx_insn *, enum machine_mode, int);
extern int arc_return_slot_offset (void); extern int arc_return_slot_offset (void);
extern bool arc_legitimize_reload_address (rtx *, enum machine_mode, int, int); extern bool arc_legitimize_reload_address (rtx *, enum machine_mode, int, int);
...@@ -191,7 +191,7 @@ static int secondary_memlocs_elim_used = 0; ...@@ -191,7 +191,7 @@ static int secondary_memlocs_elim_used = 0;
/* The instruction we are doing reloads for; /* The instruction we are doing reloads for;
so we can test whether a register dies in it. */ so we can test whether a register dies in it. */
static rtx this_insn; static rtx_insn *this_insn;
/* Nonzero if this instruction is a user-specified asm with operands. */ /* Nonzero if this instruction is a user-specified asm with operands. */
static int this_insn_is_asm; static int this_insn_is_asm;
...@@ -264,24 +264,24 @@ static int hard_reg_set_here_p (unsigned int, unsigned int, rtx); ...@@ -264,24 +264,24 @@ static int hard_reg_set_here_p (unsigned int, unsigned int, rtx);
static struct decomposition decompose (rtx); static struct decomposition decompose (rtx);
static int immune_p (rtx, rtx, struct decomposition); static int immune_p (rtx, rtx, struct decomposition);
static bool alternative_allows_const_pool_ref (rtx, const char *, int); static bool alternative_allows_const_pool_ref (rtx, const char *, int);
static rtx find_reloads_toplev (rtx, int, enum reload_type, int, int, rtx, static rtx find_reloads_toplev (rtx, int, enum reload_type, int, int,
int *); rtx_insn *, int *);
static rtx make_memloc (rtx, int); static rtx make_memloc (rtx, int);
static int maybe_memory_address_addr_space_p (enum machine_mode, rtx, static int maybe_memory_address_addr_space_p (enum machine_mode, rtx,
addr_space_t, rtx *); addr_space_t, rtx *);
static int find_reloads_address (enum machine_mode, rtx *, rtx, rtx *, static int find_reloads_address (enum machine_mode, rtx *, rtx, rtx *,
int, enum reload_type, int, rtx); int, enum reload_type, int, rtx_insn *);
static rtx subst_reg_equivs (rtx, rtx); static rtx subst_reg_equivs (rtx, rtx_insn *);
static rtx subst_indexed_address (rtx); static rtx subst_indexed_address (rtx);
static void update_auto_inc_notes (rtx, int, int); static void update_auto_inc_notes (rtx_insn *, int, int);
static int find_reloads_address_1 (enum machine_mode, addr_space_t, rtx, int, static int find_reloads_address_1 (enum machine_mode, addr_space_t, rtx, int,
enum rtx_code, enum rtx_code, rtx *, enum rtx_code, enum rtx_code, rtx *,
int, enum reload_type,int, rtx); int, enum reload_type,int, rtx_insn *);
static void find_reloads_address_part (rtx, rtx *, enum reg_class, static void find_reloads_address_part (rtx, rtx *, enum reg_class,
enum machine_mode, int, enum machine_mode, int,
enum reload_type, int); enum reload_type, int);
static rtx find_reloads_subreg_address (rtx, int, enum reload_type, static rtx find_reloads_subreg_address (rtx, int, enum reload_type,
int, rtx, int *); int, rtx_insn *, int *);
static void copy_replacements_1 (rtx *, rtx *, int); static void copy_replacements_1 (rtx *, rtx *, int);
static int find_inc_amount (rtx, rtx); static int find_inc_amount (rtx, rtx);
static int refers_to_mem_for_reload_p (rtx); static int refers_to_mem_for_reload_p (rtx);
...@@ -2609,7 +2609,7 @@ safe_from_earlyclobber (rtx op, rtx clobber) ...@@ -2609,7 +2609,7 @@ safe_from_earlyclobber (rtx op, rtx clobber)
commutative operands, reg_equiv_address substitution, or whatever. */ commutative operands, reg_equiv_address substitution, or whatever. */
int int
find_reloads (rtx insn, int replace, int ind_levels, int live_known, find_reloads (rtx_insn *insn, int replace, int ind_levels, int live_known,
short *reload_reg_p) short *reload_reg_p)
{ {
int insn_code_number; int insn_code_number;
...@@ -4667,7 +4667,7 @@ alternative_allows_const_pool_ref (rtx mem ATTRIBUTE_UNUSED, ...@@ -4667,7 +4667,7 @@ alternative_allows_const_pool_ref (rtx mem ATTRIBUTE_UNUSED,
static rtx static rtx
find_reloads_toplev (rtx x, int opnum, enum reload_type type, find_reloads_toplev (rtx x, int opnum, enum reload_type type,
int ind_levels, int is_set_dest, rtx insn, int ind_levels, int is_set_dest, rtx_insn *insn,
int *address_reloaded) int *address_reloaded)
{ {
RTX_CODE code = GET_CODE (x); RTX_CODE code = GET_CODE (x);
...@@ -4875,7 +4875,7 @@ maybe_memory_address_addr_space_p (enum machine_mode mode, rtx ad, ...@@ -4875,7 +4875,7 @@ maybe_memory_address_addr_space_p (enum machine_mode mode, rtx ad,
static int static int
find_reloads_address (enum machine_mode mode, rtx *memrefloc, rtx ad, find_reloads_address (enum machine_mode mode, rtx *memrefloc, rtx ad,
rtx *loc, int opnum, enum reload_type type, rtx *loc, int opnum, enum reload_type type,
int ind_levels, rtx insn) int ind_levels, rtx_insn *insn)
{ {
addr_space_t as = memrefloc? MEM_ADDR_SPACE (*memrefloc) addr_space_t as = memrefloc? MEM_ADDR_SPACE (*memrefloc)
: ADDR_SPACE_GENERIC; : ADDR_SPACE_GENERIC;
...@@ -5277,7 +5277,7 @@ find_reloads_address (enum machine_mode mode, rtx *memrefloc, rtx ad, ...@@ -5277,7 +5277,7 @@ find_reloads_address (enum machine_mode mode, rtx *memrefloc, rtx ad,
front of it for pseudos that we have to replace with stack slots. */ front of it for pseudos that we have to replace with stack slots. */
static rtx static rtx
subst_reg_equivs (rtx ad, rtx insn) subst_reg_equivs (rtx ad, rtx_insn *insn)
{ {
RTX_CODE code = GET_CODE (ad); RTX_CODE code = GET_CODE (ad);
int i; int i;
...@@ -5453,7 +5453,7 @@ subst_indexed_address (rtx addr) ...@@ -5453,7 +5453,7 @@ subst_indexed_address (rtx addr)
RELOADNUM is the reload number. */ RELOADNUM is the reload number. */
static void static void
update_auto_inc_notes (rtx insn ATTRIBUTE_UNUSED, int regno ATTRIBUTE_UNUSED, update_auto_inc_notes (rtx_insn *insn ATTRIBUTE_UNUSED, int regno ATTRIBUTE_UNUSED,
int reloadnum ATTRIBUTE_UNUSED) int reloadnum ATTRIBUTE_UNUSED)
{ {
#ifdef AUTO_INC_DEC #ifdef AUTO_INC_DEC
...@@ -5501,7 +5501,7 @@ find_reloads_address_1 (enum machine_mode mode, addr_space_t as, ...@@ -5501,7 +5501,7 @@ find_reloads_address_1 (enum machine_mode mode, addr_space_t as,
rtx x, int context, rtx x, int context,
enum rtx_code outer_code, enum rtx_code index_code, enum rtx_code outer_code, enum rtx_code index_code,
rtx *loc, int opnum, enum reload_type type, rtx *loc, int opnum, enum reload_type type,
int ind_levels, rtx insn) int ind_levels, rtx_insn *insn)
{ {
#define REG_OK_FOR_CONTEXT(CONTEXT, REGNO, MODE, AS, OUTER, INDEX) \ #define REG_OK_FOR_CONTEXT(CONTEXT, REGNO, MODE, AS, OUTER, INDEX) \
((CONTEXT) == 0 \ ((CONTEXT) == 0 \
...@@ -6135,7 +6135,8 @@ find_reloads_address_part (rtx x, rtx *loc, enum reg_class rclass, ...@@ -6135,7 +6135,8 @@ find_reloads_address_part (rtx x, rtx *loc, enum reg_class rclass,
static rtx static rtx
find_reloads_subreg_address (rtx x, int opnum, enum reload_type type, find_reloads_subreg_address (rtx x, int opnum, enum reload_type type,
int ind_levels, rtx insn, int *address_reloaded) int ind_levels, rtx_insn *insn,
int *address_reloaded)
{ {
enum machine_mode outer_mode = GET_MODE (x); enum machine_mode outer_mode = GET_MODE (x);
enum machine_mode inner_mode = GET_MODE (SUBREG_REG (x)); enum machine_mode inner_mode = GET_MODE (SUBREG_REG (x));
...@@ -6244,7 +6245,7 @@ find_reloads_subreg_address (rtx x, int opnum, enum reload_type type, ...@@ -6244,7 +6245,7 @@ find_reloads_subreg_address (rtx x, int opnum, enum reload_type type,
Return the rtx that X translates into; usually X, but modified. */ Return the rtx that X translates into; usually X, but modified. */
void void
subst_reloads (rtx insn) subst_reloads (rtx_insn *insn)
{ {
int i; int i;
...@@ -6671,10 +6672,10 @@ refers_to_mem_for_reload_p (rtx x) ...@@ -6671,10 +6672,10 @@ refers_to_mem_for_reload_p (rtx x)
as if it were a constant except that sp is required to be unchanging. */ as if it were a constant except that sp is required to be unchanging. */
rtx rtx
find_equiv_reg (rtx goal, rtx insn, enum reg_class rclass, int other, find_equiv_reg (rtx goal, rtx_insn *insn, enum reg_class rclass, int other,
short *reload_reg_p, int goalreg, enum machine_mode mode) short *reload_reg_p, int goalreg, enum machine_mode mode)
{ {
rtx p = insn; rtx_insn *p = insn;
rtx goaltry, valtry, value, where; rtx goaltry, valtry, value, where;
rtx pat; rtx pat;
int regno = -1; int regno = -1;
...@@ -7207,7 +7208,7 @@ reg_inc_found_and_valid_p (unsigned int regno, unsigned int endregno, ...@@ -7207,7 +7208,7 @@ reg_inc_found_and_valid_p (unsigned int regno, unsigned int endregno,
REG_INC. REGNO must refer to a hard register. */ REG_INC. REGNO must refer to a hard register. */
int int
regno_clobbered_p (unsigned int regno, rtx insn, enum machine_mode mode, regno_clobbered_p (unsigned int regno, rtx_insn *insn, enum machine_mode mode,
int sets) int sets)
{ {
unsigned int nregs, endregno; unsigned int nregs, endregno;
......
...@@ -285,7 +285,7 @@ struct insn_chain ...@@ -285,7 +285,7 @@ struct insn_chain
struct insn_chain *next_need_reload; struct insn_chain *next_need_reload;
/* The rtx of the insn. */ /* The rtx of the insn. */
rtx insn; rtx_insn *insn;
/* The basic block this insn is in. */ /* The basic block this insn is in. */
int block; int block;
...@@ -364,7 +364,7 @@ extern int safe_from_earlyclobber (rtx, rtx); ...@@ -364,7 +364,7 @@ extern int safe_from_earlyclobber (rtx, rtx);
/* Search the body of INSN for values that need reloading and record them /* Search the body of INSN for values that need reloading and record them
with push_reload. REPLACE nonzero means record also where the values occur with push_reload. REPLACE nonzero means record also where the values occur
so that subst_reloads can be used. */ so that subst_reloads can be used. */
extern int find_reloads (rtx, int, int, int, short *); extern int find_reloads (rtx_insn *, int, int, int, short *);
/* Compute the sum of X and Y, making canonicalizations assumed in an /* Compute the sum of X and Y, making canonicalizations assumed in an
address, namely: sum constant integers, surround the sum of two address, namely: sum constant integers, surround the sum of two
...@@ -374,7 +374,7 @@ extern rtx form_sum (enum machine_mode, rtx, rtx); ...@@ -374,7 +374,7 @@ extern rtx form_sum (enum machine_mode, rtx, rtx);
/* Substitute into the current INSN the registers into which we have reloaded /* Substitute into the current INSN the registers into which we have reloaded
the things that need reloading. */ the things that need reloading. */
extern void subst_reloads (rtx); extern void subst_reloads (rtx_insn *);
/* Make a copy of any replacements being done into X and move those copies /* Make a copy of any replacements being done into X and move those copies
to locations in Y, a copy of X. We only look at the highest level of to locations in Y, a copy of X. We only look at the highest level of
...@@ -393,11 +393,11 @@ extern int reg_overlap_mentioned_for_reload_p (rtx, rtx); ...@@ -393,11 +393,11 @@ extern int reg_overlap_mentioned_for_reload_p (rtx, rtx);
/* Check the insns before INSN to see if there is a suitable register /* Check the insns before INSN to see if there is a suitable register
containing the same value as GOAL. */ containing the same value as GOAL. */
extern rtx find_equiv_reg (rtx, rtx, enum reg_class, int, short *, extern rtx find_equiv_reg (rtx, rtx_insn *, enum reg_class, int, short *,
int, enum machine_mode); int, enum machine_mode);
/* Return 1 if register REGNO is the subject of a clobber in insn INSN. */ /* Return 1 if register REGNO is the subject of a clobber in insn INSN. */
extern int regno_clobbered_p (unsigned int, rtx, enum machine_mode, int); extern int regno_clobbered_p (unsigned int, rtx_insn *, enum machine_mode, int);
/* Return 1 if X is an operand of an insn that is being earlyclobbered. */ /* Return 1 if X is an operand of an insn that is being earlyclobbered. */
extern int earlyclobber_operand_p (rtx); extern int earlyclobber_operand_p (rtx);
...@@ -413,7 +413,7 @@ extern int push_reload (rtx, rtx, rtx *, rtx *, enum reg_class, ...@@ -413,7 +413,7 @@ extern int push_reload (rtx, rtx, rtx *, rtx *, enum reg_class,
extern void init_reload (void); extern void init_reload (void);
/* The reload pass itself. */ /* The reload pass itself. */
extern bool reload (rtx, int); extern bool reload (rtx_insn *, int);
/* Mark the slots in regs_ever_live for the hard regs /* Mark the slots in regs_ever_live for the hard regs
used by pseudo-reg number REGNO. */ used by pseudo-reg number REGNO. */
......
...@@ -115,7 +115,7 @@ static int reg_reloaded_contents[FIRST_PSEUDO_REGISTER]; ...@@ -115,7 +115,7 @@ static int reg_reloaded_contents[FIRST_PSEUDO_REGISTER];
/* During reload_as_needed, element N contains the insn for which /* During reload_as_needed, element N contains the insn for which
hard register N was last used. Its contents are significant only hard register N was last used. Its contents are significant only
when reg_reloaded_valid is set for this register. */ when reg_reloaded_valid is set for this register. */
static rtx reg_reloaded_insn[FIRST_PSEUDO_REGISTER]; static rtx_insn *reg_reloaded_insn[FIRST_PSEUDO_REGISTER];
/* Indicate if reg_reloaded_insn / reg_reloaded_contents is valid. */ /* Indicate if reg_reloaded_insn / reg_reloaded_contents is valid. */
static HARD_REG_SET reg_reloaded_valid; static HARD_REG_SET reg_reloaded_valid;
...@@ -140,7 +140,7 @@ static rtx spill_reg_rtx[FIRST_PSEUDO_REGISTER]; ...@@ -140,7 +140,7 @@ static rtx spill_reg_rtx[FIRST_PSEUDO_REGISTER];
/* In parallel with spill_regs, contains nonzero for a spill reg /* In parallel with spill_regs, contains nonzero for a spill reg
that was stored after the last time it was used. that was stored after the last time it was used.
The precise value is the insn generated to do the store. */ The precise value is the insn generated to do the store. */
static rtx spill_reg_store[FIRST_PSEUDO_REGISTER]; static rtx_insn *spill_reg_store[FIRST_PSEUDO_REGISTER];
/* This is the register that was stored with spill_reg_store. This is a /* This is the register that was stored with spill_reg_store. This is a
copy of reload_out / reload_out_reg when the value was stored; if copy of reload_out / reload_out_reg when the value was stored; if
...@@ -354,27 +354,27 @@ static void find_reload_regs (struct insn_chain *); ...@@ -354,27 +354,27 @@ static void find_reload_regs (struct insn_chain *);
static void select_reload_regs (void); static void select_reload_regs (void);
static void delete_caller_save_insns (void); static void delete_caller_save_insns (void);
static void spill_failure (rtx, enum reg_class); static void spill_failure (rtx_insn *, enum reg_class);
static void count_spilled_pseudo (int, int, int); static void count_spilled_pseudo (int, int, int);
static void delete_dead_insn (rtx); static void delete_dead_insn (rtx_insn *);
static void alter_reg (int, int, bool); static void alter_reg (int, int, bool);
static void set_label_offsets (rtx, rtx, int); static void set_label_offsets (rtx, rtx_insn *, int);
static void check_eliminable_occurrences (rtx); static void check_eliminable_occurrences (rtx);
static void elimination_effects (rtx, enum machine_mode); static void elimination_effects (rtx, enum machine_mode);
static rtx eliminate_regs_1 (rtx, enum machine_mode, rtx, bool, bool); static rtx eliminate_regs_1 (rtx, enum machine_mode, rtx, bool, bool);
static int eliminate_regs_in_insn (rtx, int); static int eliminate_regs_in_insn (rtx_insn *, int);
static void update_eliminable_offsets (void); static void update_eliminable_offsets (void);
static void mark_not_eliminable (rtx, const_rtx, void *); static void mark_not_eliminable (rtx, const_rtx, void *);
static void set_initial_elim_offsets (void); static void set_initial_elim_offsets (void);
static bool verify_initial_elim_offsets (void); static bool verify_initial_elim_offsets (void);
static void set_initial_label_offsets (void); static void set_initial_label_offsets (void);
static void set_offsets_for_label (rtx); static void set_offsets_for_label (rtx_insn *);
static void init_eliminable_invariants (rtx, bool); static void init_eliminable_invariants (rtx_insn *, bool);
static void init_elim_table (void); static void init_elim_table (void);
static void free_reg_equiv (void); static void free_reg_equiv (void);
static void update_eliminables (HARD_REG_SET *); static void update_eliminables (HARD_REG_SET *);
static bool update_eliminables_and_spill (void); static bool update_eliminables_and_spill (void);
static void elimination_costs_in_insn (rtx); static void elimination_costs_in_insn (rtx_insn *);
static void spill_hard_reg (unsigned int, int); static void spill_hard_reg (unsigned int, int);
static int finish_spills (int); static int finish_spills (int);
static void scan_paradoxical_subregs (rtx); static void scan_paradoxical_subregs (rtx);
...@@ -395,7 +395,7 @@ static int free_for_value_p (int, enum machine_mode, int, enum reload_type, ...@@ -395,7 +395,7 @@ static int free_for_value_p (int, enum machine_mode, int, enum reload_type,
rtx, rtx, int, int); rtx, rtx, int, int);
static int allocate_reload_reg (struct insn_chain *, int, int); static int allocate_reload_reg (struct insn_chain *, int, int);
static int conflicts_with_override (rtx); static int conflicts_with_override (rtx);
static void failed_reload (rtx, int); static void failed_reload (rtx_insn *, int);
static int set_reload_reg (int, int); static int set_reload_reg (int, int);
static void choose_reload_regs_init (struct insn_chain *, rtx *); static void choose_reload_regs_init (struct insn_chain *, rtx *);
static void choose_reload_regs (struct insn_chain *); static void choose_reload_regs (struct insn_chain *);
...@@ -406,18 +406,18 @@ static void emit_output_reload_insns (struct insn_chain *, struct reload *, ...@@ -406,18 +406,18 @@ static void emit_output_reload_insns (struct insn_chain *, struct reload *,
static void do_input_reload (struct insn_chain *, struct reload *, int); static void do_input_reload (struct insn_chain *, struct reload *, int);
static void do_output_reload (struct insn_chain *, struct reload *, int); static void do_output_reload (struct insn_chain *, struct reload *, int);
static void emit_reload_insns (struct insn_chain *); static void emit_reload_insns (struct insn_chain *);
static void delete_output_reload (rtx, int, int, rtx); static void delete_output_reload (rtx_insn *, int, int, rtx);
static void delete_address_reloads (rtx, rtx); static void delete_address_reloads (rtx_insn *, rtx_insn *);
static void delete_address_reloads_1 (rtx, rtx, rtx); static void delete_address_reloads_1 (rtx_insn *, rtx, rtx_insn *);
static void inc_for_reload (rtx, rtx, rtx, int); static void inc_for_reload (rtx, rtx, rtx, int);
#ifdef AUTO_INC_DEC #ifdef AUTO_INC_DEC
static void add_auto_inc_notes (rtx, rtx); static void add_auto_inc_notes (rtx_insn *, rtx);
#endif #endif
static void substitute (rtx *, const_rtx, rtx); static void substitute (rtx *, const_rtx, rtx);
static bool gen_reload_chain_without_interm_reg_p (int, int); static bool gen_reload_chain_without_interm_reg_p (int, int);
static int reloads_conflict (int, int); static int reloads_conflict (int, int);
static rtx gen_reload (rtx, rtx, int, enum reload_type); static rtx_insn *gen_reload (rtx, rtx, int, enum reload_type);
static rtx emit_insn_if_valid_for_reload (rtx); static rtx_insn *emit_insn_if_valid_for_reload (rtx);
/* Initialize the reload pass. This is called at the beginning of compilation /* Initialize the reload pass. This is called at the beginning of compilation
and may be called again if the target is reinitialized. */ and may be called again if the target is reinitialized. */
...@@ -702,7 +702,7 @@ remove_init_insns () ...@@ -702,7 +702,7 @@ remove_init_insns ()
rtx list; rtx list;
for (list = reg_equiv_init (i); list; list = XEXP (list, 1)) for (list = reg_equiv_init (i); list; list = XEXP (list, 1))
{ {
rtx equiv_insn = XEXP (list, 0); rtx_insn *equiv_insn = as_a <rtx_insn *> (XEXP (list, 0));
/* If we already deleted the insn or if it may trap, we can't /* If we already deleted the insn or if it may trap, we can't
delete it. The latter case shouldn't happen, but can delete it. The latter case shouldn't happen, but can
...@@ -723,7 +723,7 @@ remove_init_insns () ...@@ -723,7 +723,7 @@ remove_init_insns ()
/* Return true if remove_init_insns will delete INSN. */ /* Return true if remove_init_insns will delete INSN. */
static bool static bool
will_delete_init_insn_p (rtx insn) will_delete_init_insn_p (rtx_insn *insn)
{ {
rtx set = single_set (insn); rtx set = single_set (insn);
if (!set || !REG_P (SET_DEST (set))) if (!set || !REG_P (SET_DEST (set)))
...@@ -760,10 +760,10 @@ will_delete_init_insn_p (rtx insn) ...@@ -760,10 +760,10 @@ will_delete_init_insn_p (rtx insn)
return value is FALSE. */ return value is FALSE. */
bool bool
reload (rtx first, int global) reload (rtx_insn *first, int global)
{ {
int i, n; int i, n;
rtx insn; rtx_insn *insn;
struct elim_table *ep; struct elim_table *ep;
basic_block bb; basic_block bb;
bool inserted; bool inserted;
...@@ -1475,7 +1475,7 @@ calculate_needs_all_insns (int global) ...@@ -1475,7 +1475,7 @@ calculate_needs_all_insns (int global)
reload_insn_firstobj = XOBNEWVAR (&reload_obstack, char, 0); reload_insn_firstobj = XOBNEWVAR (&reload_obstack, char, 0);
for (chain = reload_insn_chain; chain != 0; chain = next) for (chain = reload_insn_chain; chain != 0; chain = next)
{ {
rtx insn = chain->insn; rtx_insn *insn = chain->insn;
next = chain->next; next = chain->next;
...@@ -1605,7 +1605,7 @@ calculate_elim_costs_all_insns (void) ...@@ -1605,7 +1605,7 @@ calculate_elim_costs_all_insns (void)
FOR_EACH_BB_FN (bb, cfun) FOR_EACH_BB_FN (bb, cfun)
{ {
rtx insn; rtx_insn *insn;
elim_bb = bb; elim_bb = bb;
FOR_BB_INSNS (bb, insn) FOR_BB_INSNS (bb, insn)
...@@ -2075,7 +2075,7 @@ delete_caller_save_insns (void) ...@@ -2075,7 +2075,7 @@ delete_caller_save_insns (void)
while (c != 0 && c->is_caller_save_insn) while (c != 0 && c->is_caller_save_insn)
{ {
struct insn_chain *next = c->next; struct insn_chain *next = c->next;
rtx insn = c->insn; rtx_insn *insn = c->insn;
if (c == reload_insn_chain) if (c == reload_insn_chain)
reload_insn_chain = next; reload_insn_chain = next;
...@@ -2098,7 +2098,7 @@ delete_caller_save_insns (void) ...@@ -2098,7 +2098,7 @@ delete_caller_save_insns (void)
INSN should be one of the insns which needed this particular spill reg. */ INSN should be one of the insns which needed this particular spill reg. */
static void static void
spill_failure (rtx insn, enum reg_class rclass) spill_failure (rtx_insn *insn, enum reg_class rclass)
{ {
if (asm_noperands (PATTERN (insn)) >= 0) if (asm_noperands (PATTERN (insn)) >= 0)
error_for_asm (insn, "can%'t find a register in class %qs while " error_for_asm (insn, "can%'t find a register in class %qs while "
...@@ -2122,9 +2122,9 @@ spill_failure (rtx insn, enum reg_class rclass) ...@@ -2122,9 +2122,9 @@ spill_failure (rtx insn, enum reg_class rclass)
data that is dead in INSN. */ data that is dead in INSN. */
static void static void
delete_dead_insn (rtx insn) delete_dead_insn (rtx_insn *insn)
{ {
rtx prev = prev_active_insn (insn); rtx_insn *prev = prev_active_insn (insn);
rtx prev_dest; rtx prev_dest;
/* If the previous insn sets a register that dies in our insn make /* If the previous insn sets a register that dies in our insn make
...@@ -2344,7 +2344,7 @@ mark_home_live (int regno) ...@@ -2344,7 +2344,7 @@ mark_home_live (int regno)
current offset. */ current offset. */
static void static void
set_label_offsets (rtx x, rtx insn, int initial_p) set_label_offsets (rtx x, rtx_insn *insn, int initial_p)
{ {
enum rtx_code code = GET_CODE (x); enum rtx_code code = GET_CODE (x);
rtx tem; rtx tem;
...@@ -3218,7 +3218,7 @@ check_eliminable_occurrences (rtx x) ...@@ -3218,7 +3218,7 @@ check_eliminable_occurrences (rtx x)
is returned. Otherwise, 1 is returned. */ is returned. Otherwise, 1 is returned. */
static int static int
eliminate_regs_in_insn (rtx insn, int replace) eliminate_regs_in_insn (rtx_insn *insn, int replace)
{ {
int icode = recog_memoized (insn); int icode = recog_memoized (insn);
rtx old_body = PATTERN (insn); rtx old_body = PATTERN (insn);
...@@ -3261,12 +3261,13 @@ eliminate_regs_in_insn (rtx insn, int replace) ...@@ -3261,12 +3261,13 @@ eliminate_regs_in_insn (rtx insn, int replace)
&& ep->to == HARD_FRAME_POINTER_REGNUM) && ep->to == HARD_FRAME_POINTER_REGNUM)
{ {
rtx base = SET_SRC (old_set); rtx base = SET_SRC (old_set);
rtx base_insn = insn; rtx_insn *base_insn = insn;
HOST_WIDE_INT offset = 0; HOST_WIDE_INT offset = 0;
while (base != ep->to_rtx) while (base != ep->to_rtx)
{ {
rtx prev_insn, prev_set; rtx_insn *prev_insn;
rtx prev_set;
if (GET_CODE (base) == PLUS if (GET_CODE (base) == PLUS
&& CONST_INT_P (XEXP (base, 1))) && CONST_INT_P (XEXP (base, 1)))
...@@ -3628,7 +3629,7 @@ eliminate_regs_in_insn (rtx insn, int replace) ...@@ -3628,7 +3629,7 @@ eliminate_regs_in_insn (rtx insn, int replace)
an invariant equivalence would add extra cost. */ an invariant equivalence would add extra cost. */
static void static void
elimination_costs_in_insn (rtx insn) elimination_costs_in_insn (rtx_insn *insn)
{ {
int icode = recog_memoized (insn); int icode = recog_memoized (insn);
rtx old_body = PATTERN (insn); rtx old_body = PATTERN (insn);
...@@ -3895,7 +3896,7 @@ set_initial_elim_offsets (void) ...@@ -3895,7 +3896,7 @@ set_initial_elim_offsets (void)
static void static void
set_initial_eh_label_offset (rtx label) set_initial_eh_label_offset (rtx label)
{ {
set_label_offsets (label, NULL_RTX, 1); set_label_offsets (label, NULL, 1);
} }
/* Initialize the known label offsets. /* Initialize the known label offsets.
...@@ -3913,11 +3914,11 @@ set_initial_label_offsets (void) ...@@ -3913,11 +3914,11 @@ set_initial_label_offsets (void)
for (x = forced_labels; x; x = XEXP (x, 1)) for (x = forced_labels; x; x = XEXP (x, 1))
if (XEXP (x, 0)) if (XEXP (x, 0))
set_label_offsets (XEXP (x, 0), NULL_RTX, 1); set_label_offsets (XEXP (x, 0), NULL, 1);
for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1)) for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
if (XEXP (x, 0)) if (XEXP (x, 0))
set_label_offsets (XEXP (x, 0), NULL_RTX, 1); set_label_offsets (XEXP (x, 0), NULL, 1);
for_each_eh_label (set_initial_eh_label_offset); for_each_eh_label (set_initial_eh_label_offset);
} }
...@@ -3926,7 +3927,7 @@ set_initial_label_offsets (void) ...@@ -3926,7 +3927,7 @@ set_initial_label_offsets (void)
by INSN. */ by INSN. */
static void static void
set_offsets_for_label (rtx insn) set_offsets_for_label (rtx_insn *insn)
{ {
unsigned int i; unsigned int i;
int label_nr = CODE_LABEL_NUMBER (insn); int label_nr = CODE_LABEL_NUMBER (insn);
...@@ -4132,10 +4133,10 @@ init_elim_table (void) ...@@ -4132,10 +4133,10 @@ init_elim_table (void)
be substituted eventually by altering the REG-rtx's. */ be substituted eventually by altering the REG-rtx's. */
static void static void
init_eliminable_invariants (rtx first, bool do_subregs) init_eliminable_invariants (rtx_insn *first, bool do_subregs)
{ {
int i; int i;
rtx insn; rtx_insn *insn;
grow_reg_equivs (); grow_reg_equivs ();
if (do_subregs) if (do_subregs)
...@@ -4547,7 +4548,7 @@ strip_paradoxical_subreg (rtx *op_ptr, rtx *other_ptr) ...@@ -4547,7 +4548,7 @@ strip_paradoxical_subreg (rtx *op_ptr, rtx *other_ptr)
annotate all that may trap. */ annotate all that may trap. */
static void static void
fixup_eh_region_note (rtx insn, rtx prev, rtx next) fixup_eh_region_note (rtx_insn *insn, rtx_insn *prev, rtx_insn *next)
{ {
rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
if (note == NULL) if (note == NULL)
...@@ -4591,11 +4592,11 @@ reload_as_needed (int live_known) ...@@ -4591,11 +4592,11 @@ reload_as_needed (int live_known)
for (chain = reload_insn_chain; chain; chain = chain->next) for (chain = reload_insn_chain; chain; chain = chain->next)
{ {
rtx prev = 0; rtx_insn *prev = 0;
rtx insn = chain->insn; rtx_insn *insn = chain->insn;
rtx old_next = NEXT_INSN (insn); rtx_insn *old_next = NEXT_INSN (insn);
#ifdef AUTO_INC_DEC #ifdef AUTO_INC_DEC
rtx old_prev = PREV_INSN (insn); rtx_insn *old_prev = PREV_INSN (insn);
#endif #endif
if (will_delete_init_insn_p (insn)) if (will_delete_init_insn_p (insn))
...@@ -4661,7 +4662,7 @@ reload_as_needed (int live_known) ...@@ -4661,7 +4662,7 @@ reload_as_needed (int live_known)
if (n_reloads > 0) if (n_reloads > 0)
{ {
rtx next = NEXT_INSN (insn); rtx_insn *next = NEXT_INSN (insn);
rtx p; rtx p;
/* ??? PREV can get deleted by reload inheritance. /* ??? PREV can get deleted by reload inheritance.
...@@ -5677,8 +5678,9 @@ gen_reload_chain_without_interm_reg_p (int r1, int r2) ...@@ -5677,8 +5678,9 @@ gen_reload_chain_without_interm_reg_p (int r1, int r2)
chain reloads or do need an intermediate hard registers. */ chain reloads or do need an intermediate hard registers. */
bool result = true; bool result = true;
int regno, n, code; int regno, n, code;
rtx out, in, insn; rtx out, in;
rtx last = get_last_insn (); rtx_insn *insn;
rtx_insn *last = get_last_insn ();
/* Make r2 a component of r1. */ /* Make r2 a component of r1. */
if (reg_mentioned_p (rld[r1].in, rld[r2].in)) if (reg_mentioned_p (rld[r1].in, rld[r2].in))
...@@ -5817,7 +5819,7 @@ static char reload_inherited[MAX_RELOADS]; ...@@ -5817,7 +5819,7 @@ static char reload_inherited[MAX_RELOADS];
/* For an inherited reload, this is the insn the reload was inherited from, /* For an inherited reload, this is the insn the reload was inherited from,
if we know it. Otherwise, this is 0. */ if we know it. Otherwise, this is 0. */
static rtx reload_inheritance_insn[MAX_RELOADS]; static rtx_insn *reload_inheritance_insn[MAX_RELOADS];
/* If nonzero, this is a place to get the value of the reload, /* If nonzero, this is a place to get the value of the reload,
rather than using reload_in. */ rather than using reload_in. */
...@@ -6128,7 +6130,7 @@ conflicts_with_override (rtx x) ...@@ -6128,7 +6130,7 @@ conflicts_with_override (rtx x)
/* Give an error message saying we failed to find a reload for INSN, /* Give an error message saying we failed to find a reload for INSN,
and clear out reload R. */ and clear out reload R. */
static void static void
failed_reload (rtx insn, int r) failed_reload (rtx_insn *insn, int r)
{ {
if (asm_noperands (PATTERN (insn)) < 0) if (asm_noperands (PATTERN (insn)) < 0)
/* It's the compiler's fault. */ /* It's the compiler's fault. */
...@@ -6443,7 +6445,7 @@ compute_reload_subreg_offset (enum machine_mode outermode, ...@@ -6443,7 +6445,7 @@ compute_reload_subreg_offset (enum machine_mode outermode,
static void static void
choose_reload_regs (struct insn_chain *chain) choose_reload_regs (struct insn_chain *chain)
{ {
rtx insn = chain->insn; rtx_insn *insn = chain->insn;
int i, j; int i, j;
unsigned int max_group_size = 1; unsigned int max_group_size = 1;
enum reg_class group_class = NO_REGS; enum reg_class group_class = NO_REGS;
...@@ -6907,7 +6909,7 @@ choose_reload_regs (struct insn_chain *chain) ...@@ -6907,7 +6909,7 @@ choose_reload_regs (struct insn_chain *chain)
We must clear it, since otherwise emit_reload_insns We must clear it, since otherwise emit_reload_insns
might delete the store. */ might delete the store. */
if (! TEST_HARD_REG_BIT (reg_reloaded_valid, regno)) if (! TEST_HARD_REG_BIT (reg_reloaded_valid, regno))
spill_reg_store[regno] = NULL_RTX; spill_reg_store[regno] = NULL;
/* If any of the hard registers in EQUIV are spill /* If any of the hard registers in EQUIV are spill
registers, mark them as in use for this insn. */ registers, mark them as in use for this insn. */
for (k = 0; k < nr; k++) for (k = 0; k < nr; k++)
...@@ -7168,22 +7170,22 @@ deallocate_reload_reg (int r) ...@@ -7168,22 +7170,22 @@ deallocate_reload_reg (int r)
} }
/* These arrays are filled by emit_reload_insns and its subroutines. */ /* These arrays are filled by emit_reload_insns and its subroutines. */
static rtx input_reload_insns[MAX_RECOG_OPERANDS]; static rtx_insn *input_reload_insns[MAX_RECOG_OPERANDS];
static rtx other_input_address_reload_insns = 0; static rtx_insn *other_input_address_reload_insns = 0;
static rtx other_input_reload_insns = 0; static rtx_insn *other_input_reload_insns = 0;
static rtx input_address_reload_insns[MAX_RECOG_OPERANDS]; static rtx_insn *input_address_reload_insns[MAX_RECOG_OPERANDS];
static rtx inpaddr_address_reload_insns[MAX_RECOG_OPERANDS]; static rtx_insn *inpaddr_address_reload_insns[MAX_RECOG_OPERANDS];
static rtx output_reload_insns[MAX_RECOG_OPERANDS]; static rtx_insn *output_reload_insns[MAX_RECOG_OPERANDS];
static rtx output_address_reload_insns[MAX_RECOG_OPERANDS]; static rtx_insn *output_address_reload_insns[MAX_RECOG_OPERANDS];
static rtx outaddr_address_reload_insns[MAX_RECOG_OPERANDS]; static rtx_insn *outaddr_address_reload_insns[MAX_RECOG_OPERANDS];
static rtx operand_reload_insns = 0; static rtx_insn *operand_reload_insns = 0;
static rtx other_operand_reload_insns = 0; static rtx_insn *other_operand_reload_insns = 0;
static rtx other_output_reload_insns[MAX_RECOG_OPERANDS]; static rtx_insn *other_output_reload_insns[MAX_RECOG_OPERANDS];
/* Values to be put in spill_reg_store are put here first. Instructions /* Values to be put in spill_reg_store are put here first. Instructions
must only be placed here if the associated reload register reaches must only be placed here if the associated reload register reaches
the end of the instruction's reload sequence. */ the end of the instruction's reload sequence. */
static rtx new_spill_reg_store[FIRST_PSEUDO_REGISTER]; static rtx_insn *new_spill_reg_store[FIRST_PSEUDO_REGISTER];
static HARD_REG_SET reg_reloaded_died; static HARD_REG_SET reg_reloaded_died;
/* Check if *RELOAD_REG is suitable as an intermediate or scratch register /* Check if *RELOAD_REG is suitable as an intermediate or scratch register
...@@ -7242,13 +7244,13 @@ static void ...@@ -7242,13 +7244,13 @@ static void
emit_input_reload_insns (struct insn_chain *chain, struct reload *rl, emit_input_reload_insns (struct insn_chain *chain, struct reload *rl,
rtx old, int j) rtx old, int j)
{ {
rtx insn = chain->insn; rtx_insn *insn = chain->insn;
rtx reloadreg; rtx reloadreg;
rtx oldequiv_reg = 0; rtx oldequiv_reg = 0;
rtx oldequiv = 0; rtx oldequiv = 0;
int special = 0; int special = 0;
enum machine_mode mode; enum machine_mode mode;
rtx *where; rtx_insn **where;
/* delete_output_reload is only invoked properly if old contains /* delete_output_reload is only invoked properly if old contains
the original pseudo register. Since this is replaced with a the original pseudo register. Since this is replaced with a
...@@ -7363,7 +7365,7 @@ emit_input_reload_insns (struct insn_chain *chain, struct reload *rl, ...@@ -7363,7 +7365,7 @@ emit_input_reload_insns (struct insn_chain *chain, struct reload *rl,
&& free_for_value_p (REGNO (reloadreg), rl->mode, rl->opnum, && free_for_value_p (REGNO (reloadreg), rl->mode, rl->opnum,
rl->when_needed, old, rl->out, j, 0)) rl->when_needed, old, rl->out, j, 0))
{ {
rtx temp = PREV_INSN (insn); rtx_insn *temp = PREV_INSN (insn);
while (temp && (NOTE_P (temp) || DEBUG_INSN_P (temp))) while (temp && (NOTE_P (temp) || DEBUG_INSN_P (temp)))
temp = PREV_INSN (temp); temp = PREV_INSN (temp);
if (temp if (temp
...@@ -7704,11 +7706,11 @@ emit_output_reload_insns (struct insn_chain *chain, struct reload *rl, ...@@ -7704,11 +7706,11 @@ emit_output_reload_insns (struct insn_chain *chain, struct reload *rl,
int j) int j)
{ {
rtx reloadreg; rtx reloadreg;
rtx insn = chain->insn; rtx_insn *insn = chain->insn;
int special = 0; int special = 0;
rtx old = rl->out; rtx old = rl->out;
enum machine_mode mode; enum machine_mode mode;
rtx p; rtx_insn *p;
rtx rl_reg_rtx; rtx rl_reg_rtx;
if (rl->when_needed == RELOAD_OTHER) if (rl->when_needed == RELOAD_OTHER)
...@@ -7871,7 +7873,7 @@ emit_output_reload_insns (struct insn_chain *chain, struct reload *rl, ...@@ -7871,7 +7873,7 @@ emit_output_reload_insns (struct insn_chain *chain, struct reload *rl,
that it is, setting new_spill_reg_store to that it is, setting new_spill_reg_store to
that insn will allow an extra optimization. */ that insn will allow an extra optimization. */
rtx s_reg = rld[s].reg_rtx; rtx s_reg = rld[s].reg_rtx;
rtx next = NEXT_INSN (p); rtx_insn *next = NEXT_INSN (p);
rld[s].out = rl->out; rld[s].out = rl->out;
rld[s].out_reg = rl->out_reg; rld[s].out_reg = rl->out_reg;
set = single_set (next); set = single_set (next);
...@@ -7908,7 +7910,7 @@ emit_output_reload_insns (struct insn_chain *chain, struct reload *rl, ...@@ -7908,7 +7910,7 @@ emit_output_reload_insns (struct insn_chain *chain, struct reload *rl,
static void static void
do_input_reload (struct insn_chain *chain, struct reload *rl, int j) do_input_reload (struct insn_chain *chain, struct reload *rl, int j)
{ {
rtx insn = chain->insn; rtx_insn *insn = chain->insn;
rtx old = (rl->in && MEM_P (rl->in) rtx old = (rl->in && MEM_P (rl->in)
? rl->in_reg : rl->in); ? rl->in_reg : rl->in);
rtx reg_rtx = rl->reg_rtx; rtx reg_rtx = rl->reg_rtx;
...@@ -8010,7 +8012,7 @@ static void ...@@ -8010,7 +8012,7 @@ static void
do_output_reload (struct insn_chain *chain, struct reload *rl, int j) do_output_reload (struct insn_chain *chain, struct reload *rl, int j)
{ {
rtx note, old; rtx note, old;
rtx insn = chain->insn; rtx_insn *insn = chain->insn;
/* If this is an output reload that stores something that is /* If this is an output reload that stores something that is
not loaded in this same reload, see if we can eliminate a previous not loaded in this same reload, see if we can eliminate a previous
store. */ store. */
...@@ -8119,7 +8121,7 @@ inherit_piecemeal_p (int dest ATTRIBUTE_UNUSED, ...@@ -8119,7 +8121,7 @@ inherit_piecemeal_p (int dest ATTRIBUTE_UNUSED,
static void static void
emit_reload_insns (struct insn_chain *chain) emit_reload_insns (struct insn_chain *chain)
{ {
rtx insn = chain->insn; rtx_insn *insn = chain->insn;
int j; int j;
...@@ -8461,7 +8463,8 @@ emit_reload_insns (struct insn_chain *chain) ...@@ -8461,7 +8463,8 @@ emit_reload_insns (struct insn_chain *chain)
if (!HARD_REGISTER_NUM_P (out_regno)) if (!HARD_REGISTER_NUM_P (out_regno))
{ {
rtx src_reg, store_insn = NULL_RTX; rtx src_reg;
rtx_insn *store_insn = NULL;
reg_last_reload_reg[out_regno] = 0; reg_last_reload_reg[out_regno] = 0;
...@@ -8558,10 +8561,10 @@ emit_reload_insns (struct insn_chain *chain) ...@@ -8558,10 +8561,10 @@ emit_reload_insns (struct insn_chain *chain)
/* Go through the motions to emit INSN and test if it is strictly valid. /* Go through the motions to emit INSN and test if it is strictly valid.
Return the emitted insn if valid, else return NULL. */ Return the emitted insn if valid, else return NULL. */
static rtx static rtx_insn *
emit_insn_if_valid_for_reload (rtx insn) emit_insn_if_valid_for_reload (rtx insn)
{ {
rtx last = get_last_insn (); rtx_insn *last = get_last_insn ();
int code; int code;
insn = emit_insn (insn); insn = emit_insn (insn);
...@@ -8574,7 +8577,7 @@ emit_insn_if_valid_for_reload (rtx insn) ...@@ -8574,7 +8577,7 @@ emit_insn_if_valid_for_reload (rtx insn)
validity determination, i.e., the way it would after reload has validity determination, i.e., the way it would after reload has
completed. */ completed. */
if (constrain_operands (1)) if (constrain_operands (1))
return insn; return as_a <rtx_insn *> (insn);
} }
delete_insns_since (last); delete_insns_since (last);
...@@ -8587,10 +8590,10 @@ emit_insn_if_valid_for_reload (rtx insn) ...@@ -8587,10 +8590,10 @@ emit_insn_if_valid_for_reload (rtx insn)
Returns first insn emitted. */ Returns first insn emitted. */
static rtx static rtx_insn *
gen_reload (rtx out, rtx in, int opnum, enum reload_type type) gen_reload (rtx out, rtx in, int opnum, enum reload_type type)
{ {
rtx last = get_last_insn (); rtx_insn *last = get_last_insn ();
rtx tem; rtx tem;
#ifdef SECONDARY_MEMORY_NEEDED #ifdef SECONDARY_MEMORY_NEEDED
rtx tem1, tem2; rtx tem1, tem2;
...@@ -8655,7 +8658,8 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type) ...@@ -8655,7 +8658,8 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type)
`extract_insn' and it is simpler to emit and then delete the insn if `extract_insn' and it is simpler to emit and then delete the insn if
not valid than to dummy things up. */ not valid than to dummy things up. */
rtx op0, op1, tem, insn; rtx op0, op1, tem;
rtx_insn *insn;
enum insn_code code; enum insn_code code;
op0 = find_replacement (&XEXP (in, 0)); op0 = find_replacement (&XEXP (in, 0));
...@@ -8757,7 +8761,7 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type) ...@@ -8757,7 +8761,7 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type)
rtx insn; rtx insn;
rtx op1; rtx op1;
rtx out_moded; rtx out_moded;
rtx set; rtx_insn *set;
op1 = find_replacement (&XEXP (in, 0)); op1 = find_replacement (&XEXP (in, 0));
if (op1 != XEXP (in, 0)) if (op1 != XEXP (in, 0))
...@@ -8787,7 +8791,7 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type) ...@@ -8787,7 +8791,7 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type)
if (insn) if (insn)
{ {
set_unique_reg_note (insn, REG_EQUIV, in); set_unique_reg_note (insn, REG_EQUIV, in);
return insn; return as_a <rtx_insn *> (insn);
} }
fatal_insn ("failure trying to reload:", set); fatal_insn ("failure trying to reload:", set);
...@@ -8829,9 +8833,10 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type) ...@@ -8829,9 +8833,10 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type)
NEW_RELOAD_REG is reload register that reload J is using for REG. */ NEW_RELOAD_REG is reload register that reload J is using for REG. */
static void static void
delete_output_reload (rtx insn, int j, int last_reload_reg, rtx new_reload_reg) delete_output_reload (rtx_insn *insn, int j, int last_reload_reg,
rtx new_reload_reg)
{ {
rtx output_reload_insn = spill_reg_store[last_reload_reg]; rtx_insn *output_reload_insn = spill_reg_store[last_reload_reg];
rtx reg = spill_reg_stored_to[last_reload_reg]; rtx reg = spill_reg_stored_to[last_reload_reg];
int k; int k;
int n_occurrences; int n_occurrences;
...@@ -8944,7 +8949,7 @@ delete_output_reload (rtx insn, int j, int last_reload_reg, rtx new_reload_reg) ...@@ -8944,7 +8949,7 @@ delete_output_reload (rtx insn, int j, int last_reload_reg, rtx new_reload_reg)
&& REG_BASIC_BLOCK (REGNO (reg)) >= NUM_FIXED_BLOCKS && REG_BASIC_BLOCK (REGNO (reg)) >= NUM_FIXED_BLOCKS
&& find_regno_note (insn, REG_DEAD, REGNO (reg))) && find_regno_note (insn, REG_DEAD, REGNO (reg)))
{ {
rtx i2; rtx_insn *i2;
/* We know that it was used only between here and the beginning of /* We know that it was used only between here and the beginning of
the current basic block. (We also know that the last use before the current basic block. (We also know that the last use before
...@@ -9004,10 +9009,11 @@ delete_output_reload (rtx insn, int j, int last_reload_reg, rtx new_reload_reg) ...@@ -9004,10 +9009,11 @@ delete_output_reload (rtx insn, int j, int last_reload_reg, rtx new_reload_reg)
reload registers used in DEAD_INSN that are not used till CURRENT_INSN. reload registers used in DEAD_INSN that are not used till CURRENT_INSN.
CURRENT_INSN is being reloaded, so we have to check its reloads too. */ CURRENT_INSN is being reloaded, so we have to check its reloads too. */
static void static void
delete_address_reloads (rtx dead_insn, rtx current_insn) delete_address_reloads (rtx_insn *dead_insn, rtx_insn *current_insn)
{ {
rtx set = single_set (dead_insn); rtx set = single_set (dead_insn);
rtx set2, dst, prev, next; rtx set2, dst;
rtx_insn *prev, *next;
if (set) if (set)
{ {
rtx dst = SET_DEST (set); rtx dst = SET_DEST (set);
...@@ -9040,9 +9046,10 @@ delete_address_reloads (rtx dead_insn, rtx current_insn) ...@@ -9040,9 +9046,10 @@ delete_address_reloads (rtx dead_insn, rtx current_insn)
/* Subfunction of delete_address_reloads: process registers found in X. */ /* Subfunction of delete_address_reloads: process registers found in X. */
static void static void
delete_address_reloads_1 (rtx dead_insn, rtx x, rtx current_insn) delete_address_reloads_1 (rtx_insn *dead_insn, rtx x, rtx_insn *current_insn)
{ {
rtx prev, set, dst, i2; rtx_insn *prev, *i2;
rtx set, dst;
int i, j; int i, j;
enum rtx_code code = GET_CODE (x); enum rtx_code code = GET_CODE (x);
...@@ -9163,9 +9170,9 @@ inc_for_reload (rtx reloadreg, rtx in, rtx value, int inc_amount) ...@@ -9163,9 +9170,9 @@ inc_for_reload (rtx reloadreg, rtx in, rtx value, int inc_amount)
/* Nonzero if increment after copying. */ /* Nonzero if increment after copying. */
int post = (GET_CODE (value) == POST_DEC || GET_CODE (value) == POST_INC int post = (GET_CODE (value) == POST_DEC || GET_CODE (value) == POST_INC
|| GET_CODE (value) == POST_MODIFY); || GET_CODE (value) == POST_MODIFY);
rtx last; rtx_insn *last;
rtx inc; rtx inc;
rtx add_insn; rtx_insn *add_insn;
int code; int code;
rtx real_in = in == value ? incloc : in; rtx real_in = in == value ? incloc : in;
...@@ -9257,7 +9264,7 @@ inc_for_reload (rtx reloadreg, rtx in, rtx value, int inc_amount) ...@@ -9257,7 +9264,7 @@ inc_for_reload (rtx reloadreg, rtx in, rtx value, int inc_amount)
#ifdef AUTO_INC_DEC #ifdef AUTO_INC_DEC
static void static void
add_auto_inc_notes (rtx insn, rtx x) add_auto_inc_notes (rtx_insn *insn, rtx x)
{ {
enum rtx_code code = GET_CODE (x); enum rtx_code code = GET_CODE (x);
const char *fmt; const char *fmt;
......
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