+2014-09-05 David Malcolm <dmalcolm@redhat.com>
+
+ * output.h (final_scan_insn): Strengthen first param from rtx to
+ rtx_insn *.
+
+ * final.c (final_scan_insn): Likewise, renaming it back from
+ "uncast_insn" to "insn", eliminating the checked cast.
+
+ * config/h8300/h8300.md (define_insn "jump"): Replace local rtx
+ "vec" with an rtx_sequence * "seq", taking a copy of
+ "final_sequence", and using methods of "seq" for clarity, and for
+ type-safety in the calls to final_scan_insn.
+ * config/mips/mips.c (mips_output_conditional_branch): Use methods
+ of "final_sequence" for clarity, and for type-safety in the call to
+ final_scan_insn.
+ * config/sh/sh.c (print_slot): Strengthen param from rtx to
+ rtx_sequence * and rename from "insn" to "seq".
+
2014-09-05 David Malcolm <dmalcolm@redhat.com>
* jump.c (delete_related_insns): Introduce a new local "table" by
bytes further than previously thought. The length-based
test for bra vs. jump is very conservative though, so the
branch will still be within range. */
- rtvec vec;
+ rtx_sequence *seq;
int seen;
- vec = XVEC (final_sequence, 0);
+ seq = final_sequence;
final_sequence = 0;
- final_scan_insn (RTVEC_ELT (vec, 1), asm_out_file, optimize, 1, & seen);
- final_scan_insn (RTVEC_ELT (vec, 0), asm_out_file, optimize, 1, & seen);
- INSN_DELETED_P (RTVEC_ELT (vec, 1)) = 1;
+ final_scan_insn (seq->insn (1), asm_out_file, optimize, 1, & seen);
+ final_scan_insn (seq->insn (0), asm_out_file, optimize, 1, & seen);
+ INSN_DELETED_P (seq->insn (1)) = 1;
return "";
}
}
delay slot if is not annulled. */
if (!INSN_ANNULLED_BRANCH_P (insn))
{
- final_scan_insn (XVECEXP (final_sequence, 0, 1),
+ final_scan_insn (final_sequence->insn (1),
asm_out_file, optimize, 1, NULL);
- INSN_DELETED_P (XVECEXP (final_sequence, 0, 1)) = 1;
+ INSN_DELETED_P (final_sequence->insn (1)) = 1;
}
else
output_asm_insn ("nop", 0);
Use INSN's delay slot if is annulled. */
if (INSN_ANNULLED_BRANCH_P (insn))
{
- final_scan_insn (XVECEXP (final_sequence, 0, 1),
+ final_scan_insn (final_sequence->insn (1),
asm_out_file, optimize, 1, NULL);
- INSN_DELETED_P (XVECEXP (final_sequence, 0, 1)) = 1;
+ INSN_DELETED_P (final_sequence->insn (1)) = 1;
}
else
output_asm_insn ("nop", 0);
static void split_branches (rtx_insn *);
static int branch_dest (rtx);
-static void print_slot (rtx);
+static void print_slot (rtx_sequence *);
static rtx_code_label *add_constant (rtx, enum machine_mode, rtx);
static void dump_table (rtx_insn *, rtx_insn *);
static bool broken_move (rtx_insn *);
another instruction, but couldn't because the other instruction expanded
into a sequence where putting the slot insn at the end wouldn't work. */
static void
-print_slot (rtx insn)
+print_slot (rtx_sequence *seq)
{
- final_scan_insn (XVECEXP (insn, 0, 1), asm_out_file, optimize, 1, NULL);
+ final_scan_insn (seq->insn (1), asm_out_file, optimize, 1, NULL);
- INSN_DELETED_P (XVECEXP (insn, 0, 1)) = 1;
+ INSN_DELETED_P (seq->insn (1)) = 1;
}
const char *
both NOTE_INSN_PROLOGUE_END and NOTE_INSN_FUNCTION_BEG. */
rtx_insn *
-final_scan_insn (rtx uncast_insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
+final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
int nopeepholes ATTRIBUTE_UNUSED, int *seen)
{
#ifdef HAVE_cc0
#endif
rtx_insn *next;
- rtx_insn *insn = as_a <rtx_insn *> (uncast_insn);
-
insn_counter++;
/* Ignore deleted insns. These can occur when we split insns (due to a
/* The final scan for one insn, INSN. Args are same as in `final', except
that INSN is the insn being scanned. Value returned is the next insn to
be scanned. */
-extern rtx_insn *final_scan_insn (rtx, FILE *, int, int, int *);
+extern rtx_insn *final_scan_insn (rtx_insn *, FILE *, int, int, int *);
/* Replace a SUBREG with a REG or a MEM, based on the thing it is a
subreg of. */