This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Clean up two places where we remove REG_EQ* notes


Hi,

This patch just cleans up code in combine.c and postreload.c that
looks the same and does the same.  I've factored that code into a
new function.

Bootstrapped and tested on i686-pc-linux-gnu.  OK for the trunk?

Gr.
Steven


	* rtl.h (remove_reg_equal_equiv_notes): New prototype.
	* rtlanal.c (remove_reg_equal_equiv_notes): New function.
	* combine.c (adjust_for_new_dest): Use it.
	* postreload.c (reload_combine): Likewise.

Index: rtl.h
===================================================================
--- rtl.h	(revision 122166)
+++ rtl.h	(working copy)
@@ -1702,6 +1702,7 @@ extern int find_reg_fusage (rtx, enum rt
 extern int find_regno_fusage (rtx, enum rtx_code, unsigned int);
 extern int pure_call_p (rtx);
 extern void remove_note (rtx, rtx);
+extern void remove_reg_equal_equiv_notes (rtx);
 extern int side_effects_p (rtx);
 extern int volatile_refs_p (rtx);
 extern int volatile_insn_p (rtx);
Index: rtlanal.c
===================================================================
--- rtlanal.c	(revision 122166)
+++ rtlanal.c	(working copy)
@@ -1813,6 +1820,24 @@ remove_note (rtx insn, rtx note)
   gcc_unreachable ();
 }
 
+/* Remove REG_EQUAL and/or REG_EQUIV notes if INSN has such notes.  */
+
+void
+remove_reg_equal_equiv_notes (rtx insn)
+{
+  rtx *loc;
+
+  loc = &REG_NOTES (insn);
+  while (*loc)
+    {
+      enum reg_note kind = REG_NOTE_KIND (*loc);
+      if (kind == REG_EQUAL || kind == REG_EQUIV)
+	*loc = XEXP (*loc, 1);
+      else
+	loc = &XEXP (*loc, 1);
+    }
+}
+
 /* Search LISTP (an EXPR_LIST) for an entry whose first operand is NODE and
    return 1 if it is found.  A simple equality test is used to determine if
    NODE matches.  */
Index: combine.c
===================================================================
--- combine.c	(revision 122166)
+++ combine.c	(working copy)
@@ -1726,18 +1726,8 @@ likely_spilled_retval_p (rtx insn)
 static void
 adjust_for_new_dest (rtx insn)
 {
-  rtx *loc;
-
   /* For notes, be conservative and simply remove them.  */
-  loc = &REG_NOTES (insn);
-  while (*loc)
-    {
-      enum reg_note kind = REG_NOTE_KIND (*loc);
-      if (kind == REG_EQUAL || kind == REG_EQUIV)
-	*loc = XEXP (*loc, 1);
-      else
-	loc = &XEXP (*loc, 1);
-    }
+  remove_reg_equal_equiv_notes (insn);
 
   /* The new insn will have a destination that was previously the destination
      of an insn just above it.  Call distribute_links to make a LOG_LINK from
Index: postreload.c
===================================================================
--- postreload.c	(revision 122166)
+++ postreload.c	(working copy)
@@ -887,22 +887,13 @@ reload_combine (void)
 
 	      if (apply_change_group ())
 		{
-		  rtx *np;
-
 		  /* Delete the reg-reg addition.  */
 		  delete_insn (insn);
 
 		  if (reg_state[regno].offset != const0_rtx)
 		    /* Previous REG_EQUIV / REG_EQUAL notes for PREV
 		       are now invalid.  */
-		    for (np = &REG_NOTES (prev); *np;)
-		      {
-			if (REG_NOTE_KIND (*np) == REG_EQUAL
-			    || REG_NOTE_KIND (*np) == REG_EQUIV)
-			  *np = XEXP (*np, 1);
-			else
-			  np = &XEXP (*np, 1);
-		      }
+		    remove_reg_equal_equiv_notes (prev);
 
 		  reg_state[regno].use_index = RELOAD_COMBINE_MAX_USES;
 		  reg_state[REGNO (const_reg)].store_ruid


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]