mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			recog.c (preprocess_constraints): Don't skip disabled alternatives.
gcc/ * recog.c (preprocess_constraints): Don't skip disabled alternatives. * ira-lives.c (check_and_make_def_conflict): Check for disabled alternatives. (make_early_clobber_and_input_conflicts): Likewise. * config/i386/i386.c (ix86_legitimate_combined_insn): Likewise. From-SVN: r211239
This commit is contained in:
		
							parent
							
								
									5efe5dec7a
								
							
						
					
					
						commit
						5f2e0797ae
					
				|  | @ -1,3 +1,11 @@ | ||||||
|  | 2014-06-04  Richard Sandiford  <rdsandiford@googlemail.com> | ||||||
|  | 
 | ||||||
|  | 	* recog.c (preprocess_constraints): Don't skip disabled alternatives. | ||||||
|  | 	* ira-lives.c (check_and_make_def_conflict): Check for disabled | ||||||
|  | 	alternatives. | ||||||
|  | 	(make_early_clobber_and_input_conflicts): Likewise. | ||||||
|  | 	* config/i386/i386.c (ix86_legitimate_combined_insn): Likewise. | ||||||
|  | 
 | ||||||
| 2014-06-04  Richard Sandiford  <rdsandiford@googlemail.com> | 2014-06-04  Richard Sandiford  <rdsandiford@googlemail.com> | ||||||
| 
 | 
 | ||||||
| 	* recog.h (alternative_class): New function. | 	* recog.h (alternative_class): New function. | ||||||
|  |  | ||||||
|  | @ -5875,8 +5875,11 @@ ix86_legitimate_combined_insn (rtx insn) | ||||||
| 	  /* Operand has no constraints, anything is OK.  */ | 	  /* Operand has no constraints, anything is OK.  */ | ||||||
|  	  win = !n_alternatives; |  	  win = !n_alternatives; | ||||||
| 
 | 
 | ||||||
|  | 	  alternative_mask enabled = recog_data.enabled_alternatives; | ||||||
| 	  for (j = 0; j < n_alternatives; j++, op_alt += n_operands) | 	  for (j = 0; j < n_alternatives; j++, op_alt += n_operands) | ||||||
| 	    { | 	    { | ||||||
|  | 	      if (!TEST_BIT (enabled, j)) | ||||||
|  | 		continue; | ||||||
| 	      if (op_alt[i].anything_ok | 	      if (op_alt[i].anything_ok | ||||||
| 		  || (op_alt[i].matches != -1 | 		  || (op_alt[i].matches != -1 | ||||||
| 		      && operands_match_p | 		      && operands_match_p | ||||||
|  |  | ||||||
|  | @ -641,8 +641,11 @@ check_and_make_def_conflict (int alt, int def, enum reg_class def_cl) | ||||||
|       /* If there's any alternative that allows USE to match DEF, do not
 |       /* If there's any alternative that allows USE to match DEF, do not
 | ||||||
| 	 record a conflict.  If that causes us to create an invalid | 	 record a conflict.  If that causes us to create an invalid | ||||||
| 	 instruction due to the earlyclobber, reload must fix it up.  */ | 	 instruction due to the earlyclobber, reload must fix it up.  */ | ||||||
|  |       alternative_mask enabled = recog_data.enabled_alternatives; | ||||||
|       for (alt1 = 0; alt1 < recog_data.n_alternatives; alt1++) |       for (alt1 = 0; alt1 < recog_data.n_alternatives; alt1++) | ||||||
| 	{ | 	{ | ||||||
|  | 	  if (!TEST_BIT (enabled, alt1)) | ||||||
|  | 	    continue; | ||||||
| 	  operand_alternative *op_alt1 = &recog_op_alt[alt1 * n_operands]; | 	  operand_alternative *op_alt1 = &recog_op_alt[alt1 * n_operands]; | ||||||
| 	  if (op_alt1[use].matches == def | 	  if (op_alt1[use].matches == def | ||||||
| 	      || (use < n_operands - 1 | 	      || (use < n_operands - 1 | ||||||
|  | @ -688,8 +691,10 @@ make_early_clobber_and_input_conflicts (void) | ||||||
| 
 | 
 | ||||||
|   int n_alternatives = recog_data.n_alternatives; |   int n_alternatives = recog_data.n_alternatives; | ||||||
|   int n_operands = recog_data.n_operands; |   int n_operands = recog_data.n_operands; | ||||||
|  |   alternative_mask enabled = recog_data.enabled_alternatives; | ||||||
|   operand_alternative *op_alt = recog_op_alt; |   operand_alternative *op_alt = recog_op_alt; | ||||||
|   for (alt = 0; alt < n_alternatives; alt++, op_alt += n_operands) |   for (alt = 0; alt < n_alternatives; alt++, op_alt += n_operands) | ||||||
|  |     if (TEST_BIT (enabled, alt)) | ||||||
|       for (def = 0; def < n_operands; def++) |       for (def = 0; def < n_operands; def++) | ||||||
| 	{ | 	{ | ||||||
| 	  def_cl = NO_REGS; | 	  def_cl = NO_REGS; | ||||||
|  |  | ||||||
|  | @ -2352,12 +2352,6 @@ preprocess_constraints (void) | ||||||
| 	  op_alt[i].matches = -1; | 	  op_alt[i].matches = -1; | ||||||
| 	  op_alt[i].matched = -1; | 	  op_alt[i].matched = -1; | ||||||
| 
 | 
 | ||||||
| 	  if (!TEST_BIT (recog_data.enabled_alternatives, j)) |  | ||||||
| 	    { |  | ||||||
| 	      p = skip_alternative (p); |  | ||||||
| 	      continue; |  | ||||||
| 	    } |  | ||||||
| 
 |  | ||||||
| 	  if (*p == '\0' || *p == ',') | 	  if (*p == '\0' || *p == ',') | ||||||
| 	    { | 	    { | ||||||
| 	      op_alt[i].anything_ok = 1; | 	      op_alt[i].anything_ok = 1; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Richard Sandiford
						Richard Sandiford