emit-rtl.c: more typesafety
This patch converts various rtx to rtx_insn * (or rtx_code_label *). It also convert the various "_loc" params from int to location_t gcc/ChangeLog: * config/arc/arc.c (hwloop_optimize): Strengthen local "end_label" from rtx to rtx_insn *. * config/bfin/bfin.c (hwloop_optimize): Likewise for local "label". (add_sched_insns_for_speculation): Likewise for local "target", converting usage of JUMP_LABEL to JUMP_LABEL_AS_INSN. * config/c6x/c6x.c (reorg_split_calls): Strengthen param "call_labels" from rtx_insn ** to rtx_code_label **. (reorg_emit_nops): Likewise. (c6x_reorg): Likewise for local "call_labels". * config/sh/sh-protos.h (get_dest_uid): Strengthen 1st param from rtx to rtx_insn *. * config/sh/sh.c (dump_table): Strengthen local "lab" from rtx to rtx_code_label *, adding safe_as_a <rtx_code_label *> casts to the loops over LABEL_REFS. (fixup_addr_diff_vecs): Add as_a <rtx_insn *> to usage of braf_label. (barrier_align): Convert usage of JUMP_LABEL to JUMP_LABEL_AS_INSN. (get_dest_uid): Strengthen param "label" from rtx to rtx_insn *. (split_branches): Strengthen local "olabel" from rtx to rtx_insn *, adding a safe_as_a cast. * emit-rtl.c (next_real_insn): Strengthen param from "rtx" to "rtx_insn *". (add_insn_after): Likewise for first two params. (add_insn_before): Likewise. (remove_insn): Likewise for param. (emit_pattern_before_noloc): Likewise for second and third params. (emit_jump_insn_before_noloc): Convert NULL_RTX to NULL. (emit_call_insn_before_noloc): Likewise. (emit_debug_insn_before_noloc): Strengthen "before" param from "rtx" to "rtx_insn *". (emit_barrier_before): Likewise. (emit_label_before): Strengthen "label" param from "rtx" to "rtx_code_label *". Strengthen "before" param from "rtx" to "rtx_insn *". (emit_insn_after_1): Strengthen "after" param from "rtx" to "rtx_insn *". (emit_pattern_after_noloc): Likewise. (emit_insn_after_noloc): Likewise. (emit_jump_insn_after_noloc): Likewise. (emit_call_insn_after_noloc): Likewise. (emit_debug_insn_after_noloc): Likewise. (emit_barrier_after): Likewise. (emit_label_after): Likewise for both params. (emit_pattern_after_setloc): Likewise for "after" param. Convert "loc" param from "int" to "location_t". (emit_insn_after_setloc): Likewise. (emit_jump_insn_after_setloc): Likewise. (emit_call_insn_after_setloc): Likewise. (emit_debug_insn_after_setloc): Likewise. (emit_pattern_before_setloc): Likewise for "before" param. Convert "loc" param from "int" to "location_t". (emit_pattern_before): Convert NULL_RTX to NULL. (emit_insn_before_setloc): Convert "loc" param from "int" to "location_t". (emit_jump_insn_before_setloc): Likewise. (emit_call_insn_before_setloc): Likewise. (emit_debug_insn_before_setloc): Strengthen "before" param from rtx to rtx_insn *. Convert "loc" param from "int" to "location_t". * rtl.h (emit_insn_before_setloc, emit_jump_insn_before_setloc, emit_call_insn_before_setloc, emit_debug_insn_before_setloc): Convert 3rd param from "int" to "location_t". (emit_barrier_before, emit_barrier_after, next_real_insn): Strengthen param from rtx to rtx_insn *. (emit_label_before): Strengthen 1st param from "rtx" to "rtx_code_label *". Strengthen 2nd param from "rtx" to "rtx_insn *". (emit_insn_after_noloc, emit_jump_insn_after_noloc, emit_call_insn_after_noloc, emit_debug_insn_after_noloc): Strengthen 2nd param from "rtx" to "rtx_insn *". (emit_insn_after_setloc, emit_jump_insn_after_setloc) emit_call_insn_after_setloc, emit_debug_insn_after_setloc): Likewise. Convert 3rd param from "int" to "location_t". (emit_label_after): Strengthen 1st param from "rtx" to "rtx_code_label *". (next_real_insn, remove_insn): Strengthen param from "rtx" to "rtx_insn *". (add_insn_before, add_insn_after): Strengthen 1st and 2nd params from "rtx" to "rtx_insn *". From-SVN: r261547
This commit is contained in:
parent
b4da704c6e
commit
4dea3bff79
8 changed files with 166 additions and 87 deletions
|
@ -1,3 +1,85 @@
|
|||
2018-06-13 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* config/arc/arc.c (hwloop_optimize): Strengthen local "end_label"
|
||||
from rtx to rtx_insn *.
|
||||
* config/bfin/bfin.c (hwloop_optimize): Likewise for local
|
||||
"label".
|
||||
(add_sched_insns_for_speculation): Likewise for local "target",
|
||||
converting usage of JUMP_LABEL to JUMP_LABEL_AS_INSN.
|
||||
* config/c6x/c6x.c (reorg_split_calls): Strengthen param "call_labels"
|
||||
from rtx_insn ** to rtx_code_label **.
|
||||
(reorg_emit_nops): Likewise.
|
||||
(c6x_reorg): Likewise for local "call_labels".
|
||||
* config/sh/sh-protos.h (get_dest_uid): Strengthen 1st param from
|
||||
rtx to rtx_insn *.
|
||||
* config/sh/sh.c (dump_table): Strengthen local "lab" from rtx to
|
||||
rtx_code_label *, adding safe_as_a <rtx_code_label *> casts to
|
||||
the loops over LABEL_REFS.
|
||||
(fixup_addr_diff_vecs): Add as_a <rtx_insn *> to usage of
|
||||
braf_label.
|
||||
(barrier_align): Convert usage of JUMP_LABEL to JUMP_LABEL_AS_INSN.
|
||||
(get_dest_uid): Strengthen param "label" from rtx to rtx_insn *.
|
||||
(split_branches): Strengthen local "olabel" from rtx to
|
||||
rtx_insn *, adding a safe_as_a cast.
|
||||
* emit-rtl.c (next_real_insn): Strengthen param from "rtx"
|
||||
to "rtx_insn *".
|
||||
(add_insn_after): Likewise for first two params.
|
||||
(add_insn_before): Likewise.
|
||||
(remove_insn): Likewise for param.
|
||||
(emit_pattern_before_noloc): Likewise for second and third params.
|
||||
(emit_jump_insn_before_noloc): Convert NULL_RTX to NULL.
|
||||
(emit_call_insn_before_noloc): Likewise.
|
||||
(emit_debug_insn_before_noloc): Strengthen "before" param from "rtx"
|
||||
to "rtx_insn *".
|
||||
(emit_barrier_before): Likewise.
|
||||
(emit_label_before): Strengthen "label" param from "rtx" to
|
||||
"rtx_code_label *". Strengthen "before" param from "rtx" to
|
||||
"rtx_insn *".
|
||||
(emit_insn_after_1): Strengthen "after" param from "rtx" to
|
||||
"rtx_insn *".
|
||||
(emit_pattern_after_noloc): Likewise.
|
||||
(emit_insn_after_noloc): Likewise.
|
||||
(emit_jump_insn_after_noloc): Likewise.
|
||||
(emit_call_insn_after_noloc): Likewise.
|
||||
(emit_debug_insn_after_noloc): Likewise.
|
||||
(emit_barrier_after): Likewise.
|
||||
(emit_label_after): Likewise for both params.
|
||||
(emit_pattern_after_setloc): Likewise for "after" param. Convert
|
||||
"loc" param from "int" to "location_t".
|
||||
(emit_insn_after_setloc): Likewise.
|
||||
(emit_jump_insn_after_setloc): Likewise.
|
||||
(emit_call_insn_after_setloc): Likewise.
|
||||
(emit_debug_insn_after_setloc): Likewise.
|
||||
(emit_pattern_before_setloc): Likewise for "before" param. Convert
|
||||
"loc" param from "int" to "location_t".
|
||||
(emit_pattern_before): Convert NULL_RTX to NULL.
|
||||
(emit_insn_before_setloc): Convert "loc" param from "int" to
|
||||
"location_t".
|
||||
(emit_jump_insn_before_setloc): Likewise.
|
||||
(emit_call_insn_before_setloc): Likewise.
|
||||
(emit_debug_insn_before_setloc): Strengthen "before" param from rtx to
|
||||
rtx_insn *. Convert "loc" param from "int" to "location_t".
|
||||
* rtl.h (emit_insn_before_setloc, emit_jump_insn_before_setloc,
|
||||
emit_call_insn_before_setloc, emit_debug_insn_before_setloc):
|
||||
Convert 3rd param from "int" to "location_t".
|
||||
(emit_barrier_before, emit_barrier_after, next_real_insn):
|
||||
Strengthen param from rtx to rtx_insn *.
|
||||
(emit_label_before): Strengthen 1st param from "rtx" to
|
||||
"rtx_code_label *". Strengthen 2nd param from "rtx" to
|
||||
"rtx_insn *".
|
||||
(emit_insn_after_noloc, emit_jump_insn_after_noloc,
|
||||
emit_call_insn_after_noloc, emit_debug_insn_after_noloc):
|
||||
Strengthen 2nd param from "rtx" to "rtx_insn *".
|
||||
(emit_insn_after_setloc, emit_jump_insn_after_setloc)
|
||||
emit_call_insn_after_setloc, emit_debug_insn_after_setloc):
|
||||
Likewise. Convert 3rd param from "int" to "location_t".
|
||||
(emit_label_after): Strengthen 1st param from "rtx" to
|
||||
"rtx_code_label *".
|
||||
(next_real_insn, remove_insn): Strengthen param from "rtx" to
|
||||
"rtx_insn *".
|
||||
(add_insn_before, add_insn_after): Strengthen 1st and 2nd params
|
||||
from "rtx" to "rtx_insn *".
|
||||
|
||||
2018-06-13 Jan Hubicka <hubicka@gcc.gnu.org>
|
||||
|
||||
* cgraph.c (cgraph_node::get_untransformed_body): Dump function
|
||||
|
|
|
@ -7306,8 +7306,8 @@ hwloop_optimize (hwloop_info loop)
|
|||
int i;
|
||||
edge entry_edge;
|
||||
basic_block entry_bb, bb;
|
||||
rtx iter_reg, end_label;
|
||||
rtx_insn *insn, *seq, *entry_after, *last_insn;
|
||||
rtx iter_reg;
|
||||
rtx_insn *insn, *seq, *entry_after, *last_insn, *end_label;
|
||||
unsigned int length;
|
||||
bool need_fix = false;
|
||||
rtx lp_reg = gen_rtx_REG (SImode, LP_COUNT);
|
||||
|
|
|
@ -3773,7 +3773,7 @@ hwloop_optimize (hwloop_info loop)
|
|||
point. */
|
||||
if (!loop->incoming_src && loop->head != loop->incoming_dest)
|
||||
{
|
||||
rtx label = BB_HEAD (loop->incoming_dest);
|
||||
rtx_insn *label = BB_HEAD (loop->incoming_dest);
|
||||
/* If we're jumping to the final basic block in the loop, and there's
|
||||
only one cheap instruction before the end (typically an increment of
|
||||
an induction variable), we can just emit a copy here instead of a
|
||||
|
@ -4607,7 +4607,7 @@ add_sched_insns_for_speculation (void)
|
|||
&& any_condjump_p (insn)
|
||||
&& (cbranch_predicted_taken_p (insn)))
|
||||
{
|
||||
rtx target = JUMP_LABEL (insn);
|
||||
rtx_insn *target = JUMP_LABEL_AS_INSN (insn);
|
||||
rtx_insn *next = next_real_insn (target);
|
||||
|
||||
if (GET_CODE (PATTERN (next)) == UNSPEC_VOLATILE
|
||||
|
|
|
@ -4835,7 +4835,7 @@ find_last_same_clock (rtx_insn *insn)
|
|||
the SEQUENCEs that represent execute packets. */
|
||||
|
||||
static void
|
||||
reorg_split_calls (rtx_insn **call_labels)
|
||||
reorg_split_calls (rtx_code_label **call_labels)
|
||||
{
|
||||
unsigned int reservation_mask = 0;
|
||||
rtx_insn *insn = get_insns ();
|
||||
|
@ -5009,7 +5009,7 @@ reorg_split_calls (rtx_insn **call_labels)
|
|||
scheduling was run earlier. */
|
||||
|
||||
static void
|
||||
reorg_emit_nops (rtx_insn **call_labels)
|
||||
reorg_emit_nops (rtx_code_label **call_labels)
|
||||
{
|
||||
bool first;
|
||||
rtx last_call;
|
||||
|
@ -5947,7 +5947,7 @@ c6x_reorg (void)
|
|||
}
|
||||
sched_no_dce = false;
|
||||
|
||||
rtx_insn **call_labels = XCNEWVEC (rtx_insn *, get_max_uid () + 1);
|
||||
rtx_code_label **call_labels = XCNEWVEC (rtx_code_label *, get_max_uid () + 1);
|
||||
|
||||
reorg_split_calls (call_labels);
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ extern int shl_sext_length (rtx);
|
|||
extern bool gen_shl_sext (rtx, rtx, rtx, rtx);
|
||||
extern int regs_used (rtx, int);
|
||||
extern void fixup_addr_diff_vecs (rtx_insn *);
|
||||
extern int get_dest_uid (rtx, int);
|
||||
extern int get_dest_uid (rtx_insn *, int);
|
||||
extern void final_prescan_insn (rtx_insn *, rtx *, int);
|
||||
extern enum tls_model tls_symbolic_operand (rtx, machine_mode);
|
||||
extern bool system_reg_operand (rtx, machine_mode);
|
||||
|
|
|
@ -4583,7 +4583,7 @@ dump_table (rtx_insn *start, rtx_insn *barrier)
|
|||
{
|
||||
rtx_insn *scan = barrier;
|
||||
bool need_align = true;
|
||||
rtx lab;
|
||||
rtx_code_label *lab;
|
||||
label_ref_list_t ref;
|
||||
bool have_df = false;
|
||||
|
||||
|
@ -4600,7 +4600,8 @@ dump_table (rtx_insn *start, rtx_insn *barrier)
|
|||
scan = emit_insn_after (gen_align_2 (), scan);
|
||||
need_align = false;
|
||||
}
|
||||
for (lab = p->label; lab; lab = LABEL_REFS (lab))
|
||||
for (lab = p->label; lab;
|
||||
lab = safe_as_a <rtx_code_label *> (LABEL_REFS (lab)))
|
||||
scan = emit_label_after (lab, scan);
|
||||
scan = emit_insn_after (gen_consttable_2 (p->value, const0_rtx),
|
||||
scan);
|
||||
|
@ -4627,7 +4628,7 @@ dump_table (rtx_insn *start, rtx_insn *barrier)
|
|||
rtx src = SET_SRC (XVECEXP (PATTERN (start), 0, 0));
|
||||
rtx lab = XEXP (XVECEXP (src, 0, 3), 0);
|
||||
|
||||
scan = emit_label_after (lab, scan);
|
||||
scan = emit_label_after (as_a <rtx_insn *> (lab), scan);
|
||||
}
|
||||
}
|
||||
if (TARGET_FMOVD && TARGET_ALIGN_DOUBLE && have_df)
|
||||
|
@ -4650,7 +4651,8 @@ dump_table (rtx_insn *start, rtx_insn *barrier)
|
|||
case E_SFmode:
|
||||
if (align_insn && !p->part_of_sequence_p)
|
||||
{
|
||||
for (lab = p->label; lab; lab = LABEL_REFS (lab))
|
||||
for (lab = p->label; lab;
|
||||
lab = safe_as_a <rtx_code_label *> (LABEL_REFS (lab)))
|
||||
emit_label_before (lab, align_insn);
|
||||
emit_insn_before (gen_consttable_4 (p->value, const0_rtx),
|
||||
align_insn);
|
||||
|
@ -4666,7 +4668,8 @@ dump_table (rtx_insn *start, rtx_insn *barrier)
|
|||
}
|
||||
else
|
||||
{
|
||||
for (lab = p->label; lab; lab = LABEL_REFS (lab))
|
||||
for (lab = p->label; lab;
|
||||
lab = safe_as_a <rtx_code_label *> (LABEL_REFS (lab)))
|
||||
scan = emit_label_after (lab, scan);
|
||||
scan = emit_insn_after (gen_consttable_4 (p->value,
|
||||
const0_rtx), scan);
|
||||
|
@ -4682,7 +4685,8 @@ dump_table (rtx_insn *start, rtx_insn *barrier)
|
|||
}
|
||||
/* FALLTHRU */
|
||||
case E_DImode:
|
||||
for (lab = p->label; lab; lab = LABEL_REFS (lab))
|
||||
for (lab = p->label; lab;
|
||||
lab = safe_as_a <rtx_code_label *> (LABEL_REFS (lab)))
|
||||
scan = emit_label_after (lab, scan);
|
||||
scan = emit_insn_after (gen_consttable_8 (p->value, const0_rtx),
|
||||
scan);
|
||||
|
@ -4721,7 +4725,8 @@ dump_table (rtx_insn *start, rtx_insn *barrier)
|
|||
scan = emit_label_after (gen_label_rtx (), scan);
|
||||
scan = emit_insn_after (gen_align_4 (), scan);
|
||||
}
|
||||
for (lab = p->label; lab; lab = LABEL_REFS (lab))
|
||||
for (lab = p->label; lab;
|
||||
lab = safe_as_a <rtx_code_label *> (LABEL_REFS (lab)))
|
||||
scan = emit_label_after (lab, scan);
|
||||
scan = emit_insn_after (gen_consttable_4 (p->value, const0_rtx),
|
||||
scan);
|
||||
|
@ -4734,7 +4739,8 @@ dump_table (rtx_insn *start, rtx_insn *barrier)
|
|||
scan = emit_label_after (gen_label_rtx (), scan);
|
||||
scan = emit_insn_after (gen_align_4 (), scan);
|
||||
}
|
||||
for (lab = p->label; lab; lab = LABEL_REFS (lab))
|
||||
for (lab = p->label; lab;
|
||||
lab = safe_as_a <rtx_code_label *> (LABEL_REFS (lab)))
|
||||
scan = emit_label_after (lab, scan);
|
||||
scan = emit_insn_after (gen_consttable_8 (p->value, const0_rtx),
|
||||
scan);
|
||||
|
@ -5706,7 +5712,7 @@ fixup_addr_diff_vecs (rtx_insn *first)
|
|||
/* Emit the reference label of the braf where it belongs, right after
|
||||
the casesi_jump_2 (i.e. braf). */
|
||||
braf_label = XEXP (XEXP (SET_SRC (XVECEXP (prevpat, 0, 0)), 1), 0);
|
||||
emit_label_after (braf_label, prev);
|
||||
emit_label_after (as_a <rtx_insn *> (braf_label), prev);
|
||||
|
||||
/* Fix up the ADDR_DIF_VEC to be relative
|
||||
to the reference address of the braf. */
|
||||
|
@ -5810,7 +5816,7 @@ barrier_align (rtx_insn *barrier_or_label)
|
|||
{
|
||||
rtx_insn *x;
|
||||
if (jump_to_next
|
||||
|| next_real_insn (JUMP_LABEL (prev)) == next
|
||||
|| next_real_insn (JUMP_LABEL_AS_INSN (prev)) == next
|
||||
/* If relax_delay_slots() decides NEXT was redundant
|
||||
with some previous instruction, it will have
|
||||
redirected PREV's jump to the following insn. */
|
||||
|
@ -6310,7 +6316,7 @@ sh_reorg (void)
|
|||
|
||||
/* Return the UID of the insn that follows the specified label. */
|
||||
int
|
||||
get_dest_uid (rtx label, int max_uid)
|
||||
get_dest_uid (rtx_insn *label, int max_uid)
|
||||
{
|
||||
rtx_insn *dest = next_real_insn (label);
|
||||
|
||||
|
@ -6370,7 +6376,7 @@ split_branches (rtx_insn *first)
|
|||
if (get_attr_length (insn) > 4)
|
||||
{
|
||||
rtx src = SET_SRC (PATTERN (insn));
|
||||
rtx olabel = XEXP (XEXP (src, 1), 0);
|
||||
rtx_insn *olabel = safe_as_a <rtx_insn *> (XEXP (XEXP (src, 1), 0));
|
||||
int addr = INSN_ADDRESSES (INSN_UID (insn));
|
||||
rtx_insn *label = 0;
|
||||
int dest_uid = get_dest_uid (olabel, max_uid);
|
||||
|
|
|
@ -3602,10 +3602,8 @@ prev_nonnote_nondebug_insn_bb (rtx_insn *insn)
|
|||
SEQUENCEs. */
|
||||
|
||||
rtx_insn *
|
||||
next_real_insn (rtx uncast_insn)
|
||||
next_real_insn (rtx_insn *insn)
|
||||
{
|
||||
rtx_insn *insn = safe_as_a <rtx_insn *> (uncast_insn);
|
||||
|
||||
while (insn)
|
||||
{
|
||||
insn = NEXT_INSN (insn);
|
||||
|
@ -4230,10 +4228,8 @@ add_insn_before_nobb (rtx_insn *insn, rtx_insn *before)
|
|||
they know how to update a SEQUENCE. */
|
||||
|
||||
void
|
||||
add_insn_after (rtx uncast_insn, rtx uncast_after, basic_block bb)
|
||||
add_insn_after (rtx_insn *insn, rtx_insn *after, basic_block bb)
|
||||
{
|
||||
rtx_insn *insn = as_a <rtx_insn *> (uncast_insn);
|
||||
rtx_insn *after = as_a <rtx_insn *> (uncast_after);
|
||||
add_insn_after_nobb (insn, after);
|
||||
if (!BARRIER_P (after)
|
||||
&& !BARRIER_P (insn)
|
||||
|
@ -4260,10 +4256,8 @@ add_insn_after (rtx uncast_insn, rtx uncast_after, basic_block bb)
|
|||
they know how to update a SEQUENCE. */
|
||||
|
||||
void
|
||||
add_insn_before (rtx uncast_insn, rtx uncast_before, basic_block bb)
|
||||
add_insn_before (rtx_insn *insn, rtx_insn *before, basic_block bb)
|
||||
{
|
||||
rtx_insn *insn = as_a <rtx_insn *> (uncast_insn);
|
||||
rtx_insn *before = as_a <rtx_insn *> (uncast_before);
|
||||
add_insn_before_nobb (insn, before);
|
||||
|
||||
if (!bb
|
||||
|
@ -4313,9 +4307,8 @@ set_insn_deleted (rtx insn)
|
|||
To really delete an insn and related DF information, use delete_insn. */
|
||||
|
||||
void
|
||||
remove_insn (rtx uncast_insn)
|
||||
remove_insn (rtx_insn *insn)
|
||||
{
|
||||
rtx_insn *insn = as_a <rtx_insn *> (uncast_insn);
|
||||
rtx_insn *next = NEXT_INSN (insn);
|
||||
rtx_insn *prev = PREV_INSN (insn);
|
||||
basic_block bb;
|
||||
|
@ -4518,7 +4511,8 @@ reorder_insns (rtx_insn *from, rtx_insn *to, rtx_insn *after)
|
|||
generated would almost certainly die right after it was created. */
|
||||
|
||||
static rtx_insn *
|
||||
emit_pattern_before_noloc (rtx x, rtx before, rtx last, basic_block bb,
|
||||
emit_pattern_before_noloc (rtx x, rtx_insn *before, rtx_insn *last,
|
||||
basic_block bb,
|
||||
rtx_insn *(*make_raw) (rtx))
|
||||
{
|
||||
rtx_insn *insn;
|
||||
|
@ -4526,7 +4520,7 @@ emit_pattern_before_noloc (rtx x, rtx before, rtx last, basic_block bb,
|
|||
gcc_assert (before);
|
||||
|
||||
if (x == NULL_RTX)
|
||||
return safe_as_a <rtx_insn *> (last);
|
||||
return last;
|
||||
|
||||
switch (GET_CODE (x))
|
||||
{
|
||||
|
@ -4559,7 +4553,7 @@ emit_pattern_before_noloc (rtx x, rtx before, rtx last, basic_block bb,
|
|||
break;
|
||||
}
|
||||
|
||||
return safe_as_a <rtx_insn *> (last);
|
||||
return last;
|
||||
}
|
||||
|
||||
/* Make X be output before the instruction BEFORE. */
|
||||
|
@ -4577,7 +4571,7 @@ rtx_jump_insn *
|
|||
emit_jump_insn_before_noloc (rtx x, rtx_insn *before)
|
||||
{
|
||||
return as_a <rtx_jump_insn *> (
|
||||
emit_pattern_before_noloc (x, before, NULL_RTX, NULL,
|
||||
emit_pattern_before_noloc (x, before, NULL, NULL,
|
||||
make_jump_insn_raw));
|
||||
}
|
||||
|
||||
|
@ -4587,7 +4581,7 @@ emit_jump_insn_before_noloc (rtx x, rtx_insn *before)
|
|||
rtx_insn *
|
||||
emit_call_insn_before_noloc (rtx x, rtx_insn *before)
|
||||
{
|
||||
return emit_pattern_before_noloc (x, before, NULL_RTX, NULL,
|
||||
return emit_pattern_before_noloc (x, before, NULL, NULL,
|
||||
make_call_insn_raw);
|
||||
}
|
||||
|
||||
|
@ -4595,9 +4589,9 @@ emit_call_insn_before_noloc (rtx x, rtx_insn *before)
|
|||
and output it before the instruction BEFORE. */
|
||||
|
||||
rtx_insn *
|
||||
emit_debug_insn_before_noloc (rtx x, rtx before)
|
||||
emit_debug_insn_before_noloc (rtx x, rtx_insn *before)
|
||||
{
|
||||
return emit_pattern_before_noloc (x, before, NULL_RTX, NULL,
|
||||
return emit_pattern_before_noloc (x, before, NULL, NULL,
|
||||
make_debug_insn_raw);
|
||||
}
|
||||
|
||||
|
@ -4605,7 +4599,7 @@ emit_debug_insn_before_noloc (rtx x, rtx before)
|
|||
and output it before the insn BEFORE. */
|
||||
|
||||
rtx_barrier *
|
||||
emit_barrier_before (rtx before)
|
||||
emit_barrier_before (rtx_insn *before)
|
||||
{
|
||||
rtx_barrier *insn = as_a <rtx_barrier *> (rtx_alloc (BARRIER));
|
||||
|
||||
|
@ -4618,21 +4612,20 @@ emit_barrier_before (rtx before)
|
|||
/* Emit the label LABEL before the insn BEFORE. */
|
||||
|
||||
rtx_code_label *
|
||||
emit_label_before (rtx label, rtx_insn *before)
|
||||
emit_label_before (rtx_code_label *label, rtx_insn *before)
|
||||
{
|
||||
gcc_checking_assert (INSN_UID (label) == 0);
|
||||
INSN_UID (label) = cur_insn_uid++;
|
||||
add_insn_before (label, before, NULL);
|
||||
return as_a <rtx_code_label *> (label);
|
||||
return label;
|
||||
}
|
||||
|
||||
/* Helper for emit_insn_after, handles lists of instructions
|
||||
efficiently. */
|
||||
|
||||
static rtx_insn *
|
||||
emit_insn_after_1 (rtx_insn *first, rtx uncast_after, basic_block bb)
|
||||
emit_insn_after_1 (rtx_insn *first, rtx_insn *after, basic_block bb)
|
||||
{
|
||||
rtx_insn *after = safe_as_a <rtx_insn *> (uncast_after);
|
||||
rtx_insn *last;
|
||||
rtx_insn *after_after;
|
||||
if (!bb && !BARRIER_P (after))
|
||||
|
@ -4674,10 +4667,9 @@ emit_insn_after_1 (rtx_insn *first, rtx uncast_after, basic_block bb)
|
|||
}
|
||||
|
||||
static rtx_insn *
|
||||
emit_pattern_after_noloc (rtx x, rtx uncast_after, basic_block bb,
|
||||
emit_pattern_after_noloc (rtx x, rtx_insn *after, basic_block bb,
|
||||
rtx_insn *(*make_raw)(rtx))
|
||||
{
|
||||
rtx_insn *after = safe_as_a <rtx_insn *> (uncast_after);
|
||||
rtx_insn *last = after;
|
||||
|
||||
gcc_assert (after);
|
||||
|
@ -4716,7 +4708,7 @@ emit_pattern_after_noloc (rtx x, rtx uncast_after, basic_block bb,
|
|||
BB is NULL, an attempt is made to infer the BB from AFTER. */
|
||||
|
||||
rtx_insn *
|
||||
emit_insn_after_noloc (rtx x, rtx after, basic_block bb)
|
||||
emit_insn_after_noloc (rtx x, rtx_insn *after, basic_block bb)
|
||||
{
|
||||
return emit_pattern_after_noloc (x, after, bb, make_insn_raw);
|
||||
}
|
||||
|
@ -4726,7 +4718,7 @@ emit_insn_after_noloc (rtx x, rtx after, basic_block bb)
|
|||
and output it after the insn AFTER. */
|
||||
|
||||
rtx_jump_insn *
|
||||
emit_jump_insn_after_noloc (rtx x, rtx after)
|
||||
emit_jump_insn_after_noloc (rtx x, rtx_insn *after)
|
||||
{
|
||||
return as_a <rtx_jump_insn *> (
|
||||
emit_pattern_after_noloc (x, after, NULL, make_jump_insn_raw));
|
||||
|
@ -4736,7 +4728,7 @@ emit_jump_insn_after_noloc (rtx x, rtx after)
|
|||
and output it after the instruction AFTER. */
|
||||
|
||||
rtx_insn *
|
||||
emit_call_insn_after_noloc (rtx x, rtx after)
|
||||
emit_call_insn_after_noloc (rtx x, rtx_insn *after)
|
||||
{
|
||||
return emit_pattern_after_noloc (x, after, NULL, make_call_insn_raw);
|
||||
}
|
||||
|
@ -4745,7 +4737,7 @@ emit_call_insn_after_noloc (rtx x, rtx after)
|
|||
and output it after the instruction AFTER. */
|
||||
|
||||
rtx_insn *
|
||||
emit_debug_insn_after_noloc (rtx x, rtx after)
|
||||
emit_debug_insn_after_noloc (rtx x, rtx_insn *after)
|
||||
{
|
||||
return emit_pattern_after_noloc (x, after, NULL, make_debug_insn_raw);
|
||||
}
|
||||
|
@ -4754,7 +4746,7 @@ emit_debug_insn_after_noloc (rtx x, rtx after)
|
|||
and output it after the insn AFTER. */
|
||||
|
||||
rtx_barrier *
|
||||
emit_barrier_after (rtx after)
|
||||
emit_barrier_after (rtx_insn *after)
|
||||
{
|
||||
rtx_barrier *insn = as_a <rtx_barrier *> (rtx_alloc (BARRIER));
|
||||
|
||||
|
@ -4767,12 +4759,12 @@ emit_barrier_after (rtx after)
|
|||
/* Emit the label LABEL after the insn AFTER. */
|
||||
|
||||
rtx_insn *
|
||||
emit_label_after (rtx label, rtx_insn *after)
|
||||
emit_label_after (rtx_insn *label, rtx_insn *after)
|
||||
{
|
||||
gcc_checking_assert (INSN_UID (label) == 0);
|
||||
INSN_UID (label) = cur_insn_uid++;
|
||||
add_insn_after (label, after, NULL);
|
||||
return as_a <rtx_insn *> (label);
|
||||
return label;
|
||||
}
|
||||
|
||||
/* Notes require a bit of special handling: Some notes need to have their
|
||||
|
@ -4842,10 +4834,9 @@ emit_note_before (enum insn_note subtype, rtx_insn *before)
|
|||
MAKE_RAW indicates how to turn PATTERN into a real insn. */
|
||||
|
||||
static rtx_insn *
|
||||
emit_pattern_after_setloc (rtx pattern, rtx uncast_after, int loc,
|
||||
emit_pattern_after_setloc (rtx pattern, rtx_insn *after, location_t loc,
|
||||
rtx_insn *(*make_raw) (rtx))
|
||||
{
|
||||
rtx_insn *after = safe_as_a <rtx_insn *> (uncast_after);
|
||||
rtx_insn *last = emit_pattern_after_noloc (pattern, after, NULL, make_raw);
|
||||
|
||||
if (pattern == NULL_RTX || !loc)
|
||||
|
@ -4889,7 +4880,7 @@ emit_pattern_after (rtx pattern, rtx uncast_after, bool skip_debug_insns,
|
|||
|
||||
/* Like emit_insn_after_noloc, but set INSN_LOCATION according to LOC. */
|
||||
rtx_insn *
|
||||
emit_insn_after_setloc (rtx pattern, rtx after, int loc)
|
||||
emit_insn_after_setloc (rtx pattern, rtx_insn *after, location_t loc)
|
||||
{
|
||||
return emit_pattern_after_setloc (pattern, after, loc, make_insn_raw);
|
||||
}
|
||||
|
@ -4903,7 +4894,7 @@ emit_insn_after (rtx pattern, rtx after)
|
|||
|
||||
/* Like emit_jump_insn_after_noloc, but set INSN_LOCATION according to LOC. */
|
||||
rtx_jump_insn *
|
||||
emit_jump_insn_after_setloc (rtx pattern, rtx after, int loc)
|
||||
emit_jump_insn_after_setloc (rtx pattern, rtx_insn *after, location_t loc)
|
||||
{
|
||||
return as_a <rtx_jump_insn *> (
|
||||
emit_pattern_after_setloc (pattern, after, loc, make_jump_insn_raw));
|
||||
|
@ -4919,7 +4910,7 @@ emit_jump_insn_after (rtx pattern, rtx after)
|
|||
|
||||
/* Like emit_call_insn_after_noloc, but set INSN_LOCATION according to LOC. */
|
||||
rtx_insn *
|
||||
emit_call_insn_after_setloc (rtx pattern, rtx after, int loc)
|
||||
emit_call_insn_after_setloc (rtx pattern, rtx_insn *after, location_t loc)
|
||||
{
|
||||
return emit_pattern_after_setloc (pattern, after, loc, make_call_insn_raw);
|
||||
}
|
||||
|
@ -4933,7 +4924,7 @@ emit_call_insn_after (rtx pattern, rtx after)
|
|||
|
||||
/* Like emit_debug_insn_after_noloc, but set INSN_LOCATION according to LOC. */
|
||||
rtx_insn *
|
||||
emit_debug_insn_after_setloc (rtx pattern, rtx after, int loc)
|
||||
emit_debug_insn_after_setloc (rtx pattern, rtx_insn *after, location_t loc)
|
||||
{
|
||||
return emit_pattern_after_setloc (pattern, after, loc, make_debug_insn_raw);
|
||||
}
|
||||
|
@ -4951,13 +4942,12 @@ emit_debug_insn_after (rtx pattern, rtx after)
|
|||
CALL_INSN, etc. */
|
||||
|
||||
static rtx_insn *
|
||||
emit_pattern_before_setloc (rtx pattern, rtx uncast_before, int loc, bool insnp,
|
||||
rtx_insn *(*make_raw) (rtx))
|
||||
emit_pattern_before_setloc (rtx pattern, rtx_insn *before, location_t loc,
|
||||
bool insnp, rtx_insn *(*make_raw) (rtx))
|
||||
{
|
||||
rtx_insn *before = as_a <rtx_insn *> (uncast_before);
|
||||
rtx_insn *first = PREV_INSN (before);
|
||||
rtx_insn *last = emit_pattern_before_noloc (pattern, before,
|
||||
insnp ? before : NULL_RTX,
|
||||
insnp ? before : NULL,
|
||||
NULL, make_raw);
|
||||
|
||||
if (pattern == NULL_RTX || !loc)
|
||||
|
@ -5001,13 +4991,13 @@ emit_pattern_before (rtx pattern, rtx uncast_before, bool skip_debug_insns,
|
|||
insnp, make_raw);
|
||||
else
|
||||
return emit_pattern_before_noloc (pattern, before,
|
||||
insnp ? before : NULL_RTX,
|
||||
insnp ? before : NULL,
|
||||
NULL, make_raw);
|
||||
}
|
||||
|
||||
/* Like emit_insn_before_noloc, but set INSN_LOCATION according to LOC. */
|
||||
rtx_insn *
|
||||
emit_insn_before_setloc (rtx pattern, rtx_insn *before, int loc)
|
||||
emit_insn_before_setloc (rtx pattern, rtx_insn *before, location_t loc)
|
||||
{
|
||||
return emit_pattern_before_setloc (pattern, before, loc, true,
|
||||
make_insn_raw);
|
||||
|
@ -5022,7 +5012,7 @@ emit_insn_before (rtx pattern, rtx before)
|
|||
|
||||
/* like emit_insn_before_noloc, but set INSN_LOCATION according to LOC. */
|
||||
rtx_jump_insn *
|
||||
emit_jump_insn_before_setloc (rtx pattern, rtx_insn *before, int loc)
|
||||
emit_jump_insn_before_setloc (rtx pattern, rtx_insn *before, location_t loc)
|
||||
{
|
||||
return as_a <rtx_jump_insn *> (
|
||||
emit_pattern_before_setloc (pattern, before, loc, false,
|
||||
|
@ -5040,7 +5030,7 @@ emit_jump_insn_before (rtx pattern, rtx before)
|
|||
|
||||
/* Like emit_insn_before_noloc, but set INSN_LOCATION according to LOC. */
|
||||
rtx_insn *
|
||||
emit_call_insn_before_setloc (rtx pattern, rtx_insn *before, int loc)
|
||||
emit_call_insn_before_setloc (rtx pattern, rtx_insn *before, location_t loc)
|
||||
{
|
||||
return emit_pattern_before_setloc (pattern, before, loc, false,
|
||||
make_call_insn_raw);
|
||||
|
@ -5057,7 +5047,7 @@ emit_call_insn_before (rtx pattern, rtx_insn *before)
|
|||
|
||||
/* Like emit_insn_before_noloc, but set INSN_LOCATION according to LOC. */
|
||||
rtx_insn *
|
||||
emit_debug_insn_before_setloc (rtx pattern, rtx before, int loc)
|
||||
emit_debug_insn_before_setloc (rtx pattern, rtx_insn *before, location_t loc)
|
||||
{
|
||||
return emit_pattern_before_setloc (pattern, before, loc, false,
|
||||
make_debug_insn_raw);
|
||||
|
|
41
gcc/rtl.h
41
gcc/rtl.h
|
@ -3216,33 +3216,34 @@ extern void decide_function_section (tree);
|
|||
/* In emit-rtl.c */
|
||||
extern rtx_insn *emit_insn_before (rtx, rtx);
|
||||
extern rtx_insn *emit_insn_before_noloc (rtx, rtx_insn *, basic_block);
|
||||
extern rtx_insn *emit_insn_before_setloc (rtx, rtx_insn *, int);
|
||||
extern rtx_insn *emit_insn_before_setloc (rtx, rtx_insn *, location_t);
|
||||
extern rtx_jump_insn *emit_jump_insn_before (rtx, rtx);
|
||||
extern rtx_jump_insn *emit_jump_insn_before_noloc (rtx, rtx_insn *);
|
||||
extern rtx_jump_insn *emit_jump_insn_before_setloc (rtx, rtx_insn *, int);
|
||||
extern rtx_jump_insn *emit_jump_insn_before_setloc (rtx, rtx_insn *,
|
||||
location_t);
|
||||
extern rtx_insn *emit_call_insn_before (rtx, rtx_insn *);
|
||||
extern rtx_insn *emit_call_insn_before_noloc (rtx, rtx_insn *);
|
||||
extern rtx_insn *emit_call_insn_before_setloc (rtx, rtx_insn *, int);
|
||||
extern rtx_insn *emit_call_insn_before_setloc (rtx, rtx_insn *, location_t);
|
||||
extern rtx_insn *emit_debug_insn_before (rtx, rtx_insn *);
|
||||
extern rtx_insn *emit_debug_insn_before_noloc (rtx, rtx);
|
||||
extern rtx_insn *emit_debug_insn_before_setloc (rtx, rtx, int);
|
||||
extern rtx_barrier *emit_barrier_before (rtx);
|
||||
extern rtx_code_label *emit_label_before (rtx, rtx_insn *);
|
||||
extern rtx_insn *emit_debug_insn_before_setloc (rtx, rtx_insn *, location_t);
|
||||
extern rtx_barrier *emit_barrier_before (rtx_insn *);
|
||||
extern rtx_code_label *emit_label_before (rtx_code_label *, rtx_insn *);
|
||||
extern rtx_note *emit_note_before (enum insn_note, rtx_insn *);
|
||||
extern rtx_insn *emit_insn_after (rtx, rtx);
|
||||
extern rtx_insn *emit_insn_after_noloc (rtx, rtx, basic_block);
|
||||
extern rtx_insn *emit_insn_after_setloc (rtx, rtx, int);
|
||||
extern rtx_insn *emit_insn_after_noloc (rtx, rtx_insn *, basic_block);
|
||||
extern rtx_insn *emit_insn_after_setloc (rtx, rtx_insn *, location_t);
|
||||
extern rtx_jump_insn *emit_jump_insn_after (rtx, rtx);
|
||||
extern rtx_jump_insn *emit_jump_insn_after_noloc (rtx, rtx);
|
||||
extern rtx_jump_insn *emit_jump_insn_after_setloc (rtx, rtx, int);
|
||||
extern rtx_jump_insn *emit_jump_insn_after_noloc (rtx, rtx_insn *);
|
||||
extern rtx_jump_insn *emit_jump_insn_after_setloc (rtx, rtx_insn *, location_t);
|
||||
extern rtx_insn *emit_call_insn_after (rtx, rtx);
|
||||
extern rtx_insn *emit_call_insn_after_noloc (rtx, rtx);
|
||||
extern rtx_insn *emit_call_insn_after_setloc (rtx, rtx, int);
|
||||
extern rtx_insn *emit_call_insn_after_noloc (rtx, rtx_insn *);
|
||||
extern rtx_insn *emit_call_insn_after_setloc (rtx, rtx_insn *, location_t);
|
||||
extern rtx_insn *emit_debug_insn_after (rtx, rtx);
|
||||
extern rtx_insn *emit_debug_insn_after_noloc (rtx, rtx);
|
||||
extern rtx_insn *emit_debug_insn_after_setloc (rtx, rtx, int);
|
||||
extern rtx_barrier *emit_barrier_after (rtx);
|
||||
extern rtx_insn *emit_label_after (rtx, rtx_insn *);
|
||||
extern rtx_insn *emit_debug_insn_after_noloc (rtx, rtx_insn *);
|
||||
extern rtx_insn *emit_debug_insn_after_setloc (rtx, rtx_insn *, location_t);
|
||||
extern rtx_barrier *emit_barrier_after (rtx_insn *);
|
||||
extern rtx_insn *emit_label_after (rtx_insn *, rtx_insn *);
|
||||
extern rtx_note *emit_note_after (enum insn_note, rtx_insn *);
|
||||
extern rtx_insn *emit_insn (rtx);
|
||||
extern rtx_insn *emit_debug_insn (rtx);
|
||||
|
@ -3271,7 +3272,7 @@ extern rtx_insn *prev_nonnote_nondebug_insn_bb (rtx_insn *);
|
|||
extern rtx_insn *next_nonnote_nondebug_insn (rtx_insn *);
|
||||
extern rtx_insn *next_nonnote_nondebug_insn_bb (rtx_insn *);
|
||||
extern rtx_insn *prev_real_insn (rtx_insn *);
|
||||
extern rtx_insn *next_real_insn (rtx);
|
||||
extern rtx_insn *next_real_insn (rtx_insn *);
|
||||
extern rtx_insn *prev_real_nondebug_insn (rtx_insn *);
|
||||
extern rtx_insn *next_real_nondebug_insn (rtx);
|
||||
extern rtx_insn *prev_active_insn (rtx_insn *);
|
||||
|
@ -3963,9 +3964,9 @@ extern void unshare_all_rtl_again (rtx_insn *);
|
|||
extern void unshare_all_rtl_in_chain (rtx_insn *);
|
||||
extern void verify_rtl_sharing (void);
|
||||
extern void add_insn (rtx_insn *);
|
||||
extern void add_insn_before (rtx, rtx, basic_block);
|
||||
extern void add_insn_after (rtx, rtx, basic_block);
|
||||
extern void remove_insn (rtx);
|
||||
extern void add_insn_before (rtx_insn *, rtx_insn *, basic_block);
|
||||
extern void add_insn_after (rtx_insn *, rtx_insn *, basic_block);
|
||||
extern void remove_insn (rtx_insn *);
|
||||
extern rtx_insn *emit (rtx, bool = true);
|
||||
extern void emit_insn_at_entry (rtx);
|
||||
extern rtx gen_lowpart_SUBREG (machine_mode, rtx);
|
||||
|
|
Loading…
Add table
Reference in a new issue