[PATCH 3/6] Add FOR_EACH_INSN_INFO_MW

Richard Sandiford rdsandiford@googlemail.com
Sat Jun 14 19:45:00 GMT 2014


Similar to patch 1, but for df_mw_hardregs.  I think the "S" in "MWS"
is a plural, so I went for "mw" in the variable names for single entries.

Richard


gcc/
	* df.h (FOR_EACH_INSN_INFO_MW): New macro.
	* df-problems.c (df_note_bb_compute): Use it.
	* regstat.c (regstat_bb_compute_ri): Likewise.

Index: gcc/df.h
===================================================================
--- gcc/df.h	2014-06-13 22:29:06.691558913 +0100
+++ gcc/df.h	2014-06-13 22:39:44.653179269 +0100
@@ -766,6 +766,10 @@ #define FOR_EACH_INSN_INFO_EQ_USE(ITER,
   for (df_ref *ITER##_ = DF_INSN_INFO_EQ_USES (INSN); (ITER = *ITER##_); \
        ++ITER##_)
 
+#define FOR_EACH_INSN_INFO_MW(ITER, INSN) \
+  for (df_mw_hardreg **ITER##_ = DF_INSN_INFO_MWS (INSN); (ITER = *ITER##_); \
+       ++ITER##_)
+
 #define FOR_EACH_INSN_DEF(ITER, INSN) \
   FOR_EACH_INSN_INFO_DEF(ITER, DF_INSN_INFO_GET (INSN))
 
Index: gcc/df-problems.c
===================================================================
--- gcc/df-problems.c	2014-06-13 22:29:06.690558904 +0100
+++ gcc/df-problems.c	2014-06-13 22:39:32.271064973 +0100
@@ -3114,7 +3114,7 @@ df_note_bb_compute (unsigned int bb_inde
   FOR_BB_INSNS_REVERSE (bb, insn)
     {
       df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
-      struct df_mw_hardreg **mws_rec;
+      df_mw_hardreg *mw;
       int debug_insn;
 
       if (!INSN_P (insn))
@@ -3137,17 +3137,11 @@ df_note_bb_compute (unsigned int bb_inde
 
 	  /* We only care about real sets for calls.  Clobbers cannot
 	     be depended on to really die.  */
-	  mws_rec = DF_INSN_INFO_MWS (insn_info);
-	  while (*mws_rec)
-	    {
-	      struct df_mw_hardreg *mws = *mws_rec;
-	      if ((DF_MWS_REG_DEF_P (mws))
-		  && !df_ignore_stack_reg (mws->start_regno))
-	      df_set_unused_notes_for_mw (insn,
-					  mws, live, do_not_gen,
+	  FOR_EACH_INSN_INFO_MW (mw, insn_info)
+	    if ((DF_MWS_REG_DEF_P (mw))
+		&& !df_ignore_stack_reg (mw->start_regno))
+	      df_set_unused_notes_for_mw (insn, mw, live, do_not_gen,
 					  artificial_uses, &debug);
-	      mws_rec++;
-	    }
 
 	  /* All of the defs except the return value are some sort of
 	     clobber.  This code is for the return.  */
@@ -3168,16 +3162,10 @@ df_note_bb_compute (unsigned int bb_inde
       else
 	{
 	  /* Regular insn.  */
-	  mws_rec = DF_INSN_INFO_MWS (insn_info);
-	  while (*mws_rec)
-	    {
-	      struct df_mw_hardreg *mws = *mws_rec;
-	      if (DF_MWS_REG_DEF_P (mws))
-		df_set_unused_notes_for_mw (insn,
-					    mws, live, do_not_gen,
-					    artificial_uses, &debug);
-	      mws_rec++;
-	    }
+	  FOR_EACH_INSN_INFO_MW (mw, insn_info)
+	    if (DF_MWS_REG_DEF_P (mw))
+	      df_set_unused_notes_for_mw (insn, mw, live, do_not_gen,
+					  artificial_uses, &debug);
 
 	  FOR_EACH_INSN_INFO_DEF (def, insn_info)
 	    {
@@ -3194,25 +3182,19 @@ df_note_bb_compute (unsigned int bb_inde
 	}
 
       /* Process the uses.  */
-      mws_rec = DF_INSN_INFO_MWS (insn_info);
-      while (*mws_rec)
-	{
-	  struct df_mw_hardreg *mws = *mws_rec;
-	  if (DF_MWS_REG_USE_P (mws)
-	      && !df_ignore_stack_reg (mws->start_regno))
-	    {
-	      bool really_add_notes = debug_insn != 0;
-
-	      df_set_dead_notes_for_mw (insn,
-					mws, live, do_not_gen,
-					artificial_uses,
-					&really_add_notes);
-
-	      if (really_add_notes)
-		debug_insn = -1;
-	    }
-	  mws_rec++;
-	}
+      FOR_EACH_INSN_INFO_MW (mw, insn_info)
+	if (DF_MWS_REG_USE_P (mw)
+	    && !df_ignore_stack_reg (mw->start_regno))
+	  {
+	    bool really_add_notes = debug_insn != 0;
+
+	    df_set_dead_notes_for_mw (insn, mw, live, do_not_gen,
+				      artificial_uses,
+				      &really_add_notes);
+
+	    if (really_add_notes)
+	      debug_insn = -1;
+	  }
 
       FOR_EACH_INSN_INFO_USE (use, insn_info)
 	{
Index: gcc/regstat.c
===================================================================
--- gcc/regstat.c	2014-06-13 22:29:06.691558913 +0100
+++ gcc/regstat.c	2014-06-13 22:30:12.519134950 +0100
@@ -153,7 +153,7 @@ regstat_bb_compute_ri (unsigned int bb_i
     {
       struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
       bitmap_iterator bi;
-      struct df_mw_hardreg **mws_rec;
+      df_mw_hardreg *mw;
       rtx link;
 
       if (!NONDEBUG_INSN_P (insn))
@@ -202,29 +202,26 @@ regstat_bb_compute_ri (unsigned int bb_i
       /* We only care about real sets for calls.  Clobbers cannot
 	 be depended on.
 	 Only do this if the value is totally dead.  */
-      for (mws_rec = DF_INSN_INFO_MWS (insn_info); *mws_rec; mws_rec++)
-	{
-	  struct df_mw_hardreg *mws = *mws_rec;
-	  if (DF_MWS_REG_DEF_P (mws))
-	    {
-	      bool all_dead = true;
-	      unsigned int r;
-
-	      for (r = mws->start_regno; r <= mws->end_regno; r++)
-		if (bitmap_bit_p (artificial_uses, r)
-		    || bitmap_bit_p (live, r))
-		  {
-		    all_dead = false;
-		    break;
-		  }
-
-	      if (all_dead)
+      FOR_EACH_INSN_INFO_MW (mw, insn_info)
+	if (DF_MWS_REG_DEF_P (mw))
+	  {
+	    bool all_dead = true;
+	    unsigned int r;
+
+	    for (r = mw->start_regno; r <= mw->end_regno; r++)
+	      if (bitmap_bit_p (artificial_uses, r)
+		  || bitmap_bit_p (live, r))
 		{
-		  regno = mws->start_regno;
-		  REG_LIVE_LENGTH (regno)++;
+		  all_dead = false;
+		  break;
 		}
-	    }
-	}
+
+	    if (all_dead)
+	      {
+		regno = mw->start_regno;
+		REG_LIVE_LENGTH (regno)++;
+	      }
+	  }
 
       /* All of the defs except the return value are some sort of
 	 clobber.  This code is for the return.  */



More information about the Gcc-patches mailing list