diff mbox

regcprop.c bug fix

Message ID 2C4421AE-E505-414B-8123-4DE9E0B785D8@comcast.net
State New
Headers show

Commit Message

Mike Stump Oct. 21, 2011, 2:16 a.m. UTC
On Oct 20, 2011, at 6:22 AM, Bernd Schmidt wrote:
> I found that maximally confusing, so let me try to rephrase it to see if
> I understood you. The two calls to validate_change clobber the
> recog_data even if they fail. In case they failed, we want to continue
> looking at data from the original insn, so we must recompute it.

Yes, exactly.

> diagnosis. Better to move the recomputation into the if statement that
> contains the validate_change calls and possibly add a comment about the
> effect of that function; otherwise OK.

Ok, I've updated the code and added some comments and finished testing and checked it in.  Thanks.
2011-10-20  Mike Stump  <mikestump@comcast.net>

	* regcprop.c (copyprop_hardreg_forward_1): Update recog_data
	after validate_change wipes it out.
diff mbox

Patch

Index: regcprop.c
===================================================================
--- regcprop.c	(revision 180265)
+++ regcprop.c	(working copy)
@@ -840,6 +840,12 @@  copyprop_hardreg_forward_1 (basic_block 
 		  changed = true;
 		  goto did_replacement;
 		}
+	      /* We need to re-extract as validate_change clobbers
+		 recog_data.  */
+	      extract_insn (insn);
+	      if (! constrain_operands (1))
+		fatal_insn_not_found (insn);
+	      preprocess_constraints ();
 	    }
 
 	  /* Otherwise, try all valid registers and see if its valid.  */
@@ -862,6 +868,12 @@  copyprop_hardreg_forward_1 (basic_block 
 		      changed = true;
 		      goto did_replacement;
 		    }
+		  /* We need to re-extract as validate_change clobbers
+		     recog_data.  */
+		  extract_insn (insn);
+		  if (! constrain_operands (1))
+		    fatal_insn_not_found (insn);
+		  preprocess_constraints ();
 		}
 	    }
 	}