]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rtl.def: Add comment about new option in automata_option.
authorVladimir Makarov <vmakarov@redhat.com>
Tue, 13 Jan 2004 19:52:24 +0000 (19:52 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Tue, 13 Jan 2004 19:52:24 +0000 (19:52 +0000)
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

gcc/ChangeLog
gcc/doc/md.texi
gcc/genautomata.c
gcc/rtl.def

index 81f36176fb71d59fb36c8c31f2ac264c6f6f893c..408798a07144b37159e8eeca59773d465f097c70 100644 (file)
@@ -1,3 +1,18 @@
+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>
 
        * cfg.c (dump_bb): Dump entry edges.
index 8c13fc1c2ed1748b97c584a089e16a6b898eb05a..f4f799dd86af6ad63697ee31557ace2636e15ce0 100644 (file)
@@ -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
 query functional unit reservations in nondeterministic automaton
 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
 
 As an example, consider a superscalar @acronym{RISC} machine which can
index 12da0c7058d0822fb13570c83b3910f0c20bcd8a..54d677e3290779fdf2e3bd6a0791664f1746e53a 100644 (file)
@@ -658,6 +658,8 @@ static struct obstack irp;
 
 #define NDFA_OPTION "-ndfa"
 
+#define PROGRESS_OPTION "-progress"
+
 /* The following flags are set up by function `initiate_automaton_gen'.  */
 
 /* Make automata with nondeterministic reservation by insns (`-ndfa').  */
@@ -680,6 +682,10 @@ static int time_flag;
    result automaton and statistics information (`-v').  */
 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
    (`-w').  */
 static int w_flag;
@@ -1932,6 +1938,8 @@ gen_automata_option (rtx def)
     w_flag = 1;
   else if (strcmp (XSTR (def, 0), NDFA_OPTION + 1) == 0)
     ndfa_flag = 1;
+  else if (strcmp (XSTR (def, 0), PROGRESS_OPTION + 1) == 0)
+    progress_flag = 1;
   else
     fatal ("invalid option `%s' in automata_option", XSTR (def, 0));
 }
@@ -5265,8 +5273,8 @@ transform_insn_regexps (void)
 
   transform_time = create_ticker ();
   add_advance_cycle_insn_decl ();
-  fprintf (stderr, "Reservation transformation...");
-  fflush (stderr);
+  if (progress_flag)
+    fprintf (stderr, "Reservation transformation...");
   for (i = 0; i < description->decls_num; i++)
     {
       decl = description->decls [i];
@@ -5275,9 +5283,9 @@ transform_insn_regexps (void)
          = transform_regexp (copy_insn_regexp
                              (DECL_INSN_RESERV (decl)->regexp));
     }
-  fprintf (stderr, "done\n");
+  if (progress_flag)
+    fprintf (stderr, "done\n");
   ticker_off (&transform_time);
-  fflush (stderr);
 }
 
 \f
@@ -5443,7 +5451,8 @@ check_unit_distributions_to_automata (void)
   decl_t decl;
   int i;
 
-  fprintf (stderr, "Check unit distributions to automata...");
+  if (progress_flag)
+    fprintf (stderr, "Check unit distributions to automata...");
   annotation_message_reported_p = FALSE;
   for (i = 0; i < description->decls_num; i++)
     {
@@ -5453,7 +5462,8 @@ check_unit_distributions_to_automata (void)
          (DECL_INSN_RESERV (decl)->name,
           DECL_INSN_RESERV (decl)->transformed_regexp);
     }
-  fprintf (stderr, "done\n");
+  if (progress_flag)
+    fprintf (stderr, "done\n");
 }
 
 \f
@@ -5732,7 +5742,7 @@ make_automaton (automaton_t automaton)
                              = 1;
                             VLA_PTR_ADD (state_stack, state2);
                            states_n++;
-                           if (states_n % 100 == 0)
+                           if (progress_flag && states_n % 100 == 0)
                              fprintf (stderr, ".");
                           }
                        added_arc = add_arc (state, state2, ainsn, 1);
@@ -5763,7 +5773,7 @@ make_automaton (automaton_t automaton)
           state2->it_was_placed_in_stack_for_NDFA_forming = 1;
           VLA_PTR_ADD (state_stack, state2);
          states_n++;
-         if (states_n % 100 == 0)
+         if (progress_flag && states_n % 100 == 0)
            fprintf (stderr, ".");
         }
       if (advance_cycle_ainsn == NULL)
