The attached patch strengthens the "from_insn" and "to_insn" params of
reg_set_between_p from rtx to rtx_insn * (along with some vars at a
couple of callsites), and thus falls under the pre-approval granted by
Jeff here:
  https://gcc.gnu.org/ml/gcc-patches/2014-08/msg01310.html

Bootstrapped on x86_64-unknown-linux-gnu (Fedora 20), and has been
rebuilt as part of a config-list.mk build for all working configurations
(albeit with other patches for the latter case).

Committed to trunk as r215222.
Index: gcc/rtlanal.c
===================================================================
--- gcc/rtlanal.c	(revision 215221)
+++ gcc/rtlanal.c	(revision 215222)
@@ -947,10 +947,9 @@
    FROM_INSN and TO_INSN (exclusive of those two).  */
 
 int
-reg_set_between_p (const_rtx reg, const_rtx uncast_from_insn, const_rtx to_insn)
+reg_set_between_p (const_rtx reg, const rtx_insn *from_insn,
+		   const rtx_insn *to_insn)
 {
-  const rtx_insn *from_insn =
-    safe_as_a <const rtx_insn *> (uncast_from_insn);
   const rtx_insn *insn;
 
   if (from_insn == to_insn)
Index: gcc/ChangeLog
===================================================================
--- gcc/ChangeLog	(revision 215221)
+++ gcc/ChangeLog	(revision 215222)
@@ -1,3 +1,13 @@
+2014-09-12  David Malcolm  <dmalc...@redhat.com>
+
+	* config/alpha/alpha.c (alpha_ra_ever_killed): Replace NULL_RTX
+	with NULL when dealing with an insn.
+	* config/sh/sh.c (sh_reorg): Strengthen local "last_float_move"
+	from rtx to rtx_insn *.
+	* rtl.h (reg_set_between_p): Strengthen params 2 and 3 from
+	const_rtx to const rtx_insn *.
+	* rtlanal.c (reg_set_between_p): Likewise, removing a checked cast.
+
 2014-09-12  Trevor Saunders  <tsaund...@mozilla.com>
 
 	* hash-table.h (gt_pch_nx): Don't call gt_pch_note_object within an
Index: gcc/rtl.h
===================================================================
--- gcc/rtl.h	(revision 215221)
+++ gcc/rtl.h	(revision 215222)
@@ -2759,7 +2759,7 @@
 extern int count_occurrences (const_rtx, const_rtx, int);
 extern int reg_referenced_p (const_rtx, const_rtx);
 extern int reg_used_between_p (const_rtx, const rtx_insn *, const rtx_insn *);
-extern int reg_set_between_p (const_rtx, const_rtx, const_rtx);
+extern int reg_set_between_p (const_rtx, const rtx_insn *, const rtx_insn *);
 extern int commutative_operand_precedence (rtx);
 extern bool swap_commutative_operands_p (rtx, rtx);
 extern int modified_between_p (const_rtx, const rtx_insn *, const rtx_insn *);
Index: gcc/config/alpha/alpha.c
===================================================================
--- gcc/config/alpha/alpha.c	(revision 215221)
+++ gcc/config/alpha/alpha.c	(revision 215222)
@@ -5001,7 +5001,7 @@
   top = get_insns ();
   pop_topmost_sequence ();
 
-  return reg_set_between_p (gen_rtx_REG (Pmode, REG_RA), top, NULL_RTX);
+  return reg_set_between_p (gen_rtx_REG (Pmode, REG_RA), top, NULL);
 }
 
 
Index: gcc/config/sh/sh.c
===================================================================
--- gcc/config/sh/sh.c	(revision 215221)
+++ gcc/config/sh/sh.c	(revision 215222)
@@ -6281,7 +6281,8 @@
 	  /* Scan ahead looking for a barrier to stick the constant table
 	     behind.  */
 	  rtx_insn *barrier = find_barrier (num_mova, mova, insn);
-	  rtx last_float_move = NULL_RTX, last_float = 0, *last_float_addr = NULL;
+	  rtx_insn *last_float_move = NULL;
+	  rtx last_float = 0, *last_float_addr = NULL;
 	  int need_aligned_label = 0;
 
 	  if (num_mova && ! mova_p (mova))

Reply via email to