Commit 1e9c8405 by Richard Sandiford Committed by Richard Sandiford

genattrtab.c (insn_ent): Replace insn_code...

	* genattrtab.c (insn_ent): Replace insn_code, insn_index and lineno
	fields with a pointer to the instruction definition.
	(get_attr_value, fill_attr, make_length_attrs, remove_insn_ent)
	(insert_insn_ent, simplify_test_exp, optimize_attrs, write_attr_get)
	(write_attr_case, write_const_num_delay_slots): Update accordingly.
	(write_attr_case, write_const_num_delay_slots): Write the name of
	an insn next to its case statement.
	* genoutput.c (data): Add a filename field.
	(gen_insn, gen_peephole, gen_expand, gen_split): Set it.
	(output_insn_data): Print the location of each insn definition.
	* genrecog.c (write_action): Print the name of an insn above
	the statement that returns its code.

From-SVN: r85947
parent 1e5f1716
2004-08-13 Richard Sandiford <rsandifo@redhat.com>
* genattrtab.c (insn_ent): Replace insn_code, insn_index and lineno
fields with a pointer to the instruction definition.
(get_attr_value, fill_attr, make_length_attrs, remove_insn_ent)
(insert_insn_ent, simplify_test_exp, optimize_attrs, write_attr_get)
(write_attr_case, write_const_num_delay_slots): Update accordingly.
(write_attr_case, write_const_num_delay_slots): Write the name of
an insn next to its case statement.
* genoutput.c (data): Add a filename field.
(gen_insn, gen_peephole, gen_expand, gen_split): Set it.
(output_insn_data): Print the location of each insn definition.
* genrecog.c (write_action): Print the name of an insn above
the statement that returns its code.
2004-08-12 Andrew Pinski <pinskia@physics.uc.edu> 2004-08-12 Andrew Pinski <pinskia@physics.uc.edu>
* config/darwin-c.c (find_subframework_file): Fix spelling of cannot. * config/darwin-c.c (find_subframework_file): Fix spelling of cannot.
......
...@@ -160,9 +160,7 @@ struct insn_def ...@@ -160,9 +160,7 @@ struct insn_def
struct insn_ent struct insn_ent
{ {
struct insn_ent *next; /* Next in chain. */ struct insn_ent *next; /* Next in chain. */
int insn_code; /* Instruction number. */ struct insn_def *def; /* Instruction definition. */
int insn_index; /* Index of definition in file */
int lineno; /* Line number. */
}; };
/* Each value of an attribute (either constant or computed) is assigned a /* Each value of an attribute (either constant or computed) is assigned a
...@@ -1377,7 +1375,7 @@ get_attr_value (rtx value, struct attr_desc *attr, int insn_code) ...@@ -1377,7 +1375,7 @@ get_attr_value (rtx value, struct attr_desc *attr, int insn_code)
for (av = attr->first_value; av; av = av->next) for (av = attr->first_value; av; av = av->next)
if (rtx_equal_p (value, av->value) if (rtx_equal_p (value, av->value)
&& (num_alt == 0 || av->first_insn == NULL && (num_alt == 0 || av->first_insn == NULL
|| insn_alternatives[av->first_insn->insn_code])) || insn_alternatives[av->first_insn->def->insn_code]))
return av; return av;
av = oballoc (sizeof (struct attr_value)); av = oballoc (sizeof (struct attr_value));
...@@ -1524,8 +1522,7 @@ fill_attr (struct attr_desc *attr) ...@@ -1524,8 +1522,7 @@ fill_attr (struct attr_desc *attr)
av = get_attr_value (value, attr, id->insn_code); av = get_attr_value (value, attr, id->insn_code);
ie = oballoc (sizeof (struct insn_ent)); ie = oballoc (sizeof (struct insn_ent));
ie->insn_code = id->insn_code; ie->def = id;
ie->insn_index = id->insn_code;
insert_insn_ent (av, ie); insert_insn_ent (av, ie);
} }
} }
...@@ -1651,10 +1648,9 @@ make_length_attrs (void) ...@@ -1651,10 +1648,9 @@ make_length_attrs (void)
new_av = get_attr_value (substitute_address (av->value, new_av = get_attr_value (substitute_address (av->value,
no_address_fn[i], no_address_fn[i],
address_fn[i]), address_fn[i]),
new_attr, ie->insn_code); new_attr, ie->def->insn_code);
new_ie = oballoc (sizeof (struct insn_ent)); new_ie = oballoc (sizeof (struct insn_ent));
new_ie->insn_code = ie->insn_code; new_ie->def = ie->def;
new_ie->insn_index = ie->insn_index;
insert_insn_ent (new_av, new_ie); insert_insn_ent (new_av, new_ie);
} }
} }
...@@ -1854,7 +1850,7 @@ remove_insn_ent (struct attr_value *av, struct insn_ent *ie) ...@@ -1854,7 +1850,7 @@ remove_insn_ent (struct attr_value *av, struct insn_ent *ie)
} }
av->num_insns--; av->num_insns--;
if (ie->insn_code == -1) if (ie->def->insn_code == -1)
av->has_asm_insn = 0; av->has_asm_insn = 0;
num_insn_ents--; num_insn_ents--;
...@@ -1868,7 +1864,7 @@ insert_insn_ent (struct attr_value *av, struct insn_ent *ie) ...@@ -1868,7 +1864,7 @@ insert_insn_ent (struct attr_value *av, struct insn_ent *ie)
ie->next = av->first_insn; ie->next = av->first_insn;
av->first_insn = ie; av->first_insn = ie;
av->num_insns++; av->num_insns++;
if (ie->insn_code == -1) if (ie->def->insn_code == -1)
av->has_asm_insn = 1; av->has_asm_insn = 1;
num_insn_ents++; num_insn_ents++;
...@@ -2826,7 +2822,7 @@ simplify_test_exp (rtx exp, int insn_code, int insn_index) ...@@ -2826,7 +2822,7 @@ simplify_test_exp (rtx exp, int insn_code, int insn_index)
&& (attr = find_attr (&XSTR (exp, 0), 0)) != NULL) && (attr = find_attr (&XSTR (exp, 0), 0)) != NULL)
for (av = attr->first_value; av; av = av->next) for (av = attr->first_value; av; av = av->next)
for (ie = av->first_insn; ie; ie = ie->next) for (ie = av->first_insn; ie; ie = ie->next)
if (ie->insn_code == insn_code) if (ie->def->insn_code == insn_code)
{ {
rtx x; rtx x;
x = evaluate_eq_attr (exp, av->value, insn_code, insn_index); x = evaluate_eq_attr (exp, av->value, insn_code, insn_index);
...@@ -2896,8 +2892,8 @@ optimize_attrs (void) ...@@ -2896,8 +2892,8 @@ optimize_attrs (void)
iv->attr = attr; iv->attr = attr;
iv->av = av; iv->av = av;
iv->ie = ie; iv->ie = ie;
iv->next = insn_code_values[ie->insn_code]; iv->next = insn_code_values[ie->def->insn_code];
insn_code_values[ie->insn_code] = iv; insn_code_values[ie->def->insn_code] = iv;
iv++; iv++;
} }
...@@ -2927,8 +2923,8 @@ optimize_attrs (void) ...@@ -2927,8 +2923,8 @@ optimize_attrs (void)
newexp = av->value; newexp = av->value;
while (GET_CODE (newexp) == COND) while (GET_CODE (newexp) == COND)
{ {
rtx newexp2 = simplify_cond (newexp, ie->insn_code, rtx newexp2 = simplify_cond (newexp, ie->def->insn_code,
ie->insn_index); ie->def->insn_index);
if (newexp2 == newexp) if (newexp2 == newexp)
break; break;
newexp = newexp2; newexp = newexp2;
...@@ -2939,7 +2935,7 @@ optimize_attrs (void) ...@@ -2939,7 +2935,7 @@ optimize_attrs (void)
{ {
newexp = attr_copy_rtx (newexp); newexp = attr_copy_rtx (newexp);
remove_insn_ent (av, ie); remove_insn_ent (av, ie);
av = get_attr_value (newexp, attr, ie->insn_code); av = get_attr_value (newexp, attr, ie->def->insn_code);
iv->av = av; iv->av = av;
insert_insn_ent (av, ie); insert_insn_ent (av, ie);
} }
...@@ -3739,8 +3735,8 @@ write_attr_get (struct attr_desc *attr) ...@@ -3739,8 +3735,8 @@ write_attr_get (struct attr_desc *attr)
for (av = attr->first_value; av; av = av->next) for (av = attr->first_value; av; av = av->next)
if (av->num_insns != 0) if (av->num_insns != 0)
write_attr_set (attr, 2, av->value, "return", ";", write_attr_set (attr, 2, av->value, "return", ";",
true_rtx, av->first_insn->insn_code, true_rtx, av->first_insn->def->insn_code,
av->first_insn->insn_index); av->first_insn->def->insn_index);
printf ("}\n\n"); printf ("}\n\n");
return; return;
...@@ -3905,10 +3901,11 @@ write_attr_case (struct attr_desc *attr, struct attr_value *av, ...@@ -3905,10 +3901,11 @@ write_attr_case (struct attr_desc *attr, struct attr_value *av,
if (write_case_lines) if (write_case_lines)
{ {
for (ie = av->first_insn; ie; ie = ie->next) for (ie = av->first_insn; ie; ie = ie->next)
if (ie->insn_code != -1) if (ie->def->insn_code != -1)
{ {
write_indent (indent); write_indent (indent);
printf ("case %d:\n", ie->insn_code); printf ("case %d: /* %s */\n",
ie->def->insn_code, XSTR (ie->def->def, 0));
} }
} }
else else
...@@ -3933,8 +3930,8 @@ write_attr_case (struct attr_desc *attr, struct attr_value *av, ...@@ -3933,8 +3930,8 @@ write_attr_case (struct attr_desc *attr, struct attr_value *av,
} }
write_attr_set (attr, indent + 2, av->value, prefix, suffix, write_attr_set (attr, indent + 2, av->value, prefix, suffix,
known_true, av->first_insn->insn_code, known_true, av->first_insn->def->insn_code,
av->first_insn->insn_index); av->first_insn->def->insn_index);
if (strncmp (prefix, "return", 6)) if (strncmp (prefix, "return", 6))
{ {
...@@ -4384,8 +4381,9 @@ write_const_num_delay_slots (void) ...@@ -4384,8 +4381,9 @@ write_const_num_delay_slots (void)
if (length_used) if (length_used)
{ {
for (ie = av->first_insn; ie; ie = ie->next) for (ie = av->first_insn; ie; ie = ie->next)
if (ie->insn_code != -1) if (ie->def->insn_code != -1)
printf (" case %d:\n", ie->insn_code); printf (" case %d: /* %s */\n",
ie->def->insn_code, XSTR (ie->def->def, 0));
printf (" return 0;\n"); printf (" return 0;\n");
} }
} }
......
...@@ -160,6 +160,7 @@ struct data ...@@ -160,6 +160,7 @@ struct data
const char *template; const char *template;
int code_number; int code_number;
int index_number; int index_number;
const char *filename;
int lineno; int lineno;
int n_operands; /* Number of operands this insn recognizes */ int n_operands; /* Number of operands this insn recognizes */
int n_dups; /* Number times match_dup appears in pattern */ int n_dups; /* Number times match_dup appears in pattern */
...@@ -291,6 +292,7 @@ output_insn_data (void) ...@@ -291,6 +292,7 @@ output_insn_data (void)
for (d = idata; d; d = d->next) for (d = idata; d; d = d->next)
{ {
printf (" /* %s:%d */\n", d->filename, d->lineno);
printf (" {\n"); printf (" {\n");
if (d->name) if (d->name)
...@@ -823,6 +825,7 @@ gen_insn (rtx insn, int lineno) ...@@ -823,6 +825,7 @@ gen_insn (rtx insn, int lineno)
d->code_number = next_code_number; d->code_number = next_code_number;
d->index_number = next_index_number; d->index_number = next_index_number;
d->filename = read_rtx_filename;
d->lineno = lineno; d->lineno = lineno;
if (XSTR (insn, 0)[0]) if (XSTR (insn, 0)[0])
d->name = XSTR (insn, 0); d->name = XSTR (insn, 0);
...@@ -864,6 +867,7 @@ gen_peephole (rtx peep, int lineno) ...@@ -864,6 +867,7 @@ gen_peephole (rtx peep, int lineno)
d->code_number = next_code_number; d->code_number = next_code_number;
d->index_number = next_index_number; d->index_number = next_index_number;
d->filename = read_rtx_filename;
d->lineno = lineno; d->lineno = lineno;
d->name = 0; d->name = 0;
...@@ -902,6 +906,7 @@ gen_expand (rtx insn, int lineno) ...@@ -902,6 +906,7 @@ gen_expand (rtx insn, int lineno)
d->code_number = next_code_number; d->code_number = next_code_number;
d->index_number = next_index_number; d->index_number = next_index_number;
d->filename = read_rtx_filename;
d->lineno = lineno; d->lineno = lineno;
if (XSTR (insn, 0)[0]) if (XSTR (insn, 0)[0])
d->name = XSTR (insn, 0); d->name = XSTR (insn, 0);
...@@ -945,6 +950,7 @@ gen_split (rtx split, int lineno) ...@@ -945,6 +950,7 @@ gen_split (rtx split, int lineno)
d->code_number = next_code_number; d->code_number = next_code_number;
d->index_number = next_index_number; d->index_number = next_index_number;
d->filename = read_rtx_filename;
d->lineno = lineno; d->lineno = lineno;
d->name = 0; d->name = 0;
......
...@@ -2168,7 +2168,9 @@ write_action (struct decision *p, struct decision_test *test, ...@@ -2168,7 +2168,9 @@ write_action (struct decision *p, struct decision_test *test,
if (test->u.insn.num_clobbers_to_add != 0) if (test->u.insn.num_clobbers_to_add != 0)
printf ("%s*pnum_clobbers = %d;\n", printf ("%s*pnum_clobbers = %d;\n",
indent, test->u.insn.num_clobbers_to_add); indent, test->u.insn.num_clobbers_to_add);
printf ("%sreturn %d;\n", indent, test->u.insn.code_number); printf ("%sreturn %d; /* %s */\n", indent,
test->u.insn.code_number,
insn_name_ptr[test->u.insn.code_number]);
break; break;
case SPLIT: case SPLIT:
......
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