Patchwork RFA: MEP: Fix use of delete_insn.

login
register
mail settings
Submitter Nick Clifton
Date July 3, 2012, 2:48 p.m.
Message ID <4FF30650.7010500@redhat.com>
Download mbox | patch
Permalink /patch/168836/
State New
Headers show

Comments

Nick Clifton - July 3, 2012, 2:48 p.m.
Hi DJ,


> My concern is more about calling NEXT_INSN on a deleted insn.  If
> that's guaranteed to be "reliable", I'm OK with it.

> So pick whichever solution is more future-proof and go for it :-)

OK, I have gone with the following.  I have replaced NEXT_INSN with 
next_nonnote_nondebug_insn, so that we are sure that we are dealing with 
a valid potential insn for removal.  We do not have to worry about 
calling this on a deleted insn because we know that delete_insn() will 
only be called on a single set insn, and that deleting it will only 
remove that insn and not any others that follow it.

Whilst doing this I noticed that follow might be set incorrectly (to a 
debug insn), so I fixed that as well.

Cheers
   Nick

gcc/ChangeLog
2012-07-03  Nick Clifton  <nickc@redhat.com>

	* config/mep/mep.c (mep_reorg_regmove): Use
	next_nonnote_non_debug_insn to advance to the next insn.  Do not
	expect delete_insn to return an rtx.

(insn));

@@ -5096,7 +5096,7 @@
  					       follow, where))
  		{
  		  count ++;
-		  next = delete_insn (insn);
+		  delete_insn (insn);
  		  if (dump_file)
  		    {
  		      fprintf (dump_file, "\n----- Success!  new insn:\n\n");

Patch

Index: gcc/config/mep/mep.c
===================================================================
--- gcc/config/mep/mep.c	(revision 189193)
+++ gcc/config/mep/mep.c	(working copy)
@@ -5022,7 +5022,7 @@ 
        done = 1;
        for (insn = insns; insn; insn = next)
  	{
-	  next = NEXT_INSN (insn);
+	  next = next_nonnote_nondebug_insn (insn);
  	  if (GET_CODE (insn) != INSN)
  	    continue;
  	  pat = PATTERN (insn);
@@ -5035,7 +5035,7 @@ 
  	      && find_regno_note (insn, REG_DEAD, REGNO (SET_SRC (pat)))
  	      && mep_compatible_reg_class (REGNO (SET_SRC (pat)), REGNO 
(SET_DEST (pat))))
  	    {
-	      follow = next_nonnote_insn (insn);
+	      follow = next_nonnote_nondebug_insn (insn);
  	      if (dump_file)
  		fprintf (dump_file, "superfluous moves: considering %d\n", INSN_UID