aboutsummaryrefslogtreecommitdiff
path: root/gcc/genautomata.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/genautomata.c')
-rw-r--r--gcc/genautomata.c43
1 files changed, 33 insertions, 10 deletions
diff --git a/gcc/genautomata.c b/gcc/genautomata.c
index 8cf81b0..da18e5d 100644
--- a/gcc/genautomata.c
+++ b/gcc/genautomata.c
@@ -8134,8 +8134,9 @@ output_internal_insn_code_evaluation (const char *insn_name,
insn_code_name, COLLAPSE_NDFA_VALUE_NAME);
}
fprintf (output_file, "\n else\n {\n");
- fprintf (output_file, " %s = %s (%s);\n", insn_code_name,
- DFA_INSN_CODE_FUNC_NAME, insn_name);
+ fprintf (output_file,
+ " %s = %s (as_a <rtx_insn *> (%s));\n",
+ insn_code_name, DFA_INSN_CODE_FUNC_NAME, insn_name);
fprintf (output_file, " if (%s > %s)\n return %d;\n }\n",
insn_code_name, ADVANCE_CYCLE_VALUE_NAME, code);
}
@@ -8165,7 +8166,7 @@ dfa_insn_code_enlarge (int uid)\n\
DFA_INSN_CODES_LENGTH_VARIABLE_NAME,
DFA_INSN_CODES_VARIABLE_NAME);
fprintf (output_file, "\
-static inline int\n%s (rtx %s)\n\
+static inline int\n%s (rtx_insn *%s)\n\
{\n\
int uid = INSN_UID (%s);\n\
int %s;\n\n",
@@ -8208,7 +8209,7 @@ output_trans_func (void)
static void
output_min_issue_delay_func (void)
{
- fprintf (output_file, "int\n%s (%s %s, rtx %s)\n",
+ fprintf (output_file, "int\n%s (%s %s, rtx_insn *%s)\n",
MIN_ISSUE_DELAY_FUNC_NAME, STATE_TYPE_NAME, STATE_NAME,
INSN_PARAMETER_NAME);
fprintf (output_file, "{\n int %s;\n", INTERNAL_INSN_CODE_NAME);
@@ -8360,10 +8361,10 @@ output_internal_insn_latency_func (void)
decl_t decl;
struct bypass_decl *bypass;
- fprintf (output_file, "static int\n%s (int %s ATTRIBUTE_UNUSED,\n\tint %s ATTRIBUTE_UNUSED,\n\trtx_insn *%s ATTRIBUTE_UNUSED,\n\trtx_insn *%s ATTRIBUTE_UNUSED)\n",
+ fprintf (output_file, "static int\n%s (int %s ATTRIBUTE_UNUSED,\n\tint %s ATTRIBUTE_UNUSED,\n\trtx %s ATTRIBUTE_UNUSED,\n\trtx %s ATTRIBUTE_UNUSED)\n",
INTERNAL_INSN_LATENCY_FUNC_NAME, INTERNAL_INSN_CODE_NAME,
- INTERNAL_INSN2_CODE_NAME, INSN_PARAMETER_NAME,
- INSN2_PARAMETER_NAME);
+ INTERNAL_INSN2_CODE_NAME, "insn_or_const0",
+ "insn2_or_const0");
fprintf (output_file, "{\n");
if (DECL_INSN_RESERV (advance_cycle_insn_decl)->insn_num == 0)
@@ -8376,6 +8377,28 @@ output_internal_insn_latency_func (void)
INTERNAL_INSN_CODE_NAME, ADVANCE_CYCLE_VALUE_NAME,
INTERNAL_INSN2_CODE_NAME, ADVANCE_CYCLE_VALUE_NAME);
+ /* We've now rejected the case that
+ INTERNAL_INSN_CODE_NAME >= ADVANCE_CYCLE_VALUE_NAME
+ i.e. that
+ insn_code >= DFA__ADVANCE_CYCLE,
+ and similarly for insn2_code. */
+ fprintf (output_file,
+ " /* Within output_internal_insn_code_evaluation, the generated\n"
+ " code sets \"code\" to NDFA__COLLAPSE for const0_rtx, and\n"
+ " NDFA__COLLAPSE > DFA__ADVANCE_CYCLE. Hence we can't be\n"
+ " dealing with const0_rtx instances at this point. */\n");
+ if (collapse_flag)
+ fprintf (output_file,
+ " gcc_assert (NDFA__COLLAPSE > DFA__ADVANCE_CYCLE);\n");
+ fprintf (output_file,
+ (" gcc_assert (insn_or_const0 != const0_rtx);\n"
+ " rtx_insn *%s ATTRIBUTE_UNUSED = safe_as_a <rtx_insn *> (insn_or_const0);\n"),
+ INSN_PARAMETER_NAME);
+ fprintf (output_file,
+ (" gcc_assert (insn2_or_const0 != const0_rtx);\n"
+ " rtx_insn *%s ATTRIBUTE_UNUSED = safe_as_a <rtx_insn *> (insn2_or_const0);\n"),
+ INSN2_PARAMETER_NAME);
+
fprintf (output_file, " switch (%s)\n {\n", INTERNAL_INSN_CODE_NAME);
for (i = 0; i < description->decls_num; i++)
if (description->decls[i]->mode == dm_insn_reserv
@@ -8477,7 +8500,7 @@ output_internal_maximal_insn_latency_func (void)
static void
output_insn_latency_func (void)
{
- fprintf (output_file, "int\n%s (rtx_insn *%s, rtx_insn *%s)\n",
+ fprintf (output_file, "int\n%s (rtx %s, rtx %s)\n",
INSN_LATENCY_FUNC_NAME, INSN_PARAMETER_NAME, INSN2_PARAMETER_NAME);
fprintf (output_file, "{\n int %s, %s;\n",
INTERNAL_INSN_CODE_NAME, INTERNAL_INSN2_CODE_NAME);
@@ -8514,7 +8537,7 @@ output_print_reservation_func (void)
int i, j;
fprintf (output_file,
- "void\n%s (FILE *%s, rtx %s ATTRIBUTE_UNUSED)\n{\n",
+ "void\n%s (FILE *%s, rtx_insn *%s ATTRIBUTE_UNUSED)\n{\n",
PRINT_RESERVATION_FUNC_NAME, FILE_PARAMETER_NAME,
INSN_PARAMETER_NAME);
@@ -8680,7 +8703,7 @@ static void
output_insn_has_dfa_reservation_p (void)
{
fprintf (output_file,
- "bool\n%s (rtx %s ATTRIBUTE_UNUSED)\n{\n",
+ "bool\n%s (rtx_insn *%s ATTRIBUTE_UNUSED)\n{\n",
INSN_HAS_DFA_RESERVATION_P_FUNC_NAME,
INSN_PARAMETER_NAME);