@@ -5934,7 +5944,7 @@ NDFA_to_DFA (automaton_t automaton)
                  &state_stack))
            {
              states_n++;
-             if (states_n % 100 == 0)
+             if (progress_flag && states_n % 100 == 0)
                fprintf (stderr, ".");
            }
        }
@@ -6395,25 +6405,35 @@ build_automaton (automaton_t automaton)
   int arcs_num;
 
   ticker_on (&NDFA_time);
-  if (automaton->corresponding_automaton_decl == NULL)
-    fprintf (stderr, "Create anonymous automaton (1 dot is 100 new states):");
-  else
-    fprintf (stderr, "Create automaton `%s' (1 dot is 100 new states):",
-            automaton->corresponding_automaton_decl->name);
+  if (progress_flag)
+    {
+      if (automaton->corresponding_automaton_decl == NULL)
+       fprintf (stderr, "Create anonymous automaton");
+      else
+       fprintf (stderr, "Create automaton `%s'",
+                automaton->corresponding_automaton_decl->name);
+      fprintf (stderr, " (1 dot is 100 new states):");
+    }
   make_automaton (automaton);
-  fprintf (stderr, " done\n");
+  if (progress_flag)
+    fprintf (stderr, " done\n");
   ticker_off (&NDFA_time);
   count_states_and_arcs (automaton, &states_num, &arcs_num);
   automaton->NDFA_states_num = states_num;
   automaton->NDFA_arcs_num = arcs_num;
   ticker_on (&NDFA_to_DFA_time);
-  if (automaton->corresponding_automaton_decl == NULL)
-    fprintf (stderr, "Make anonymous DFA (1 dot is 100 new states):");
-  else
-    fprintf (stderr, "Make DFA `%s' (1 dot is 100 new states):",
-            automaton->corresponding_automaton_decl->name);
+  if (progress_flag)
+    {
+      if (automaton->corresponding_automaton_decl == NULL)
+       fprintf (stderr, "Make anonymous DFA");
+      else
+       fprintf (stderr, "Make DFA `%s'",
+                automaton->corresponding_automaton_decl->name);
+      fprintf (stderr, " (1 dot is 100 new states):");
+    }
   NDFA_to_DFA (automaton);
-  fprintf (stderr, " done\n");
+  if (progress_flag)
+    fprintf (stderr, " done\n");
   ticker_off (&NDFA_to_DFA_time);
   count_states_and_arcs (automaton, &states_num, &arcs_num);
   automaton->DFA_states_num = states_num;
