mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			genpreds.c (const_int_start, [...]): New variables.
gcc/ * genpreds.c (const_int_start, const_int_end): New variables. (choose_enum_order): Output CONST_INT constraints before memory constraints. (write_tm_preds_h): Always define insn_const_int_ok_for_constraint. Add CT_CONST_INT. * ira-costs.c (record_reg_classes): Handle CT_CONST_INT. * ira.c (ira_setup_alts): Likewise. * lra-constraints.c (process_alt_operands): Likewise. * recog.c (asm_operand_ok, preprocess_constraints): Likewise. * reload.c (find_reloads): Likewise. From-SVN: r211473
This commit is contained in:
		
							parent
							
								
									3c4c42e826
								
							
						
					
					
						commit
						d9c35eee65
					
				|  | @ -1,3 +1,16 @@ | |||
| 2014-06-11  Richard Sandiford  <rdsandiford@googlemail.com> | ||||
| 
 | ||||
| 	* genpreds.c (const_int_start, const_int_end): New variables. | ||||
| 	(choose_enum_order): Output CONST_INT constraints before memory | ||||
| 	constraints. | ||||
| 	(write_tm_preds_h): Always define insn_const_int_ok_for_constraint. | ||||
| 	Add CT_CONST_INT. | ||||
| 	* ira-costs.c (record_reg_classes): Handle CT_CONST_INT. | ||||
| 	* ira.c (ira_setup_alts): Likewise. | ||||
| 	* lra-constraints.c (process_alt_operands): Likewise. | ||||
| 	* recog.c (asm_operand_ok, preprocess_constraints): Likewise. | ||||
| 	* reload.c (find_reloads): Likewise. | ||||
| 
 | ||||
| 2014-06-11  Richard Sandiford  <rdsandiford@googlemail.com> | ||||
| 
 | ||||
| 	* recog.h (operand_alternative): Remove offmem_ok, nonffmem_ok, | ||||
|  |  | |||
|  | @ -690,6 +690,7 @@ static unsigned int num_constraints; | |||
| static const constraint_data **enum_order; | ||||
| static unsigned int register_start, register_end; | ||||
| static unsigned int satisfied_start; | ||||
| static unsigned int const_int_start, const_int_end; | ||||
| static unsigned int memory_start, memory_end; | ||||
| static unsigned int address_start, address_end; | ||||
| 
 | ||||
|  | @ -931,6 +932,12 @@ choose_enum_order (void) | |||
| 
 | ||||
|   satisfied_start = next; | ||||
| 
 | ||||
|   const_int_start = next; | ||||
|   FOR_ALL_CONSTRAINTS (c) | ||||
|     if (c->is_const_int) | ||||
|       enum_order[next++] = c; | ||||
|   const_int_end = next; | ||||
| 
 | ||||
|   memory_start = next; | ||||
|   FOR_ALL_CONSTRAINTS (c) | ||||
|     if (c->is_memory) | ||||
|  | @ -944,7 +951,7 @@ choose_enum_order (void) | |||
|   address_end = next; | ||||
| 
 | ||||
