Commit 6ddfdb0f by Bernd Schmidt Committed by Bernd Schmidt

recog.h (struct recog_data): New field is_operator.

	* recog.h (struct recog_data): New field is_operator.
	(struct insn_operand_data): New field is_operator.
	* recog.c (extract_insn): Set recog_data.is_operator.
	* genoutput.c (output_operand_data): Emit code to set the
	is_operator field.
	* reload.c (find_reloads): Use it rather than testing for an
	empty constraint string.

From-SVN: r158403
parent 5312b066
2010-04-16 Bernd Schmidt <bernd.schmidt@codesourcery.com>
* recog.h (struct recog_data): New field is_operator.
(struct insn_operand_data): New field is_operator.
* recog.c (extract_insn): Set recog_data.is_operator.
* genoutput.c (output_operand_data): Emit code to set the
is_operator field.
* reload.c (find_reloads): Use it rather than testing for an
empty constraint string.
2010-04-16 Jakub Jelinek <jakub@redhat.com> 2010-04-16 Jakub Jelinek <jakub@redhat.com>
* alias.c (memrefs_conflict_p): If x and y are the same VALUE, * alias.c (memrefs_conflict_p): If x and y are the same VALUE,
......
...@@ -266,6 +266,8 @@ output_operand_data (void) ...@@ -266,6 +266,8 @@ output_operand_data (void)
printf (" %d,\n", d->strict_low); printf (" %d,\n", d->strict_low);
printf (" %d,\n", d->constraint == NULL ? 1 : 0);
printf (" %d\n", d->eliminable); printf (" %d\n", d->eliminable);
printf(" },\n"); printf(" },\n");
......
...@@ -2082,6 +2082,7 @@ extract_insn (rtx insn) ...@@ -2082,6 +2082,7 @@ extract_insn (rtx insn)
recog_data.operand_loc, recog_data.operand_loc,
recog_data.constraints, recog_data.constraints,
recog_data.operand_mode, NULL); recog_data.operand_mode, NULL);
memset (recog_data.is_operator, 0, sizeof recog_data.is_operator);
if (noperands > 0) if (noperands > 0)
{ {
const char *p = recog_data.constraints[0]; const char *p = recog_data.constraints[0];
...@@ -2111,6 +2112,7 @@ extract_insn (rtx insn) ...@@ -2111,6 +2112,7 @@ extract_insn (rtx insn)
for (i = 0; i < noperands; i++) for (i = 0; i < noperands; i++)
{ {
recog_data.constraints[i] = insn_data[icode].operand[i].constraint; recog_data.constraints[i] = insn_data[icode].operand[i].constraint;
recog_data.is_operator[i] = insn_data[icode].operand[i].is_operator;
recog_data.operand_mode[i] = insn_data[icode].operand[i].mode; recog_data.operand_mode[i] = insn_data[icode].operand[i].mode;
/* VOIDmode match_operands gets mode from their real operand. */ /* VOIDmode match_operands gets mode from their real operand. */
if (recog_data.operand_mode[i] == VOIDmode) if (recog_data.operand_mode[i] == VOIDmode)
......
...@@ -194,6 +194,9 @@ struct recog_data ...@@ -194,6 +194,9 @@ struct recog_data
/* Gives the constraint string for operand N. */ /* Gives the constraint string for operand N. */
const char *constraints[MAX_RECOG_OPERANDS]; const char *constraints[MAX_RECOG_OPERANDS];
/* Nonzero if operand N is a match_operator or a match_parallel. */
char is_operator[MAX_RECOG_OPERANDS];
/* Gives the mode of operand N. */ /* Gives the mode of operand N. */
enum machine_mode operand_mode[MAX_RECOG_OPERANDS]; enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
...@@ -260,6 +263,8 @@ struct insn_operand_data ...@@ -260,6 +263,8 @@ struct insn_operand_data
const char strict_low; const char strict_low;
const char is_operator;
const char eliminable; const char eliminable;
}; };
......
...@@ -3631,7 +3631,7 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known, ...@@ -3631,7 +3631,7 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known,
|| modified[j] != RELOAD_WRITE) || modified[j] != RELOAD_WRITE)
&& j != i && j != i
/* Ignore things like match_operator operands. */ /* Ignore things like match_operator operands. */
&& *recog_data.constraints[j] != 0 && !recog_data.is_operator[j]
/* Don't count an input operand that is constrained to match /* Don't count an input operand that is constrained to match
the early clobber operand. */ the early clobber operand. */
&& ! (this_alternative_matches[j] == i && ! (this_alternative_matches[j] == i
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment