aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>2002-07-05 21:40:16 +0000
committervmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>2002-07-05 21:40:16 +0000
commit3edc722e7aca2e6328fe60a21cbb103de15d517a (patch)
tree9a466fed04bd1497fcd54cb4ac7e56f6c6da887b
parentbc7cbc6ab07614a89d03d96e6d25b2e2fe074360 (diff)
2002-07-05 Vladimir Makarov <vmakarov@redhat.com>
* 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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/genautomata.c27
2 files changed, 28 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a3086e1a4b4..39e005ba80f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/genautomata.c b/gcc/genautomata.c
index d5a74609538..0fddf2706e1 100644
--- a/gcc/genautomata.c
+++ b/gcc/genautomata.c
@@ -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 ();