config/mep: Use rtx_insn and rtx_code_label
authorDavid Malcolm <dmalcolm@redhat.com>
Mon, 25 Aug 2014 18:05:57 +0000 (18:05 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Mon, 25 Aug 2014 18:05:57 +0000 (18:05 +0000)
gcc/
* config/mep/mep-protos.h (mep_mulr_source): Strengthen first
param from rtx to rtx_insn *.
(mep_reuse_lo): Likewise for third param.
(mep_use_post_modify_p): Likewise for first param.
(mep_core_address_length): Likewise.
(mep_cop_address_length): Likewise.
(mep_final_prescan_insn): Likewise.
(mep_store_data_bypass_p): Likewise for both params.
(mep_mul_hilo_bypass_p): Likewise.
(mep_ipipe_ldc_p): Likewise for param.

* config/mep/mep.c (mep_mulr_source): Likewise for param "insn".
(mep_rewrite_mult): Likewise.
(mep_rewrite_mulsi3): Likewise.
(mep_rewrite_maddsi3): Likewise.
(mep_reuse_lo_p_1): Likewise.
(mep_reuse_lo_p): Likewise.
(mep_frame_expr): Likewise.
(mep_make_parallel): Likewise for both params.
(mep_use_post_modify_p_1): Likewise for param "set_insn" and
local "insn".
(mep_use_post_modify_p): Likewise for param "insn".
(mep_core_address_length): Likewise.
(mep_cop_address_length): Likewise.
(mep_reg_set_in_function): Likewise for local "insn".
(mep_asm_without_operands_p): Likewise.
(F): Likewise for return type and param "x".
(add_constant): Likewise for local "insn".
(maybe_dead_move): Likewise for return type and local "insn".
(mep_expand_prologue): Likewise for local "insn".
(mep_final_prescan_insn): Likewise for param "insn".
(mep_reorg_regmove): Likewise for param "insns" and locals "insn",
"next", "follow", "x".
(mep_insert_repeat_label_last): Likewise for return type, param
"last_insn", and locals "next", "prev".  Strengthen param "label"
from rtx to rtx_code_label *.
(struct mep_doloop_begin): Strengthen field "insn" from rtx to
rtx_insn *.
(struct mep_doloop_end): Likewise for fields "insn" and
"fallthrough".
(mep_reorg_repeat): Likewise for param "insns" and local "insn".
Strengthen local "repeat_label" from rtx to rtx_code_label *.
(mep_invertable_branch_p): Strengthen param "insn" from rtx to
rtx_insn *.
(mep_invert_branch): Likewise for params "insn" and "after".
(mep_reorg_erepeat): Likewise for param "insns" and locals
"insn", "prev", "new_last", "barrier", "user".  Strengthen local
"l" from rtx to rtx_code_label *.
(mep_jmp_return_reorg): Strengthen param "insns" and local "insn"
from rtx to rtx_insn *.
(mep_reorg_addcombine): Likewise for param "insns" and locals
"i", "n".
(add_sp_insn_p): Likewise for param "insn".
(mep_reorg_noframe): Likewise for param "insns" and locals
"start_frame_insn", "end_frame_insn", "next".
(mep_reorg): Likewise for local "insns".
(mep_store_data_bypass_1): Likewise for param "prev".  Add checked
cast.
(mep_store_data_bypass_p): Likewise for params "prev", "insn".
(mep_mul_hilo_bypass_p): Likewise.
(mep_ipipe_ldc_p): Likewise for param "insn".
(mep_make_bundle): Likewise for return type, param "cop" and local
"insn", splitting out the latter into a new local "seq" for when it
is a SEQUENCE rather than an insn.
(core_insn_p): Likewise for param "insn".
(mep_bundle_insns): Likewise for param "insns" and locals "insn",
"last", "first", "note", "prev", "core_insn".

From-SVN: r214448

gcc/ChangeLog
gcc/config/mep/mep-protos.h
gcc/config/mep/mep.c

index 64456e52182da4a336f6a55dcb00ad8a1fdf4a42..f6c727142abcd5af189dd7935ce87edf63c0b75d 100644 (file)
@@ -1,3 +1,73 @@
+2014-08-25  David Malcolm  <dmalcolm@redhat.com>
+
+       * config/mep/mep-protos.h (mep_mulr_source): Strengthen first
+       param from rtx to rtx_insn *.
+       (mep_reuse_lo): Likewise for third param.
+       (mep_use_post_modify_p): Likewise for first param.
+       (mep_core_address_length): Likewise.
+       (mep_cop_address_length): Likewise.
+       (mep_final_prescan_insn): Likewise.
+       (mep_store_data_bypass_p): Likewise for both params.
+       (mep_mul_hilo_bypass_p): Likewise.
+       (mep_ipipe_ldc_p): Likewise for param.
+
+       * config/mep/mep.c (mep_mulr_source): Likewise for param "insn".
+       (mep_rewrite_mult): Likewise.
+       (mep_rewrite_mulsi3): Likewise.
+       (mep_rewrite_maddsi3): Likewise.
+       (mep_reuse_lo_p_1): Likewise.
+       (mep_reuse_lo_p): Likewise.
+       (mep_frame_expr): Likewise.
+       (mep_make_parallel): Likewise for both params.
+       (mep_use_post_modify_p_1): Likewise for param "set_insn" and
+       local "insn".
+       (mep_use_post_modify_p): Likewise for param "insn".
+       (mep_core_address_length): Likewise.
+       (mep_cop_address_length): Likewise.
+       (mep_reg_set_in_function): Likewise for local "insn".
+       (mep_asm_without_operands_p): Likewise.
+       (F): Likewise for return type and param "x".
+       (add_constant): Likewise for local "insn".
+       (maybe_dead_move): Likewise for return type and local "insn".
+       (mep_expand_prologue): Likewise for local "insn".
+       (mep_final_prescan_insn): Likewise for param "insn".
+       (mep_reorg_regmove): Likewise for param "insns" and locals "insn",
+       "next", "follow", "x".
+       (mep_insert_repeat_label_last): Likewise for return type, param
+       "last_insn", and locals "next", "prev".  Strengthen param "label"
+       from rtx to rtx_code_label *.
+       (struct mep_doloop_begin): Strengthen field "insn" from rtx to
+       rtx_insn *.
+       (struct mep_doloop_end): Likewise for fields "insn" and
+       "fallthrough".
+       (mep_reorg_repeat): Likewise for param "insns" and local "insn".
+       Strengthen local "repeat_label" from rtx to rtx_code_label *.
+       (mep_invertable_branch_p): Strengthen param "insn" from rtx to
+       rtx_insn *.
+       (mep_invert_branch): Likewise for params "insn" and "after".
+       (mep_reorg_erepeat): Likewise for param "insns" and locals
+       "insn", "prev", "new_last", "barrier", "user".  Strengthen local
+       "l" from rtx to rtx_code_label *.
+       (mep_jmp_return_reorg): Strengthen param "insns" and local "insn"
+       from rtx to rtx_insn *.
+       (mep_reorg_addcombine): Likewise for param "insns" and locals
+       "i", "n".
+       (add_sp_insn_p): Likewise for param "insn".
+       (mep_reorg_noframe): Likewise for param "insns" and locals
+       "start_frame_insn", "end_frame_insn", "next".
+       (mep_reorg): Likewise for local "insns".
+       (mep_store_data_bypass_1): Likewise for param "prev".  Add checked
+       cast.
+       (mep_store_data_bypass_p): Likewise for params "prev", "insn".
+       (mep_mul_hilo_bypass_p): Likewise.
+       (mep_ipipe_ldc_p): Likewise for param "insn".
+       (mep_make_bundle): Likewise for return type, param "cop" and local
+       "insn", splitting out the latter into a new local "seq" for when it
+       is a SEQUENCE rather than an insn.
+       (core_insn_p): Likewise for param "insn".
+       (mep_bundle_insns): Likewise for param "insns" and locals "insn",
+       "last", "first", "note", "prev", "core_insn".
+
 2014-08-25  David Malcolm  <dmalcolm@redhat.com>
 
        * config/m68k/m68k-protos.h (output_btst): Strengthen param 4 from
index c4b74e54982df39535c7b7910c4ef21712d2331b..e1903c782bfd871cf4b6323e65651897d2301eca 100644 (file)
@@ -19,9 +19,9 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 extern int mep_regno_reg_class (int);
-extern rtx mep_mulr_source (rtx, rtx, rtx, rtx);
-extern bool mep_reuse_lo_p (rtx, rtx, rtx, bool);
-extern bool mep_use_post_modify_p (rtx, rtx, rtx);
+extern rtx mep_mulr_source (rtx_insn *, rtx, rtx, rtx);
+extern bool mep_reuse_lo_p (rtx, rtx, rtx_insn *, bool);
+extern bool mep_use_post_modify_p (rtx_insn *, rtx, rtx);
 extern bool mep_allow_clip (rtx, rtx, int);
 extern bool mep_bit_position_p (rtx, bool);
 extern bool mep_split_mov (rtx *, int);
@@ -31,8 +31,8 @@ extern bool mep_multi_slot (rtx);
 extern bool mep_legitimate_address (enum machine_mode, rtx, int);
 extern int mep_legitimize_address (rtx *, rtx, enum machine_mode);
 extern int mep_legitimize_reload_address (rtx *, enum machine_mode, int, /*enum reload_type*/ int, int);
-extern int mep_core_address_length (rtx, int);
-extern int mep_cop_address_length (rtx, int);
+extern int mep_core_address_length (rtx_insn *, int);
+extern int mep_cop_address_length (rtx_insn *, int);
 extern bool mep_expand_mov (rtx *, enum machine_mode);
 extern bool mep_mov_ok (rtx *, enum machine_mode);
 extern void mep_split_wide_move (rtx *, enum machine_mode);
@@ -65,7 +65,7 @@ extern void mep_function_profiler (FILE *);
 extern const char *mep_emit_bb_trace_ret (void);
 extern void mep_print_operand_address (FILE *, rtx);
 extern void mep_print_operand (FILE *, rtx, int);
-extern void mep_final_prescan_insn (rtx, rtx *, int);
+extern void mep_final_prescan_insn (rtx_insn *, rtx *, int);
 extern void mep_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree);
 extern bool mep_return_in_memory (const_tree, const_tree);
 extern rtx mep_function_value (const_tree, const_tree);
