INSN_LOCATION takes an rtx_insn
gcc/ChangeLog: 2014-09-09 David Malcolm <dmalcolm@redhat.com> * rtl.h (INSN_LOCATION): Strengthen param from const_rtx to const rtx_insn *, and from rtx to rtx_insn * for the other overloaded variant. (RTL_LOCATION): Add a checked cast to rtx_insn * when invoking INSN_LOCATION, since we know INSN_P holds. (insn_line): Strengthen param from const_rtx to const rtx_insn *. (insn_file): Likewise. (insn_scope): Likewise. (insn_location): Likewise. * config/mips/mips.c (mips16_gp_pseudo_reg): Strengthen local "insn" from rtx to rtx_insn *, introducing a new local rtx "set" for the result of gen_load_const_gp. * config/rs6000/rs6000-protos.h (output_call): Strengthen first param from rtx to rtx_insn *. * config/rs6000/rs6000.c (output_call): Likewise. * dwarf2out.c (dwarf2out_var_location): Likewise for local "prev", introducing a checked cast to rtx_sequence * and use of the insn method. * emit-rtl.c (emit_copy_of_insn_after): Strengthen both params from rtx to rtx_insn *. (insn_scope): Strengthen param from const_rtx to const rtx_insn *. (insn_line): Likewise. (insn_file): Likewise. (insn_location): Likewise. * emit-rtl.h (emit_copy_of_insn_after): Strengthen both params from rtx to rtx_insn *. * print-rtl.c (print_rtx): Introduce local "in_insn" via a checked cast, using it for calls to INSN_HAS_LOCATION and insn_location. * recog.c (peep2_attempt): Introduce local rtx_insn * "peepinsn" via a checked cast. * reorg.c (relax_delay_slots): Strengthen locals named "after" from rtx to rtx_insn *; use methods of "pat" for type-safety. From-SVN: r215084
This commit is contained in:
parent
d6e1e8b8d1
commit
a1950df341
11 changed files with 69 additions and 29 deletions
|
@ -1,3 +1,39 @@
|
|||
2014-09-09 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* rtl.h (INSN_LOCATION): Strengthen param from const_rtx to
|
||||
const rtx_insn *, and from rtx to rtx_insn * for the other
|
||||
overloaded variant.
|
||||
(RTL_LOCATION): Add a checked cast to rtx_insn * when invoking
|
||||
INSN_LOCATION, since we know INSN_P holds.
|
||||
(insn_line): Strengthen param from const_rtx to const rtx_insn *.
|
||||
(insn_file): Likewise.
|
||||
(insn_scope): Likewise.
|
||||
(insn_location): Likewise.
|
||||
|
||||
* config/mips/mips.c (mips16_gp_pseudo_reg): Strengthen local
|
||||
"insn" from rtx to rtx_insn *, introducing a new local rtx "set"
|
||||
for the result of gen_load_const_gp.
|
||||
* config/rs6000/rs6000-protos.h (output_call): Strengthen first
|
||||
param from rtx to rtx_insn *.
|
||||
* config/rs6000/rs6000.c (output_call): Likewise.
|
||||
* dwarf2out.c (dwarf2out_var_location): Likewise for local "prev",
|
||||
introducing a checked cast to rtx_sequence * and use of the insn
|
||||
method.
|
||||
* emit-rtl.c (emit_copy_of_insn_after): Strengthen both params
|
||||
from rtx to rtx_insn *.
|
||||
(insn_scope): Strengthen param from const_rtx to const rtx_insn *.
|
||||
(insn_line): Likewise.
|
||||
(insn_file): Likewise.
|
||||
(insn_location): Likewise.
|
||||
* emit-rtl.h (emit_copy_of_insn_after): Strengthen both params
|
||||
from rtx to rtx_insn *.
|
||||
* print-rtl.c (print_rtx): Introduce local "in_insn" via a checked
|
||||
cast, using it for calls to INSN_HAS_LOCATION and insn_location.
|
||||
* recog.c (peep2_attempt): Introduce local rtx_insn * "peepinsn"
|
||||
via a checked cast.
|
||||
* reorg.c (relax_delay_slots): Strengthen locals named "after"
|
||||
from rtx to rtx_insn *; use methods of "pat" for type-safety.
|
||||
|
||||
2014-09-09 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* combine.c (try_combine): Eliminate checked cast on result of
|
||||
|
|
|
@ -2932,7 +2932,6 @@ mips16_gp_pseudo_reg (void)
|
|||
{
|
||||
if (cfun->machine->mips16_gp_pseudo_rtx == NULL_RTX)
|
||||
{
|
||||
rtx insn;
|
||||
rtx_insn *scan;
|
||||
|
||||
cfun->machine->mips16_gp_pseudo_rtx = gen_reg_rtx (Pmode);
|
||||
|
@ -2943,8 +2942,8 @@ mips16_gp_pseudo_reg (void)
|
|||
while (NEXT_INSN (scan) && !INSN_P (NEXT_INSN (scan)))
|
||||
scan = NEXT_INSN (scan);
|
||||
|
||||
insn = gen_load_const_gp (cfun->machine->mips16_gp_pseudo_rtx);
|
||||
insn = emit_insn_after (insn, scan);
|
||||
rtx set = gen_load_const_gp (cfun->machine->mips16_gp_pseudo_rtx);
|
||||
rtx_insn *insn = emit_insn_after (set, scan);
|
||||
INSN_LOCATION (insn) = 0;
|
||||
|
||||
pop_topmost_sequence ();
|
||||
|
|
|
@ -211,7 +211,7 @@ extern void (*rs6000_target_modify_macros_ptr) (bool, HOST_WIDE_INT,
|
|||
HOST_WIDE_INT);
|
||||
|
||||
#if TARGET_MACHO
|
||||
char *output_call (rtx, rtx *, int, int);
|
||||
char *output_call (rtx_insn *, rtx *, int, int);
|
||||
#endif
|
||||
|
||||
#ifdef NO_DOLLAR_IN_LABEL
|
||||
|
|
|
@ -28929,7 +28929,7 @@ get_prev_label (tree function_name)
|
|||
CALL_DEST is the routine we are calling. */
|
||||
|
||||
char *
|
||||
output_call (rtx insn, rtx *operands, int dest_operand_number,
|
||||
output_call (rtx_insn *insn, rtx *operands, int dest_operand_number,
|
||||
int cookie_operand_number)
|
||||
{
|
||||
static char buf[256];
|
||||
|
|
|
@ -21435,7 +21435,8 @@ dwarf2out_var_location (rtx_insn *loc_note)
|
|||
{
|
||||
struct call_arg_loc_node *ca_loc
|
||||
= ggc_cleared_alloc<call_arg_loc_node> ();
|
||||
rtx prev = prev_real_insn (loc_note), x;
|
||||
rtx_insn *prev = prev_real_insn (loc_note);
|
||||
rtx x;
|
||||
ca_loc->call_arg_loc_note = loc_note;
|
||||
ca_loc->next = NULL;
|
||||
ca_loc->label = last_label;
|
||||
|
@ -21445,7 +21446,7 @@ dwarf2out_var_location (rtx_insn *loc_note)
|
|||
&& GET_CODE (PATTERN (prev)) == SEQUENCE
|
||||
&& CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
|
||||
if (!CALL_P (prev))
|
||||
prev = XVECEXP (PATTERN (prev), 0, 0);
|
||||
prev = as_a <rtx_sequence *> (PATTERN (prev))->insn (0);
|
||||
ca_loc->tail_call_p = SIBLING_CALL_P (prev);
|
||||
x = get_call_rtx_from (PATTERN (prev));
|
||||
if (x)
|
||||
|
|
|
@ -6144,7 +6144,7 @@ init_emit_once (void)
|
|||
Care updating of libcall regions if present. */
|
||||
|
||||
rtx_insn *
|
||||
emit_copy_of_insn_after (rtx insn, rtx after)
|
||||
emit_copy_of_insn_after (rtx_insn *insn, rtx_insn *after)
|
||||
{
|
||||
rtx_insn *new_rtx;
|
||||
rtx link;
|
||||
|
@ -6258,28 +6258,28 @@ curr_insn_location (void)
|
|||
|
||||
/* Return lexical scope block insn belongs to. */
|
||||
tree
|
||||
insn_scope (const_rtx insn)
|
||||
insn_scope (const rtx_insn *insn)
|
||||
{
|
||||
return LOCATION_BLOCK (INSN_LOCATION (insn));
|
||||
}
|
||||
|
||||
/* Return line number of the statement that produced this insn. */
|
||||
int
|
||||
insn_line (const_rtx insn)
|
||||
insn_line (const rtx_insn *insn)
|
||||
{
|
||||
return LOCATION_LINE (INSN_LOCATION (insn));
|
||||
}
|
||||
|
||||
/* Return source file of the statement that produced this insn. */
|
||||
const char *
|
||||
insn_file (const_rtx insn)
|
||||
insn_file (const rtx_insn *insn)
|
||||
{
|
||||
return LOCATION_FILE (INSN_LOCATION (insn));
|
||||
}
|
||||
|
||||
/* Return expanded location of the statement that produced this insn. */
|
||||
expanded_location
|
||||
insn_location (const_rtx insn)
|
||||
insn_location (const rtx_insn *insn)
|
||||
{
|
||||
return expand_location (INSN_LOCATION (insn));
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ extern rtx copy_insn_1 (rtx);
|
|||
extern rtx copy_insn (rtx);
|
||||
extern rtx_insn *copy_delay_slot_insn (rtx_insn *);
|
||||
extern rtx gen_int_mode (HOST_WIDE_INT, enum machine_mode);
|
||||
extern rtx_insn *emit_copy_of_insn_after (rtx, rtx);
|
||||
extern rtx_insn *emit_copy_of_insn_after (rtx_insn *, rtx_insn *);
|
||||
extern void set_reg_attrs_from_value (rtx, rtx);
|
||||
extern void set_reg_attrs_for_parm (rtx, rtx);
|
||||
extern void set_reg_attrs_for_decl_rtl (tree t, rtx x);
|
||||
|
|
|
@ -392,12 +392,14 @@ print_rtx (const_rtx in_rtx)
|
|||
if (i == 4 && INSN_P (in_rtx))
|
||||
{
|
||||
#ifndef GENERATOR_FILE
|
||||
const rtx_insn *in_insn = as_a <const rtx_insn *> (in_rtx);
|
||||
|
||||
/* Pretty-print insn locations. Ignore scoping as it is mostly
|
||||
redundant with line number information and do not print anything
|
||||
when there is no location information available. */
|
||||
if (INSN_HAS_LOCATION (as_a <const rtx_insn *> (in_rtx)))
|
||||
if (INSN_HAS_LOCATION (in_insn))
|
||||
{
|
||||
expanded_location xloc = insn_location (in_rtx);
|
||||
expanded_location xloc = insn_location (in_insn);
|
||||
fprintf (outfile, " %s:%i", xloc.file, xloc.line);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -3323,9 +3323,10 @@ peep2_attempt (basic_block bb, rtx uncast_insn, int match_len, rtx_insn *attempt
|
|||
eh_note = find_reg_note (peep2_insn_data[i].insn, REG_EH_REGION, NULL_RTX);
|
||||
|
||||
/* Replace the old sequence with the new. */
|
||||
rtx_insn *peepinsn = as_a <rtx_insn *> (peep2_insn_data[i].insn);
|
||||
last = emit_insn_after_setloc (attempt,
|
||||
peep2_insn_data[i].insn,
|
||||
INSN_LOCATION (peep2_insn_data[i].insn));
|
||||
INSN_LOCATION (peepinsn));
|
||||
before_try = PREV_INSN (insn);
|
||||
delete_insn_chain (insn, peep2_insn_data[i].insn, false);
|
||||
|
||||
|
|
12
gcc/reorg.c
12
gcc/reorg.c
|
@ -3297,7 +3297,7 @@ relax_delay_slots (rtx_insn *first)
|
|||
&& JUMP_P (next)
|
||||
&& PATTERN (next) == PATTERN (delay_insn))
|
||||
{
|
||||
rtx after;
|
||||
rtx_insn *after;
|
||||
int i;
|
||||
|
||||
/* Delete the RETURN and just execute the delay list insns.
|
||||
|
@ -3321,8 +3321,8 @@ relax_delay_slots (rtx_insn *first)
|
|||
gcc_assert (GET_CODE (pat) == SEQUENCE);
|
||||
add_insn_after (delay_insn, trial, NULL);
|
||||
after = delay_insn;
|
||||
for (i = 1; i < XVECLEN (pat, 0); i++)
|
||||
after = emit_copy_of_insn_after (XVECEXP (pat, 0, i), after);
|
||||
for (i = 1; i < pat->len (); i++)
|
||||
after = emit_copy_of_insn_after (pat->insn (i), after);
|
||||
delete_scheduled_jump (delay_insn);
|
||||
continue;
|
||||
}
|
||||
|
@ -3424,7 +3424,7 @@ relax_delay_slots (rtx_insn *first)
|
|||
#endif
|
||||
)
|
||||
{
|
||||
rtx after;
|
||||
rtx_insn *after;
|
||||
int i;
|
||||
|
||||
/* All this insn does is execute its delay list and jump to the
|
||||
|
@ -3450,8 +3450,8 @@ relax_delay_slots (rtx_insn *first)
|
|||
gcc_assert (GET_CODE (pat) == SEQUENCE);
|
||||
add_insn_after (delay_insn, trial, NULL);
|
||||
after = delay_insn;
|
||||
for (i = 1; i < XVECLEN (pat, 0); i++)
|
||||
after = emit_copy_of_insn_after (XVECEXP (pat, 0, i), after);
|
||||
for (i = 1; i < pat->len (); i++)
|
||||
after = emit_copy_of_insn_after (pat->insn (i), after);
|
||||
delete_scheduled_jump (delay_insn);
|
||||
continue;
|
||||
}
|
||||
|
|
15
gcc/rtl.h
15
gcc/rtl.h
|
@ -1369,12 +1369,12 @@ inline rtx& PATTERN (rtx insn)
|
|||
return XEXP (insn, 3);
|
||||
}
|
||||
|
||||
inline unsigned int INSN_LOCATION (const_rtx insn)
|
||||
inline unsigned int INSN_LOCATION (const rtx_insn *insn)
|
||||
{
|
||||
return XUINT (insn, 4);
|
||||
}
|
||||
|
||||
inline unsigned int& INSN_LOCATION (rtx insn)
|
||||
inline unsigned int& INSN_LOCATION (rtx_insn *insn)
|
||||
{
|
||||
return XUINT (insn, 4);
|
||||
}
|
||||
|
@ -1386,7 +1386,8 @@ inline bool INSN_HAS_LOCATION (const rtx_insn *insn)
|
|||
|
||||
/* LOCATION of an RTX if relevant. */
|
||||
#define RTL_LOCATION(X) (INSN_P (X) ? \
|
||||
INSN_LOCATION (X) : UNKNOWN_LOCATION)
|
||||
INSN_LOCATION (as_a <rtx_insn *> (X)) \
|
||||
: UNKNOWN_LOCATION)
|
||||
|
||||
/* Code number of instruction, from when it was recognized.
|
||||
-1 means this instruction has not been recognized yet. */
|
||||
|
@ -2644,10 +2645,10 @@ extern rtx_insn *next_cc0_user (rtx);
|
|||
extern rtx_insn *prev_cc0_setter (rtx);
|
||||
|
||||
/* In emit-rtl.c */
|
||||
extern int insn_line (const_rtx);
|
||||
extern const char * insn_file (const_rtx);
|
||||
extern tree insn_scope (const_rtx);
|
||||
extern expanded_location insn_location (const_rtx);
|
||||
extern int insn_line (const rtx_insn *);
|
||||
extern const char * insn_file (const rtx_insn *);
|
||||
extern tree insn_scope (const rtx_insn *);
|
||||
extern expanded_location insn_location (const rtx_insn *);
|
||||
extern location_t prologue_location, epilogue_location;
|
||||
|
||||
/* In jump.c */
|
||||
|
|
Loading…
Add table
Reference in a new issue