OSDN Git Service

2002-07-05 Vladimir Makarov <vmakarov@redhat.com>
authorvmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 5 Jul 2002 21:40:16 +0000 (21:40 +0000)
committervmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 5 Jul 2002 21:40:16 +0000 (21:40 +0000)
* genautomata.c (output_max_insn_queue_index_def): Take latencies
into account.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55269 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/genautomata.c

index a3086e1..39e005b 100644 (file)
@@ -1,3 +1,8 @@
+2002-07-05  Vladimir Makarov  <vmakarov@redhat.com>
+
+       * genautomata.c (output_max_insn_queue_index_def): Take latencies
+       into account.
+
 2002-07-06  Stephane Carrez  <stcarrez@nerim.fr>
 
        * config/m68hc11/m68hc11.md (peephole2): New peephole2 to optimize
index d5a7460..0fddf27 100644 (file)
@@ -6872,7 +6872,7 @@ process_state_longest_path_length (state)
     max_dfa_issue_rate = value;
 }
 
-/* The following nacro value is name of the corresponding global
+/* The following macro value is name of the corresponding global
    variable in the automaton based pipeline interface.  */
 
 #define MAX_DFA_ISSUE_RATE_VAR_NAME "max_dfa_issue_rate"
@@ -7960,13 +7960,32 @@ output_tables ()
 }
 
 /* The function outputs definition and value of PHR interface variable
-   `max_insn_queue_index' */
+   `max_insn_queue_index'.  Its value is not less than maximal queue
+   length needed for the insn scheduler.  */
 static void
 output_max_insn_queue_index_def ()
 {
-  int i;
+  int i, max, latency;
+  decl_t decl;
 
-  for (i = 0; (1 << i) <= description->max_insn_reserv_cycles; i++)
+  max = description->max_insn_reserv_cycles;
+  for (i = 0; i < description->decls_num; i++)
+    {
+      decl = description->decls [i];
+      if (decl->mode == dm_insn_reserv && decl != advance_cycle_insn_decl)
+       {
+         latency = DECL_INSN_RESERV (decl)->default_latency;
+         if (latency > max)
+           max = latency;
+       }
+      else if (decl->mode == dm_bypass)
+       {
+         latency = DECL_BYPASS (decl)->latency;
+         if (latency > max)
+           max = latency;
+       }
+    }
+  for (i = 0; (1 << i) <= max; i++)
     ;
   if (i < 0)
     abort ();