@@ -79,9 +79,9 @@ extern void mep_output_aligned_common (FILE *, tree, const char *,
                                       int, int, int);
 extern void mep_emit_doloop (rtx *, int);
 extern bool mep_vliw_function_p (tree);
-extern bool mep_store_data_bypass_p (rtx, rtx);
-extern bool mep_mul_hilo_bypass_p (rtx, rtx);
-extern bool mep_ipipe_ldc_p (rtx);
+extern bool mep_store_data_bypass_p (rtx_insn *, rtx_insn *);
+extern bool mep_mul_hilo_bypass_p (rtx_insn *, rtx_insn *);
+extern bool mep_ipipe_ldc_p (rtx_insn *);
 extern bool mep_emit_intrinsic (int, const rtx *);
 extern bool mep_expand_unary_intrinsic (int, rtx *);
 extern bool mep_expand_binary_intrinsic (int, int, int, int, rtx *);
index abd8e5cd3ce98770c322cefb3b4a28b499e490d5..2927b378041118dc0fc122891a3566f90f672cd7 100644 (file)
@@ -153,10 +153,10 @@ static bool symbolref_p (rtx);
 static void encode_pattern_1 (rtx);
 static void encode_pattern (rtx);
 static bool const_in_range (rtx, int, int);
-static void mep_rewrite_mult (rtx, rtx);
-static void mep_rewrite_mulsi3 (rtx, rtx, rtx, rtx);
-static void mep_rewrite_maddsi3 (rtx, rtx, rtx, rtx, rtx);
-static bool mep_reuse_lo_p_1 (rtx, rtx, rtx, bool);
+static void mep_rewrite_mult (rtx_insn *, rtx);
+static void mep_rewrite_mulsi3 (rtx_insn *, rtx, rtx, rtx);
+static void mep_rewrite_maddsi3 (rtx_insn *, rtx, rtx, rtx, rtx);
+static bool mep_reuse_lo_p_1 (rtx, rtx, rtx_insn *, bool);
 static bool move_needs_splitting (rtx, rtx, enum machine_mode);
 static bool mep_expand_setcc_1 (enum rtx_code, rtx, rtx, rtx);
 static bool mep_nongeneral_reg (rtx);
