Replace PREV_INSN et al macros with functions
authorDavid Malcolm <dmalcolm@redhat.com>
Tue, 19 Aug 2014 14:47:55 +0000 (14:47 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Tue, 19 Aug 2014 14:47:55 +0000 (14:47 +0000)
gcc/
2014-08-19  David Malcolm  <dmalcolm@redhat.com>

* rtl.h (PREV_INSN): Convert to an inline function.  Strengthen
the return type from rtx to rtx_insn *,  which will enable various
conversions in followup patches.  For now this is is done by a
checked cast.
(NEXT_INSN): Likewise.
(SET_PREV_INSN): Convert to an inline function.  This is intended
for use as an lvalue, and so returns an rtx& to allow in-place
modification.
(SET_NEXT_INSN): Likewise.

From-SVN: r214152

gcc/ChangeLog
gcc/rtl.h

index baaf05c..d2db5c9 100644 (file)
@@ -1,3 +1,15 @@
+2014-08-19  David Malcolm  <dmalcolm@redhat.com>
+
+       * rtl.h (PREV_INSN): Convert to an inline function.  Strengthen
+       the return type from rtx to rtx_insn *,  which will enable various
+       conversions in followup patches.  For now this is is done by a
+       checked cast.
+       (NEXT_INSN): Likewise.
+       (SET_PREV_INSN): Convert to an inline function.  This is intended
+       for use as an lvalue, and so returns an rtx& to allow in-place
+       modification.
+       (SET_NEXT_INSN): Likewise.
+
 2014-07-08  Mark Wielaard  <mjw@redhat.com>
 
        PR debug/59051
index 93bce91..c9a3cb3 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -972,15 +972,33 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *,
   (RTL_INSN_CHAIN_FLAG_CHECK ("INSN_UID", (INSN))->u2.insn_uid)
 
 /* Chain insns together in sequence.  */
+
 /* For now these are split in two: an rvalue form:
      PREV_INSN/NEXT_INSN
    and an lvalue form:
      SET_NEXT_INSN/SET_PREV_INSN.  */
 
-#define PREV_INSN(INSN)      XEXP ((const_rtx)(INSN), 0)
-#define SET_PREV_INSN(INSN)  XEXP (INSN, 0)
-#define NEXT_INSN(INSN)      XEXP ((const_rtx)(INSN), 1)
-#define SET_NEXT_INSN(INSN)  XEXP (INSN, 1)
+inline rtx_insn *PREV_INSN (const_rtx insn)
+{
+  rtx prev = XEXP (insn, 0);
+  return safe_as_a <rtx_insn *> (prev);
+}
+
+inline rtx& SET_PREV_INSN (rtx insn)
+{
+  return XEXP (insn, 0);
+}
+
+inline rtx_insn *NEXT_INSN (const_rtx insn)
+{
+  rtx next = XEXP (insn, 1);
+  return safe_as_a <rtx_insn *> (next);
+}
+
+inline rtx& SET_NEXT_INSN (rtx insn)
+{
+  return XEXP (insn, 1);
+}
 
 #define BLOCK_FOR_INSN(INSN) XBBDEF (INSN, 2)