|   FOR_ALL_CONSTRAINTS (c) | ||||
|     if (!c->is_register && !c->is_memory && !c->is_address) | ||||
|     if (!c->is_register && !c->is_const_int && !c->is_memory && !c->is_address) | ||||
|       enum_order[next++] = c; | ||||
|   gcc_assert (next == num_constraints); | ||||
| } | ||||
|  | @ -1361,6 +1368,13 @@ write_tm_preds_h (void) | |||
| 	      "#define CONST_OK_FOR_CONSTRAINT_P(v_,c_,s_) \\\n" | ||||
| 	      "    insn_const_int_ok_for_constraint (v_, " | ||||
| 	      "lookup_constraint (s_))\n"); | ||||
|       else | ||||
| 	puts ("static inline bool\n" | ||||
| 	      "insn_const_int_ok_for_constraint (HOST_WIDE_INT," | ||||
| 	      " enum constraint_num)\n" | ||||
| 	      "{\n" | ||||
| 	      "  return false;\n" | ||||
| 	      "}\n"); | ||||
|       if (have_const_dbl_constraints) | ||||
| 	puts ("#define CONST_DOUBLE_OK_FOR_CONSTRAINT_P(v_,c_,s_) \\\n" | ||||
| 	      "    constraint_satisfied_p (v_, lookup_constraint (s_))\n"); | ||||
|  | @ -1370,6 +1384,7 @@ write_tm_preds_h (void) | |||
|       puts ("enum constraint_type\n" | ||||
| 	    "{\n" | ||||
| 	    "  CT_REGISTER,\n" | ||||
| 	    "  CT_CONST_INT,\n" | ||||
| 	    "  CT_MEMORY,\n" | ||||
| 	    "  CT_ADDRESS,\n" | ||||
| 	    "  CT_FIXED_FORM\n" | ||||
|  | @ -1378,7 +1393,9 @@ write_tm_preds_h (void) | |||
| 	    "static inline enum constraint_type\n" | ||||
| 	    "get_constraint_type (enum constraint_num c)\n" | ||||
| 	    "{"); | ||||
|       auto_vec <std::pair <unsigned int, const char *>, 3> values; | ||||
|       auto_vec <std::pair <unsigned int, const char *>, 4> values; | ||||
|       if (const_int_start != const_int_end) | ||||
| 	values.safe_push (std::make_pair (const_int_start, "CT_CONST_INT")); | ||||
|       if (memory_start != memory_end) | ||||
| 	values.safe_push (std::make_pair (memory_start, "CT_MEMORY")); | ||||
|       if (address_start != address_end) | ||||
|  |  | |||
|  | @ -763,6 +763,12 @@ record_reg_classes (int n_alts, int n_ops, rtx *ops, | |||
| 			classes[i] = ira_reg_class_subunion[classes[i]][cl]; | ||||
| 		      break; | ||||
| 
 | ||||
| 		    case CT_CONST_INT: | ||||
| 		      if (CONST_INT_P (op) | ||||
| 			  && insn_const_int_ok_for_constraint (INTVAL (op), cn)) | ||||
| 			win = 1; | ||||
| 		      break; | ||||
| 
 | ||||
| 		    case CT_MEMORY: | ||||
| 		      /* Every MEM can be reloaded to fit.  */ | ||||
| 		      insn_allows_mem[i] = allows_mem[i] = 1; | ||||
|  |  | |||
|  | @ -1936,6 +1936,13 @@ ira_setup_alts (rtx insn, HARD_REG_SET &alts) | |||
| 			    goto op_success; | ||||
| 			  break; | ||||
| 
 | ||||
| 			case CT_CONST_INT: | ||||
| 			  if (CONST_INT_P (op) | ||||
| 			      && (insn_const_int_ok_for_constraint | ||||
| 				  (INTVAL (op), cn))) | ||||
| 			    goto op_success; | ||||
| 			  break; | ||||
| 
 | ||||
| 			case CT_ADDRESS: | ||||
| 			case CT_MEMORY: | ||||
| 			  goto op_success; | ||||
|  |  | |||
|  | @ -2041,6 +2041,12 @@ process_alt_operands (int only_alternative) | |||
| 			goto reg; | ||||
| 		      break; | ||||
| 
 | ||||
| 		    case CT_CONST_INT: | ||||
| 		      if (CONST_INT_P (op) | ||||
| 			  && insn_const_int_ok_for_constraint (INTVAL (op), cn)) | ||||
| 			win = true; | ||||
| 		      break; | ||||
| 
 | ||||
| 		    case CT_MEMORY: | ||||
| 		      if (MEM_P (op) | ||||
| 			  && satisfies_memory_constraint_p (op, cn)) | ||||
|  |  | |||
							
								
								
									
										10
									
								
								gcc/recog.c
								
								
								
								
							
							
						
						
									
										10
									
								
								gcc/recog.c
								
								
								
								
							|  | @ -1920,6 +1920,13 @@ asm_operand_ok (rtx op, const char *constraint, const char **constraints) | |||
| 		goto reg; | ||||
| 	      break; | ||||
| 
 | ||||
| 	    case CT_CONST_INT: | ||||
| 	      if (!result | ||||
| 		  && CONST_INT_P (op) | ||||
| 		  && insn_const_int_ok_for_constraint (INTVAL (op), cn)) | ||||
| 		result = 1; | ||||
| 	      break; | ||||
| 
 | ||||
| 	    case CT_MEMORY: | ||||
| 	      /* Every memory operand can be reloaded to fit.  */ | ||||
| 	      result = result || memory_operand (op, VOIDmode); | ||||
|  | @ -2443,6 +2450,9 @@ preprocess_constraints (int n_operands, int n_alternatives, | |||
| 			op_alt[i].cl = reg_class_subunion[op_alt[i].cl][cl]; | ||||
| 		      break; | ||||
| 
 | ||||
| 		    case CT_CONST_INT: | ||||
| 		      break; | ||||
| 
 | ||||
| 		    case CT_MEMORY: | ||||
| 		      op_alt[i].memory_ok = 1; | ||||
| 		      break; | ||||
|  |  | |||
|  | @ -3504,6 +3504,13 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known, | |||
| 			  goto reg; | ||||
| 			break; | ||||
| 
 | ||||
| 		      case CT_CONST_INT: | ||||
| 			if (CONST_INT_P (operand) | ||||
| 			    && (insn_const_int_ok_for_constraint | ||||
| 				(INTVAL (operand), cn))) | ||||
| 			  win = true; | ||||
| 			break; | ||||
| 
 | ||||
| 		      case CT_MEMORY: | ||||
| 			if (force_reload) | ||||
| 			  break; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Richard Sandiford
						Richard Sandiford