@@ -171,9 +171,9 @@ static bool mep_reg_set_p (rtx, rtx);
 static bool mep_reg_set_in_function (int);
 static bool mep_interrupt_saved_reg (int);
 static bool mep_call_saves_register (int);
-static rtx F (rtx);
+static rtx_insn *F (rtx_insn *);
 static void add_constant (int, int, int, int);
-static rtx maybe_dead_move (rtx, rtx, bool);
+static rtx_insn *maybe_dead_move (rtx, rtx, bool);
 static void mep_reload_pointer (int, const char *);
 static void mep_start_function (FILE *, HOST_WIDE_INT);
 static bool mep_function_ok_for_sibcall (tree, tree);
@@ -198,14 +198,15 @@ static void mep_unique_section (tree, int);
 static unsigned int mep_section_type_flags (tree, const char *, int);
 static void mep_asm_named_section (const char *, unsigned int, tree);
 static bool mep_mentioned_p (rtx, rtx, int);
-static void mep_reorg_regmove (rtx);
-static rtx mep_insert_repeat_label_last (rtx, rtx, bool, bool);
-static void mep_reorg_repeat (rtx);
-static bool mep_invertable_branch_p (rtx);
-static void mep_invert_branch (rtx, rtx);
-static void mep_reorg_erepeat (rtx);
-static void mep_jmp_return_reorg (rtx);
-static void mep_reorg_addcombine (rtx);
+static void mep_reorg_regmove (rtx_insn *);
+static rtx_insn *mep_insert_repeat_label_last (rtx_insn *, rtx_code_label *,
+                                              bool, bool);
+static void mep_reorg_repeat (rtx_insn *);
+static bool mep_invertable_branch_p (rtx_insn *);
+static void mep_invert_branch (rtx_insn *, rtx_insn *);
+static void mep_reorg_erepeat (rtx_insn *);
+static void mep_jmp_return_reorg (rtx_insn *);
+static void mep_reorg_addcombine (rtx_insn *);
 static void mep_reorg (void);
 static void mep_init_intrinsics (void);
 static void mep_init_builtins (void);