@@ -6421,13 +6441,17 @@ build_automaton (automaton_t automaton)
   if (!no_minimization_flag)
     {
       ticker_on (&minimize_time);
-      if (automaton->corresponding_automaton_decl == NULL)
-       fprintf (stderr, "Minimize anonymous DFA...");
-      else
-       fprintf (stderr, "Minimize DFA `%s'...",
-                automaton->corresponding_automaton_decl->name);
+      if (progress_flag)
+       {
+         if (automaton->corresponding_automaton_decl == NULL)
+           fprintf (stderr, "Minimize anonymous DFA...");
+         else
+           fprintf (stderr, "Minimize DFA `%s'...",
+                    automaton->corresponding_automaton_decl->name);
+       }
       minimize_DFA (automaton);
-      fprintf (stderr, "done\n");
+      if (progress_flag)
+       fprintf (stderr, "done\n");
       ticker_off (&minimize_time);
       count_states_and_arcs (automaton, &states_num, &arcs_num);
       automaton->minimal_DFA_states_num = states_num;
@@ -6851,14 +6875,18 @@ create_automata (void)
        curr_automaton != NULL;
        curr_automaton = curr_automaton->next_automaton)
     {
-      if (curr_automaton->corresponding_automaton_decl == NULL)
-       fprintf (stderr, "Prepare anonymous automaton creation ... ");
-      else
-       fprintf (stderr, "Prepare automaton `%s' creation...",
-                curr_automaton->corresponding_automaton_decl->name);
+      if (progress_flag)
+       {
+         if (curr_automaton->corresponding_automaton_decl == NULL)
+           fprintf (stderr, "Prepare anonymous automaton creation ... ");
+         else
+           fprintf (stderr, "Prepare automaton `%s' creation...",
+                    curr_automaton->corresponding_automaton_decl->name);
+       }
       create_alt_states (curr_automaton);
       form_ainsn_with_same_reservs (curr_automaton);
-      fprintf (stderr, "done\n");
+      if (progress_flag)
+       fprintf (stderr, "done\n");
       build_automaton (curr_automaton);
       enumerate_states (curr_automaton);
       ticker_on (&equiv_time);
@@ -9615,6 +9643,7 @@ initiate_automaton_gen (int argc, char **argv)
   time_flag = 0;
   v_flag = 0;
   w_flag = 0;
+  progress_flag = 0;
   for (i = 2; i < argc; i++)
     if (strcmp (argv [i], NO_MINIMIZATION_OPTION) == 0)
       no_minimization_flag = 1;
@@ -9626,6 +9655,8 @@ initiate_automaton_gen (int argc, char **argv)
       w_flag = 1;
     else if (strcmp (argv [i], NDFA_OPTION) == 0)
       ndfa_flag = 1;
+    else if (strcmp (argv [i], PROGRESS_OPTION) == 0)
+      progress_flag = 1;
     else if (strcmp (argv [i], "-split") == 0)
       {
        if (i + 1 >= argc)
@@ -9796,10 +9827,11 @@ expand_automata (void)
     }
   all_time = create_ticker ();
   check_time = create_ticker ();
-  fprintf (stderr, "Check description...");
-  fflush (stderr);
+  if (progress_flag)
+    fprintf (stderr, "Check description...");
   check_all_description ();
-  fprintf (stderr, "done\n");
+  if (progress_flag)
+    fprintf (stderr, "done\n");
   ticker_off (&check_time);
   generation_time = create_ticker ();
   if (!have_error)
@@ -9815,18 +9847,19 @@ expand_automata (void)
   if (!have_error)
     {
       form_important_insn_automata_lists ();
-      fprintf (stderr, "Generation of attributes...");
-      fflush (stderr);
+      if (progress_flag)
+       fprintf (stderr, "Generation of attributes...");
       make_internal_dfa_insn_code_attr ();
       make_insn_alts_attr ();
       make_default_insn_latency_attr ();
       make_bypass_attr ();
-      fprintf (stderr, "done\n");
+      if (progress_flag)
+       fprintf (stderr, "done\n");
     }
   ticker_off (&generation_time);
   ticker_off (&all_time);
-  fprintf (stderr, "All other genattrtab stuff...");
-  fflush (stderr);
+  if (progress_flag)
+    fprintf (stderr, "All other genattrtab stuff...");
 }
 
 /* The following is top level function to output PHR and to finish
@@ -9834,18 +9867,21 @@ expand_automata (void)
 void
 write_automata (void)
 {
-  fprintf (stderr, "done\n");
+  if (progress_flag)
+    fprintf (stderr, "done\n");
   if (have_error)
     fatal ("Errors in DFA description");
   ticker_on (&all_time);
   output_time = create_ticker ();
-  fprintf (stderr, "Forming and outputting automata tables...");
-  fflush (stderr);
+  if (progress_flag)
+    fprintf (stderr, "Forming and outputting automata tables...");
   output_dfa_max_issue_rate ();
   output_tables ();
-  fprintf (stderr, "done\n");
-  fprintf (stderr, "Output functions to work with automata...");
-  fflush (stderr);
+  if (progress_flag)
+    {
+      fprintf (stderr, "done\n");
+      fprintf (stderr, "Output functions to work with automata...");
+    }
   output_chip_definitions ();
   output_max_insn_queue_index_def ();
   output_internal_min_issue_delay_func ();
@@ -9880,7 +9916,8 @@ write_automata (void)
   output_dfa_clean_insn_cache_func ();
   output_dfa_start_func ();
   output_dfa_finish_func ();
-  fprintf (stderr, "done\n");
+  if (progress_flag)
+    fprintf (stderr, "done\n");
   if (v_flag)
     {
       output_description_file = fopen (output_description_file_name, "w");
@@ -9889,11 +9926,12 @@ write_automata (void)
          perror (output_description_file_name);
          exit (FATAL_EXIT_CODE);
        }
-      fprintf (stderr, "Output automata description...");
-      fflush (stderr);
+      if (progress_flag)
+       fprintf (stderr, "Output automata description...");
       output_description ();
       output_automaton_descriptions ();
-      fprintf (stderr, "done\n");
+      if (progress_flag)
+       fprintf (stderr, "done\n");
       output_statistics (output_description_file);
     }
   output_statistics (stderr);
index f97f8e98c8abb10e128941933544f7ced4980c05..9306abc7a0635161eecc331dd4b49f2620b531d2 100644 (file)
@@ -480,7 +480,10 @@ DEF_RTL_EXPR(DEFINE_AUTOMATON, "define_automaton", "s", 'x')
    o "w" which means generation of warning instead of error for
      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')
 
 /* (define_reservation string string) names reservation (the first