+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
(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)