@@ -222,8 +223,8 @@ static int mep_issue_rate (void);
 static rtx mep_find_ready_insn (rtx *, int, enum attr_slot, int);
 static void mep_move_ready_insn (rtx *, int, rtx);
 static int mep_sched_reorder (FILE *, int, rtx *, int *, int);
-static rtx mep_make_bundle (rtx, rtx);
-static void mep_bundle_insns (rtx);
+static rtx_insn *mep_make_bundle (rtx, rtx_insn *);
+static void mep_bundle_insns (rtx_insn *);
 static bool mep_rtx_cost (rtx, int, int, int, int *, bool);
 static int mep_address_cost (rtx, enum machine_mode, addr_space_t, bool);
 static void mep_setup_incoming_varargs (cumulative_args_t, enum machine_mode,
@@ -623,7 +624,7 @@ const_in_range (rtx x, int minv, int maxv)
    at the end of the insn stream.  */
 
 rtx
-mep_mulr_source (rtx insn, rtx dest, rtx src1, rtx src2)
+mep_mulr_source (rtx_insn *insn, rtx dest, rtx src1, rtx src2)
 {
   if (rtx_equal_p (dest, src1))
     return src2;
@@ -644,7 +645,7 @@ mep_mulr_source (rtx insn, rtx dest, rtx src1, rtx src2)
    to (clobber (reg:SI HI_REGNO)).  */
 
 static void
-mep_rewrite_mult (rtx insn, rtx pattern)
+mep_rewrite_mult (rtx_insn *insn, rtx pattern)
 {
   rtx hi_clobber;
 
@@ -659,7 +660,7 @@ mep_rewrite_mult (rtx insn, rtx pattern)
    store the result in DEST if nonnull.  */
 
 static void
-mep_rewrite_mulsi3 (rtx insn, rtx dest, rtx src1, rtx src2)
+mep_rewrite_mulsi3 (rtx_insn *insn, rtx dest, rtx src1, rtx src2)
 {
   rtx lo, pattern;
 
@@ -677,7 +678,7 @@ mep_rewrite_mulsi3 (rtx insn, rtx dest, rtx src1, rtx src2)
    be deleted by a peephole2 if SRC3 is already in $lo.  */
 
 static void
-mep_rewrite_maddsi3 (rtx insn, rtx dest, rtx src1, rtx src2, rtx src3)
+mep_rewrite_maddsi3 (rtx_insn *insn, rtx dest, rtx src1, rtx src2, rtx src3)
 {
   rtx lo, pattern;
 
@@ -719,7 +720,7 @@ mep_rewrite_maddsi3 (rtx insn, rtx dest, rtx src1, rtx src2, rtx src3)
    if GPR is no longer used.  */
 
 static bool
-mep_reuse_lo_p_1 (rtx lo, rtx gpr, rtx insn, bool gpr_dead_p)
+mep_reuse_lo_p_1 (rtx lo, rtx gpr, rtx_insn *insn, bool gpr_dead_p)
 {
   do
     {
@@ -775,7 +776,7 @@ mep_reuse_lo_p_1 (rtx lo, rtx gpr, rtx insn, bool gpr_dead_p)
 /* A wrapper around mep_reuse_lo_p_1 that preserves recog_data.  */
 
 bool
-mep_reuse_lo_p (rtx lo, rtx gpr, rtx insn, bool gpr_dead_p)
+mep_reuse_lo_p (rtx lo, rtx gpr, rtx_insn *insn, bool gpr_dead_p)
 {
   bool result = mep_reuse_lo_p_1 (lo, gpr, insn, gpr_dead_p);
   extract_insn (insn);
@@ -856,7 +857,7 @@ mep_use_post_modify_for_set_p (rtx set, rtx gpr, rtx offset)
 /* Return the effect of frame-related instruction INSN.  */
 
 static rtx
-mep_frame_expr (rtx insn)
+mep_frame_expr (rtx_insn *insn)
 {
   rtx note, expr;
 
@@ -870,7 +871,7 @@ mep_frame_expr (rtx insn)
    new pattern in INSN1; INSN2 will be deleted by the caller.  */
 
 static void
-mep_make_parallel (rtx insn1, rtx insn2)
+mep_make_parallel (rtx_insn *insn1, rtx_insn *insn2)
 {
   rtx expr;
 
@@ -895,9 +896,9 @@ mep_make_parallel (rtx insn1, rtx insn2)
    be persuaded to do SET_INSN as a side-effect.  Return true if so.  */
 
 static bool
-mep_use_post_modify_p_1 (rtx set_insn, rtx reg, rtx offset)
+mep_use_post_modify_p_1 (rtx_insn *set_insn, rtx reg, rtx offset)
 {
-  rtx insn;
+  rtx_insn *insn;
 
   insn = set_insn;
   do
@@ -924,7 +925,7 @@ mep_use_post_modify_p_1 (rtx set_insn, rtx reg, rtx offset)
 /* A wrapper around mep_use_post_modify_p_1 that preserves recog_data.  */
 
 bool
-mep_use_post_modify_p (rtx insn, rtx reg, rtx offset)
+mep_use_post_modify_p (rtx_insn *insn, rtx reg, rtx offset)
 {
   bool result = mep_use_post_modify_p_1 (insn, reg, offset);
   extract_insn (insn);
@@ -1235,7 +1236,7 @@ mep_legitimize_reload_address (rtx *x, enum machine_mode mode, int opnum,
 }
 
 int
-mep_core_address_length (rtx insn, int opn)
+mep_core_address_length (rtx_insn *insn, int opn)
 {
   rtx set = single_set (insn);
   rtx mem = XEXP (set, opn);
@@ -1282,7 +1283,7 @@ mep_core_address_length (rtx insn, int opn)
 }
 
 int
-mep_cop_address_length (rtx insn, int opn)
+mep_cop_address_length (rtx_insn *insn, int opn)
 {
   rtx set = single_set (insn);
   rtx mem = XEXP (set, opn);
@@ -2337,7 +2338,8 @@ mep_reg_set_p (rtx reg, rtx insn)
 static bool
 mep_reg_set_in_function (int regno)
 {
-  rtx reg, insn;
+  rtx reg;
+  rtx_insn *insn;
 
   if (mep_interrupt_p () && df_regs_ever_live_p(regno))
     return true;
@@ -2365,7 +2367,7 @@ mep_asm_without_operands_p (void)
 {
   if (cfun->machine->asms_without_operands == 0)
     {
-      rtx insn;
+      rtx_insn *insn;
 
       push_topmost_sequence ();
       insn = get_insns ();
@@ -2536,8 +2538,8 @@ mep_elimination_offset (int from, int to)
   gcc_unreachable ();
 }
 
-static rtx
-F (rtx x)
+static rtx_insn *
+F (rtx_insn *x)
 {
   RTX_FRAME_RELATED_P (x) = 1;
   return x;
@@ -2551,7 +2553,7 @@ F (rtx x)
 static void
 add_constant (int dest, int src, int value, int mark_frame)
 {
-  rtx insn;
+  rtx_insn *insn;
   int hi, lo;
 
   if (src == dest && value == 0)
@@ -2611,10 +2613,10 @@ add_constant (int dest, int src, int value, int mark_frame)
 /* Move SRC to DEST.  Mark the move as being potentially dead if
    MAYBE_DEAD_P.  */
 
-static rtx
+static rtx_insn *
 maybe_dead_move (rtx dest, rtx src, bool ATTRIBUTE_UNUSED maybe_dead_p)
 {
-  rtx insn = emit_move_insn (dest, src);
+  rtx_insn *insn = emit_move_insn (dest, src);
 #if 0
   if (maybe_dead_p)
     REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_MAYBE_DEAD, const0_rtx, NULL);
@@ -2739,7 +2741,7 @@ mep_expand_prologue (void)
          F(maybe_dead_move (mem, gen_rtx_REG (rmode, i), maybe_dead_p));
        else if (rmode == DImode)
          {
-           rtx insn;
+           rtx_insn *insn;
            int be = TARGET_BIG_ENDIAN ? 4 : 0;
 
            mem = gen_rtx_MEM (SImode,
@@ -2773,7 +2775,7 @@ mep_expand_prologue (void)
          }
        else
          {
-           rtx insn;
+           rtx_insn *insn;
            maybe_dead_move (gen_rtx_REG (rmode, REGSAVE_CONTROL_TEMP),
                             gen_rtx_REG (rmode, i),
                             maybe_dead_p);
@@ -3370,7 +3372,7 @@ mep_print_operand (FILE *file, rtx x, int code)
 }
 
 void
-mep_final_prescan_insn (rtx insn, rtx *operands ATTRIBUTE_UNUSED,
+mep_final_prescan_insn (rtx_insn *insn, rtx *operands ATTRIBUTE_UNUSED,
                        int noperands ATTRIBUTE_UNUSED)
 {
   /* Despite the fact that MeP is perfectly capable of branching and
@@ -4890,9 +4892,10 @@ mep_compatible_reg_class (int r1, int r2)
 }
 
 static void
-mep_reorg_regmove (rtx insns)
+mep_reorg_regmove (rtx_insn *insns)
 {
-  rtx insn, next, pat, follow, *where;
+  rtx_insn *insn, *next, *follow;
+  rtx pat, *where;
   int count = 0, done = 0, replace, before = 0;
 
   if (dump_file)
@@ -4968,7 +4971,7 @@ mep_reorg_regmove (rtx insns)
            {
              if (dump_file)
                {
-                 rtx x;
+                 rtx_insn *x;
 
                  fprintf (dump_file, "----- Candidate for superfluous move deletion:\n\n");
                  for (x = insn; x ;x = NEXT_INSN (x))
@@ -5012,11 +5015,11 @@ mep_reorg_regmove (rtx insns)
 
    Return the last instruction in the adjusted loop.  */
 
-static rtx
-mep_insert_repeat_label_last (rtx last_insn, rtx label, bool including,
-                             bool shared)
+static rtx_insn *
+mep_insert_repeat_label_last (rtx_insn *last_insn, rtx_code_label *label,
+                             bool including, bool shared)
 {
-  rtx next, prev;
+  rtx_insn *next, *prev;
   int count = 0, code, icode;
 
   if (dump_file)
@@ -5040,7 +5043,7 @@ mep_insert_repeat_label_last (rtx last_insn, rtx label, bool including,
        if (INSN_P (prev))
          {
            if (GET_CODE (PATTERN (prev)) == SEQUENCE)
-             prev = XVECEXP (PATTERN (prev), 0, 1);
+             prev = as_a <rtx_insn *> (XVECEXP (PATTERN (prev), 0, 1));
 
            /* Other insns that should not be in the last two opcodes.  */
            icode = recog_memoized (prev);
@@ -5210,7 +5213,7 @@ struct mep_doloop_begin {
   struct mep_doloop_begin *next;
 
   /* The instruction itself.  */
-  rtx insn;
+  rtx_insn *insn;
 
   /* The initial counter value.  This is known to be a general register.  */
   rtx counter;
@@ -5222,10 +5225,10 @@ struct mep_doloop_end {
   struct mep_doloop_end *next;
 
   /* The instruction itself.  */
-  rtx insn;
+  rtx_insn *insn;
 
   /* The first instruction after INSN when the branch isn't taken.  */
-  rtx fallthrough;
+  rtx_insn *fallthrough;
 
   /* The location of the counter value.  Since doloop_end_internal is a
      jump instruction, it has to allow the counter to be stored anywhere
@@ -5288,9 +5291,9 @@ mep_repeat_loop_p (struct mep_doloop *loop)
 /* The main repeat reorg function.  See comment above for details.  */
 
 static void
-mep_reorg_repeat (rtx insns)
+mep_reorg_repeat (rtx_insn *insns)
 {
-  rtx insn;
+  rtx_insn *insn;
   struct mep_doloop *loops, *loop;
   struct mep_doloop_begin *begin;
   struct mep_doloop_end *end;
@@ -5351,7 +5354,8 @@ mep_reorg_repeat (rtx insns)
     if (mep_repeat_loop_p (loop))
       {
        /* Case (1) or (2).  */
-       rtx repeat_label, label_ref;
+       rtx_code_label *repeat_label;
+       rtx label_ref;
 
        /* Create a new label for the repeat insn.  */
        repeat_label = gen_label_rtx ();
@@ -5435,7 +5439,7 @@ mep_reorg_repeat (rtx insns)
 
 
 static bool
-mep_invertable_branch_p (rtx insn)
+mep_invertable_branch_p (rtx_insn *insn)
 {
   rtx cond, set;
   enum rtx_code old_code;
@@ -5473,7 +5477,7 @@ mep_invertable_branch_p (rtx insn)
 }
 
 static void
-mep_invert_branch (rtx insn, rtx after)
+mep_invert_branch (rtx_insn *insn, rtx_insn *after)
 {
   rtx cond, set, label;
   int i;
@@ -5519,9 +5523,11 @@ mep_invert_branch (rtx insn, rtx after)
 }
 
 static void
-mep_reorg_erepeat (rtx insns)
+mep_reorg_erepeat (rtx_insn *insns)
 {
-  rtx insn, prev, l, x;
+  rtx_insn *insn, *prev;
+  rtx_code_label *l;
+  rtx x;
   int count;
 
   for (insn = insns; insn; insn = NEXT_INSN (insn))
@@ -5542,7 +5548,7 @@ mep_reorg_erepeat (rtx insns)
 
            if (prev == JUMP_LABEL (insn))
              {
-               rtx newlast;
+               rtx_insn *newlast;
                if (dump_file)
                  fprintf (dump_file, "found loop top, %d insns\n", count);
 
@@ -5554,7 +5560,7 @@ mep_reorg_erepeat (rtx insns)
                       so, we know nobody inside the loop uses it.
                       But we must be careful to put the erepeat
                       *after* the label.  */
-                   rtx barrier;
+                   rtx_insn *barrier;
                    for (barrier = PREV_INSN (prev);
                         barrier && NOTE_P (barrier);
                         barrier = PREV_INSN (barrier))
@@ -5598,7 +5604,7 @@ mep_reorg_erepeat (rtx insns)
              {
                /* A label is OK if there is exactly one user, and we
                   can find that user before the next label.  */
-               rtx user = 0;
+               rtx_insn *user = 0;
                int safe = 0;
                if (LABEL_NUSES (prev) == 1)
                  {
@@ -5632,9 +5638,10 @@ mep_reorg_erepeat (rtx insns)
    always do this on its own.  */
 
 static void
-mep_jmp_return_reorg (rtx insns)
+mep_jmp_return_reorg (rtx_insn *insns)
 {
-  rtx insn, label, ret;
+  rtx_insn *insn;
+  rtx label, ret;
   int ret_code;
 
   for (insn = insns; insn; insn = NEXT_INSN (insn))
@@ -5668,9 +5675,9 @@ mep_jmp_return_reorg (rtx insns)
 
 
 static void
-mep_reorg_addcombine (rtx insns)
+mep_reorg_addcombine (rtx_insn *insns)
 {
-  rtx i, n;
+  rtx_insn *i, *n;
 
   for (i = insns; i; i = NEXT_INSN (i))
     if (INSN_P (i)
@@ -5706,7 +5713,7 @@ mep_reorg_addcombine (rtx insns)
 /* If this insn adjusts the stack, return the adjustment, else return
    zero.  */
 static int
-add_sp_insn_p (rtx insn)
+add_sp_insn_p (rtx_insn *insn)
 {
   rtx pat;
 
@@ -5731,10 +5738,10 @@ add_sp_insn_p (rtx insn)
 /* Check for trivial functions that set up an unneeded stack
    frame.  */
 static void
-mep_reorg_noframe (rtx insns)
+mep_reorg_noframe (rtx_insn *insns)
 {
-  rtx start_frame_insn;
-  rtx end_frame_insn = 0;
+  rtx_insn *start_frame_insn;
+  rtx_insn *end_frame_insn = 0;
   int sp_adjust, sp2;
   rtx sp;
 
@@ -5755,7 +5762,7 @@ mep_reorg_noframe (rtx insns)
 
   while (insns)
     {
-      rtx next = next_real_insn (insns);
+      rtx_insn *next = next_real_insn (insns);
       if (!next)
        break;
 
@@ -5786,7 +5793,7 @@ mep_reorg_noframe (rtx insns)
 static void
 mep_reorg (void)
 {
-  rtx insns = get_insns ();
+  rtx_insn *insns = get_insns ();
 
   /* We require accurate REG_DEAD notes.  */
   compute_bb_for_insn ();
@@ -6673,7 +6680,7 @@ mep_store_find_set (rtx *x, void *prev)
    not the containing insn.  */
 
 static bool
-mep_store_data_bypass_1 (rtx prev, rtx pat)
+mep_store_data_bypass_1 (rtx_insn *prev, rtx pat)
 {
   /* Cope with intrinsics like swcpa.  */
   if (GET_CODE (pat) == PARALLEL)
@@ -6681,7 +6688,8 @@ mep_store_data_bypass_1 (rtx prev, rtx pat)
       int i;
 
       for (i = 0; i < XVECLEN (pat, 0); i++)
-       if (mep_store_data_bypass_p (prev, XVECEXP (pat, 0, i)))
+       if (mep_store_data_bypass_p (prev,
+                                    as_a <rtx_insn *> (XVECEXP (pat, 0, i))))
          return true;
 
       return false;
@@ -6717,7 +6725,7 @@ mep_store_data_bypass_1 (rtx prev, rtx pat)
    has no true dependence on PREV.  */
 
 bool
-mep_store_data_bypass_p (rtx prev, rtx insn)
+mep_store_data_bypass_p (rtx_insn *prev, rtx_insn *insn)
 {
   return INSN_P (insn) ? mep_store_data_bypass_1 (prev, PATTERN (insn)) : false;
 }
@@ -6738,7 +6746,7 @@ mep_mul_hilo_bypass_1 (rtx *x, void *prev)
    between multiplication instructions PREV and INSN.  */
 
 bool
-mep_mul_hilo_bypass_p (rtx prev, rtx insn)
+mep_mul_hilo_bypass_p (rtx_insn *prev, rtx_insn *insn)
 {
   rtx pat;
 
@@ -6754,7 +6762,7 @@ mep_mul_hilo_bypass_p (rtx prev, rtx insn)
    read from PSW, LP, SAR, HI and LO.  */
 
 bool
-mep_ipipe_ldc_p (rtx insn)
+mep_ipipe_ldc_p (rtx_insn *insn)
 {
   rtx pat, src;
 
@@ -6794,10 +6802,11 @@ mep_ipipe_ldc_p (rtx insn)
 
    Emit the bundle in place of COP and return it.  */
 
-static rtx
-mep_make_bundle (rtx core, rtx cop)
+static rtx_insn *
+mep_make_bundle (rtx core, rtx_insn *cop)
 {
-  rtx insn;
+  rtx seq;
+  rtx_insn *insn;
 
   /* If CORE is an existing instruction, remove it, otherwise put
      the new pattern in an INSN harness.  */
@@ -6807,8 +6816,8 @@ mep_make_bundle (rtx core, rtx cop)
     core = make_insn_raw (core);
 
   /* Generate the bundle sequence and replace COP with it.  */
-  insn = gen_rtx_SEQUENCE (VOIDmode, gen_rtvec (2, core, cop));
-  insn = emit_insn_after (insn, cop);
+  seq = gen_rtx_SEQUENCE (VOIDmode, gen_rtvec (2, core, cop));
+  insn = emit_insn_after (seq, cop);
   remove_insn (cop);
 
   /* Set up the links of the insns inside the SEQUENCE.  */
@@ -6867,7 +6876,7 @@ mep_insn_dependent_p (rtx x, rtx y)
 }
 
 static int
-core_insn_p (rtx insn)
+core_insn_p (rtx_insn *insn)
 {
   if (GET_CODE (PATTERN (insn)) == USE)
     return 0;
@@ -6888,9 +6897,9 @@ core_insn_p (rtx insn)
    Called from mep_insn_reorg.  */
 
 static void
-mep_bundle_insns (rtx insns)
+mep_bundle_insns (rtx_insn *insns)
 {
-  rtx insn, last = NULL_RTX, first = NULL_RTX;
+  rtx_insn *insn, *last = NULL, *first = NULL;
   int saw_scheduling = 0;
 
   /* Only do bundling if we're in vliw mode.  */
@@ -6915,7 +6924,7 @@ mep_bundle_insns (rtx insns)
 
       else if (NONJUMP_INSN_P (insn) && GET_MODE (insn) == VOIDmode && first)
        {
-         rtx note, prev;
+         rtx_insn *note, *prev;
 
          /* INSN is part of a bundle; FIRST is the first insn in that
             bundle.  Move all intervening notes out of the bundle.
@@ -6971,7 +6980,7 @@ mep_bundle_insns (rtx insns)
 
       if (TARGET_IVC2)
        {
-         rtx core_insn = NULL_RTX;
+         rtx_insn *core_insn = NULL;
 
          /* IVC2 slots are scheduled by DFA, so we just accept
             whatever the scheduler gives us.  However, we must make