Handcode gen_rtx_INSN
authorDavid Malcolm <dmalcolm@redhat.com>
Tue, 9 Sep 2014 15:14:03 +0000 (15:14 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Tue, 9 Sep 2014 15:14:03 +0000 (15:14 +0000)
gcc/ChangeLog:
2014-09-09  David Malcolm  <dmalcolm@redhat.com>

* combine.c (try_combine): Eliminate checked cast on result of
gen_rtx_INSN.
* emit-rtl.c (gen_rtx_INSN): New function, improving over the prior
autogenerated one by strengthening the return type and params 2 and 3
from rtx to rtx_insn *, and by naming the params.
* gengenrtl.c (special_rtx): Add INSN to those that are
special-cased.
* rtl.h (gen_rtx_INSN): New prototype.

From-SVN: r215083

gcc/ChangeLog
gcc/combine.c
gcc/emit-rtl.c
gcc/gengenrtl.c
gcc/rtl.h

index 4427243913f8257832b1a6d9bd6a252189d95040..97d0fbc725131c27f025af4ac5a4f5eca61efff6 100644 (file)
@@ -1,3 +1,14 @@
+2014-09-09  David Malcolm  <dmalcolm@redhat.com>
+
+       * combine.c (try_combine): Eliminate checked cast on result of
+       gen_rtx_INSN.
+       * emit-rtl.c (gen_rtx_INSN): New function, improving over the prior
+       autogenerated one by strengthening the return type and params 2 and 3
+       from rtx to rtx_insn *, and by naming the params.
+       * gengenrtl.c (special_rtx): Add INSN to those that are
+       special-cased.
+       * rtl.h (gen_rtx_INSN): New prototype.
+
 2014-09-09  David Malcolm  <dmalcolm@redhat.com>
 
        * ira.c (ira_update_equiv_info_by_shuffle_insn): Use NULL rather
index 60524b5f2010c6a07942ef73ec22919c27e11678..0ec7f852c47dc2e90d70210b4b7bc8350806d41d 100644 (file)
@@ -2772,10 +2772,9 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
             never appear in the insn stream so giving it the same INSN_UID
             as I2 will not cause a problem.  */
 
-         i1 = as_a <rtx_insn *> (
-                gen_rtx_INSN (VOIDmode, NULL_RTX, i2, BLOCK_FOR_INSN (i2),
-                              XVECEXP (PATTERN (i2), 0, 1), INSN_LOCATION (i2),
-                              -1, NULL_RTX));
+         i1 = gen_rtx_INSN (VOIDmode, NULL, i2, BLOCK_FOR_INSN (i2),
+                            XVECEXP (PATTERN (i2), 0, 1), INSN_LOCATION (i2),
+                            -1, NULL_RTX);
          INSN_UID (i1) = INSN_UID (i2);
 
          SUBST (PATTERN (i2), XVECEXP (PATTERN (i2), 0, 0));
index e3df826fda2eff317f38d5f049f6d0145fe06f6e..0acdd08bda49885b1e634c7652be510a40976fb9 100644 (file)
@@ -424,6 +424,17 @@ gen_rtx_INSN_LIST (enum machine_mode mode, rtx insn, rtx insn_list)
                                                 insn_list));
 }
 
+rtx_insn *
+gen_rtx_INSN (enum machine_mode mode, rtx_insn *prev_insn, rtx_insn *next_insn,
+             basic_block bb, rtx pattern, int location, int code,
+             rtx reg_notes)
+{
+  return as_a <rtx_insn *> (gen_rtx_fmt_uuBeiie (INSN, mode,
+                                                prev_insn, next_insn,
+                                                bb, pattern, location, code,
+                                                reg_notes));
+}
+
 rtx
 gen_rtx_CONST_INT (enum machine_mode mode ATTRIBUTE_UNUSED, HOST_WIDE_INT arg)
 {
index 885dd200c274d476f0d3f2cc58dc5ac8c35555f7..d3eca985e3e93ea3553022796e5f21c67adc59b3 100644 (file)
@@ -125,6 +125,7 @@ special_rtx (int idx)
 {
   return (strcmp (defs[idx].enumname, "EXPR_LIST") == 0
          || strcmp (defs[idx].enumname, "INSN_LIST") == 0
+         || strcmp (defs[idx].enumname, "INSN") == 0
          || strcmp (defs[idx].enumname, "CONST_INT") == 0
          || strcmp (defs[idx].enumname, "REG") == 0
          || strcmp (defs[idx].enumname, "SUBREG") == 0
index ddf89b0d05c95b30e51a978ee655a2da9c378e90..fae3b5d53840fb56623987ddd3d34d6d0a6c71e2 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -3089,6 +3089,10 @@ get_mem_attrs (const_rtx x)
 
 extern rtx_expr_list *gen_rtx_EXPR_LIST (enum machine_mode, rtx, rtx);
 extern rtx_insn_list *gen_rtx_INSN_LIST (enum machine_mode, rtx, rtx);
+extern rtx_insn *
+gen_rtx_INSN (enum machine_mode mode, rtx_insn *prev_insn, rtx_insn *next_insn,
+             basic_block bb, rtx pattern, int location, int code,
+             rtx reg_notes);
 extern rtx gen_rtx_CONST_INT (enum machine_mode, HOST_WIDE_INT);
 extern rtx gen_rtx_CONST_VECTOR (enum machine_mode, rtvec);
 extern rtx gen_raw_REG (enum machine_mode, int);