Commit dfa849f3 by Vladimir Makarov Committed by Vladimir Makarov

rtl.def: Add comment about new option in automata_option.

2004-01-13  Vladimir Makarov  <vmakarov@redhat.com>

        * rtl.def: Add comment about new option in automata_option.

	* genautomata.c (PROGRESS_OPTION): New macro.
	(progress_flag): New global variable.
	(gen_automata_option): Process `progress'.
	(transform_insn_regexps, check_unit_distributions_to_automata,
	make_automaton, NDFA_to_DFA, build_automaton, create_automata,
	expand_automata, write_automata): Print about the progress only if
	progress_flag.  Remove fflush.
	(initiate_automaton_gen): Process command line flag `-progress'.

	* doc/md.texi: Describe the new option.

From-SVN: r75812
parent 60af005f
2004-01-13 Vladimir Makarov <vmakarov@redhat.com>
* rtl.def: Add comment about new option in automata_option.
* genautomata.c (PROGRESS_OPTION): New macro.
(progress_flag): New global variable.
(gen_automata_option): Process `progress'.
(transform_insn_regexps, check_unit_distributions_to_automata,
make_automaton, NDFA_to_DFA, build_automaton, create_automata,
expand_automata, write_automata): Print about the progress only if
progress_flag. Remove fflush.
(initiate_automaton_gen): Process command line flag `-progress'.
* doc/md.texi: Describe the new option.
2004-01-13 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz> 2004-01-13 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
* cfg.c (dump_bb): Dump entry edges. * cfg.c (dump_bb): Dump entry edges.
......
...@@ -5999,6 +5999,14 @@ nondeterministic treatment means trying all alternatives, some of them ...@@ -5999,6 +5999,14 @@ nondeterministic treatment means trying all alternatives, some of them
may be rejected by reservations in the subsequent insns. You can not may be rejected by reservations in the subsequent insns. You can not
query functional unit reservations in nondeterministic automaton query functional unit reservations in nondeterministic automaton
states. states.
@item
@dfn{progress} means output of a progress bar showing how many states
were generated so far for automaton being processed. This is useful
during debugging a @acronym{DFA} description. If you see too many
generated states, you could interrupt the generator of the pipeline
hazard recognizer and try to figure out a reason for generation of the
huge automaton.
@end itemize @end itemize
As an example, consider a superscalar @acronym{RISC} machine which can As an example, consider a superscalar @acronym{RISC} machine which can
......
...@@ -658,6 +658,8 @@ static struct obstack irp; ...@@ -658,6 +658,8 @@ static struct obstack irp;
#define NDFA_OPTION "-ndfa" #define NDFA_OPTION "-ndfa"
#define PROGRESS_OPTION "-progress"
/* The following flags are set up by function `initiate_automaton_gen'. */ /* The following flags are set up by function `initiate_automaton_gen'. */
/* Make automata with nondeterministic reservation by insns (`-ndfa'). */ /* Make automata with nondeterministic reservation by insns (`-ndfa'). */
...@@ -680,6 +682,10 @@ static int time_flag; ...@@ -680,6 +682,10 @@ static int time_flag;
result automaton and statistics information (`-v'). */ result automaton and statistics information (`-v'). */
static int v_flag; static int v_flag;
/* Flag of output of a progress bar showing how many states were
generated so far for automaton being processed (`-progress'). */
static int progress_flag;
/* Flag of generating warning instead of error for non-critical errors /* Flag of generating warning instead of error for non-critical errors
(`-w'). */ (`-w'). */
static int w_flag; static int w_flag;
...@@ -1932,6 +1938,8 @@ gen_automata_option (rtx def) ...@@ -1932,6 +1938,8 @@ gen_automata_option (rtx def)
w_flag = 1; w_flag = 1;
else if (strcmp (XSTR (def, 0), NDFA_OPTION + 1) == 0) else if (strcmp (XSTR (def, 0), NDFA_OPTION + 1) == 0)
ndfa_flag = 1; ndfa_flag = 1;
else if (strcmp (XSTR (def, 0), PROGRESS_OPTION + 1) == 0)
progress_flag = 1;
else else
fatal ("invalid option `%s' in automata_option", XSTR (def, 0)); fatal ("invalid option `%s' in automata_option", XSTR (def, 0));
} }
...@@ -5265,8 +5273,8 @@ transform_insn_regexps (void) ...@@ -5265,8 +5273,8 @@ transform_insn_regexps (void)
transform_time = create_ticker (); transform_time = create_ticker ();
add_advance_cycle_insn_decl (); add_advance_cycle_insn_decl ();
fprintf (stderr, "Reservation transformation..."); if (progress_flag)
fflush (stderr); fprintf (stderr, "Reservation transformation...");
for (i = 0; i < description->decls_num; i++) for (i = 0; i < description->decls_num; i++)
{ {
decl = description->decls [i]; decl = description->decls [i];
...@@ -5275,9 +5283,9 @@ transform_insn_regexps (void) ...@@ -5275,9 +5283,9 @@ transform_insn_regexps (void)
= transform_regexp (copy_insn_regexp = transform_regexp (copy_insn_regexp
(DECL_INSN_RESERV (decl)->regexp)); (DECL_INSN_RESERV (decl)->regexp));
} }
fprintf (stderr, "done\n"); if (progress_flag)
fprintf (stderr, "done\n");
ticker_off (&transform_time); ticker_off (&transform_time);
fflush (stderr);
} }
...@@ -5443,7 +5451,8 @@ check_unit_distributions_to_automata (void) ...@@ -5443,7 +5451,8 @@ check_unit_distributions_to_automata (void)
decl_t decl; decl_t decl;
int i; int i;
fprintf (stderr, "Check unit distributions to automata..."); if (progress_flag)
fprintf (stderr, "Check unit distributions to automata...");
annotation_message_reported_p = FALSE; annotation_message_reported_p = FALSE;
for (i = 0; i < description->decls_num; i++) for (i = 0; i < description->decls_num; i++)
{ {
...@@ -5453,7 +5462,8 @@ check_unit_distributions_to_automata (void) ...@@ -5453,7 +5462,8 @@ check_unit_distributions_to_automata (void)
(DECL_INSN_RESERV (decl)->name, (DECL_INSN_RESERV (decl)->name,
DECL_INSN_RESERV (decl)->transformed_regexp); DECL_INSN_RESERV (decl)->transformed_regexp);
} }
fprintf (stderr, "done\n"); if (progress_flag)
fprintf (stderr, "done\n");
} }
...@@ -5732,7 +5742,7 @@ make_automaton (automaton_t automaton) ...@@ -5732,7 +5742,7 @@ make_automaton (automaton_t automaton)
= 1; = 1;
VLA_PTR_ADD (state_stack, state2); VLA_PTR_ADD (state_stack, state2);
states_n++; states_n++;
if (states_n % 100 == 0) if (progress_flag && states_n % 100 == 0)
fprintf (stderr, "."); fprintf (stderr, ".");
} }
added_arc = add_arc (state, state2, ainsn, 1); added_arc = add_arc (state, state2, ainsn, 1);
...@@ -5763,7 +5773,7 @@ make_automaton (automaton_t automaton) ...@@ -5763,7 +5773,7 @@ make_automaton (automaton_t automaton)
state2->it_was_placed_in_stack_for_NDFA_forming = 1; state2->it_was_placed_in_stack_for_NDFA_forming = 1;
VLA_PTR_ADD (state_stack, state2); VLA_PTR_ADD (state_stack, state2);
states_n++; states_n++;
if (states_n % 100 == 0) if (progress_flag && states_n % 100 == 0)
fprintf (stderr, "."); fprintf (stderr, ".");
} }
if (advance_cycle_ainsn == NULL) if (advance_cycle_ainsn == NULL)
...@@ -5934,7 +5944,7 @@ NDFA_to_DFA (automaton_t automaton) ...@@ -5934,7 +5944,7 @@ NDFA_to_DFA (automaton_t automaton)
&state_stack)) &state_stack))
{ {
states_n++; states_n++;
if (states_n % 100 == 0) if (progress_flag && states_n % 100 == 0)
fprintf (stderr, "."); fprintf (stderr, ".");
} }
} }
...@@ -6395,25 +6405,35 @@ build_automaton (automaton_t automaton) ...@@ -6395,25 +6405,35 @@ build_automaton (automaton_t automaton)
int arcs_num; int arcs_num;
ticker_on (&NDFA_time); ticker_on (&NDFA_time);
if (automaton->corresponding_automaton_decl == NULL) if (progress_flag)
fprintf (stderr, "Create anonymous automaton (1 dot is 100 new states):"); {
else if (automaton->corresponding_automaton_decl == NULL)
fprintf (stderr, "Create automaton `%s' (1 dot is 100 new states):", fprintf (stderr, "Create anonymous automaton");
automaton->corresponding_automaton_decl->name); else
fprintf (stderr, "Create automaton `%s'",
automaton->corresponding_automaton_decl->name);
fprintf (stderr, " (1 dot is 100 new states):");
}
make_automaton (automaton); make_automaton (automaton);
fprintf (stderr, " done\n"); if (progress_flag)
fprintf (stderr, " done\n");
ticker_off (&NDFA_time); ticker_off (&NDFA_time);
count_states_and_arcs (automaton, &states_num, &arcs_num); count_states_and_arcs (automaton, &states_num, &arcs_num);
automaton->NDFA_states_num = states_num; automaton->NDFA_states_num = states_num;
automaton->NDFA_arcs_num = arcs_num; automaton->NDFA_arcs_num = arcs_num;
ticker_on (&NDFA_to_DFA_time); ticker_on (&NDFA_to_DFA_time);
if (automaton->corresponding_automaton_decl == NULL) if (progress_flag)
fprintf (stderr, "Make anonymous DFA (1 dot is 100 new states):"); {
else if (automaton->corresponding_automaton_decl == NULL)
fprintf (stderr, "Make DFA `%s' (1 dot is 100 new states):", fprintf (stderr, "Make anonymous DFA");
automaton->corresponding_automaton_decl->name); else
fprintf (stderr, "Make DFA `%s'",
automaton->corresponding_automaton_decl->name);
fprintf (stderr, " (1 dot is 100 new states):");
}
NDFA_to_DFA (automaton); NDFA_to_DFA (automaton);
fprintf (stderr, " done\n"); if (progress_flag)
fprintf (stderr, " done\n");
ticker_off (&NDFA_to_DFA_time); ticker_off (&NDFA_to_DFA_time);
count_states_and_arcs (automaton, &states_num, &arcs_num); count_states_and_arcs (automaton, &states_num, &arcs_num);
automaton->DFA_states_num = states_num; automaton->DFA_states_num = states_num;
...@@ -6421,13 +6441,17 @@ build_automaton (automaton_t automaton) ...@@ -6421,13 +6441,17 @@ build_automaton (automaton_t automaton)
if (!no_minimization_flag) if (!no_minimization_flag)
{ {
ticker_on (&minimize_time); ticker_on (&minimize_time);
if (automaton->corresponding_automaton_decl == NULL) if (progress_flag)
fprintf (stderr, "Minimize anonymous DFA..."); {
else if (automaton->corresponding_automaton_decl == NULL)
fprintf (stderr, "Minimize DFA `%s'...", fprintf (stderr, "Minimize anonymous DFA...");
automaton->corresponding_automaton_decl->name); else
fprintf (stderr, "Minimize DFA `%s'...",
automaton->corresponding_automaton_decl->name);
}
minimize_DFA (automaton); minimize_DFA (automaton);
fprintf (stderr, "done\n"); if (progress_flag)
fprintf (stderr, "done\n");
ticker_off (&minimize_time); ticker_off (&minimize_time);
count_states_and_arcs (automaton, &states_num, &arcs_num); count_states_and_arcs (automaton, &states_num, &arcs_num);
automaton->minimal_DFA_states_num = states_num; automaton->minimal_DFA_states_num = states_num;
...@@ -6851,14 +6875,18 @@ create_automata (void) ...@@ -6851,14 +6875,18 @@ create_automata (void)
curr_automaton != NULL; curr_automaton != NULL;
curr_automaton = curr_automaton->next_automaton) curr_automaton = curr_automaton->next_automaton)
{ {
if (curr_automaton->corresponding_automaton_decl == NULL) if (progress_flag)
fprintf (stderr, "Prepare anonymous automaton creation ... "); {
else if (curr_automaton->corresponding_automaton_decl == NULL)
fprintf (stderr, "Prepare automaton `%s' creation...", fprintf (stderr, "Prepare anonymous automaton creation ... ");
curr_automaton->corresponding_automaton_decl->name); else
fprintf (stderr, "Prepare automaton `%s' creation...",
curr_automaton->corresponding_automaton_decl->name);
}
create_alt_states (curr_automaton); create_alt_states (curr_automaton);
form_ainsn_with_same_reservs (curr_automaton); form_ainsn_with_same_reservs (curr_automaton);
fprintf (stderr, "done\n"); if (progress_flag)
fprintf (stderr, "done\n");
build_automaton (curr_automaton); build_automaton (curr_automaton);
enumerate_states (curr_automaton); enumerate_states (curr_automaton);
ticker_on (&equiv_time); ticker_on (&equiv_time);
...@@ -9615,6 +9643,7 @@ initiate_automaton_gen (int argc, char **argv) ...@@ -9615,6 +9643,7 @@ initiate_automaton_gen (int argc, char **argv)
time_flag = 0; time_flag = 0;
v_flag = 0; v_flag = 0;
w_flag = 0; w_flag = 0;
progress_flag = 0;
for (i = 2; i < argc; i++) for (i = 2; i < argc; i++)
if (strcmp (argv [i], NO_MINIMIZATION_OPTION) == 0) if (strcmp (argv [i], NO_MINIMIZATION_OPTION) == 0)
no_minimization_flag = 1; no_minimization_flag = 1;
...@@ -9626,6 +9655,8 @@ initiate_automaton_gen (int argc, char **argv) ...@@ -9626,6 +9655,8 @@ initiate_automaton_gen (int argc, char **argv)
w_flag = 1; w_flag = 1;
else if (strcmp (argv [i], NDFA_OPTION) == 0) else if (strcmp (argv [i], NDFA_OPTION) == 0)
ndfa_flag = 1; ndfa_flag = 1;
else if (strcmp (argv [i], PROGRESS_OPTION) == 0)
progress_flag = 1;
else if (strcmp (argv [i], "-split") == 0) else if (strcmp (argv [i], "-split") == 0)
{ {
if (i + 1 >= argc) if (i + 1 >= argc)
...@@ -9796,10 +9827,11 @@ expand_automata (void) ...@@ -9796,10 +9827,11 @@ expand_automata (void)
} }
all_time = create_ticker (); all_time = create_ticker ();
check_time = create_ticker (); check_time = create_ticker ();
fprintf (stderr, "Check description..."); if (progress_flag)
fflush (stderr); fprintf (stderr, "Check description...");
check_all_description (); check_all_description ();
fprintf (stderr, "done\n"); if (progress_flag)
fprintf (stderr, "done\n");
ticker_off (&check_time); ticker_off (&check_time);
generation_time = create_ticker (); generation_time = create_ticker ();
if (!have_error) if (!have_error)
...@@ -9815,18 +9847,19 @@ expand_automata (void) ...@@ -9815,18 +9847,19 @@ expand_automata (void)
if (!have_error) if (!have_error)
{ {
form_important_insn_automata_lists (); form_important_insn_automata_lists ();
fprintf (stderr, "Generation of attributes..."); if (progress_flag)
fflush (stderr); fprintf (stderr, "Generation of attributes...");
make_internal_dfa_insn_code_attr (); make_internal_dfa_insn_code_attr ();
make_insn_alts_attr (); make_insn_alts_attr ();
make_default_insn_latency_attr (); make_default_insn_latency_attr ();
make_bypass_attr (); make_bypass_attr ();
fprintf (stderr, "done\n"); if (progress_flag)
fprintf (stderr, "done\n");
} }
ticker_off (&generation_time); ticker_off (&generation_time);
ticker_off (&all_time); ticker_off (&all_time);
fprintf (stderr, "All other genattrtab stuff..."); if (progress_flag)
fflush (stderr); fprintf (stderr, "All other genattrtab stuff...");
} }
/* The following is top level function to output PHR and to finish /* The following is top level function to output PHR and to finish
...@@ -9834,18 +9867,21 @@ expand_automata (void) ...@@ -9834,18 +9867,21 @@ expand_automata (void)
void void
write_automata (void) write_automata (void)
{ {
fprintf (stderr, "done\n"); if (progress_flag)
fprintf (stderr, "done\n");
if (have_error) if (have_error)
fatal ("Errors in DFA description"); fatal ("Errors in DFA description");
ticker_on (&all_time); ticker_on (&all_time);
output_time = create_ticker (); output_time = create_ticker ();
fprintf (stderr, "Forming and outputting automata tables..."); if (progress_flag)
fflush (stderr); fprintf (stderr, "Forming and outputting automata tables...");
output_dfa_max_issue_rate (); output_dfa_max_issue_rate ();
output_tables (); output_tables ();
fprintf (stderr, "done\n"); if (progress_flag)
fprintf (stderr, "Output functions to work with automata..."); {
fflush (stderr); fprintf (stderr, "done\n");
fprintf (stderr, "Output functions to work with automata...");
}
output_chip_definitions (); output_chip_definitions ();
output_max_insn_queue_index_def (); output_max_insn_queue_index_def ();
output_internal_min_issue_delay_func (); output_internal_min_issue_delay_func ();
...@@ -9880,7 +9916,8 @@ write_automata (void) ...@@ -9880,7 +9916,8 @@ write_automata (void)
output_dfa_clean_insn_cache_func (); output_dfa_clean_insn_cache_func ();
output_dfa_start_func (); output_dfa_start_func ();
output_dfa_finish_func (); output_dfa_finish_func ();
fprintf (stderr, "done\n"); if (progress_flag)
fprintf (stderr, "done\n");
if (v_flag) if (v_flag)
{ {
output_description_file = fopen (output_description_file_name, "w"); output_description_file = fopen (output_description_file_name, "w");
...@@ -9889,11 +9926,12 @@ write_automata (void) ...@@ -9889,11 +9926,12 @@ write_automata (void)
perror (output_description_file_name); perror (output_description_file_name);
exit (FATAL_EXIT_CODE); exit (FATAL_EXIT_CODE);
} }
fprintf (stderr, "Output automata description..."); if (progress_flag)
fflush (stderr); fprintf (stderr, "Output automata description...");
output_description (); output_description ();
output_automaton_descriptions (); output_automaton_descriptions ();
fprintf (stderr, "done\n"); if (progress_flag)
fprintf (stderr, "done\n");
output_statistics (output_description_file); output_statistics (output_description_file);
} }
output_statistics (stderr); output_statistics (stderr);
......
...@@ -480,7 +480,10 @@ DEF_RTL_EXPR(DEFINE_AUTOMATON, "define_automaton", "s", 'x') ...@@ -480,7 +480,10 @@ DEF_RTL_EXPR(DEFINE_AUTOMATON, "define_automaton", "s", 'x')
o "w" which means generation of warning instead of error for o "w" which means generation of warning instead of error for
non-critical errors. non-critical errors.
o "ndfa" which makes nondeterministic finite state automata. */ o "ndfa" which makes nondeterministic finite state automata.
o "progress" which means output of a progress bar showing how many
states were generated so far for automaton being processed. */
DEF_RTL_EXPR(AUTOMATA_OPTION, "automata_option", "s", 'x') DEF_RTL_EXPR(AUTOMATA_OPTION, "automata_option", "s", 'x')
/* (define_reservation string string) names reservation (the first /* (define_reservation string string) names reservation (the first
......
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