diff options
author | mkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-16 05:23:21 +0000 |
---|---|---|
committer | mkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-16 05:23:21 +0000 |
commit | e48970004af4707cf541fc319cb866638b29cb3a (patch) | |
tree | 2406ed9805b60255cb95efc06c870414886a802d /gcc/sched-rgn.c | |
parent | 4bfe0e7b4c07dacce91704084834209b211eab90 (diff) | |
download | gcc-e48970004af4707cf541fc319cb866638b29cb3a.tar.gz |
2006-03-16 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
* sched-int.h (struct haifa_insn_data): New fields: resolved_deps,
inter_tick, queue_index.
(struct sched_info): Change signature of init_ready_list field.
Adjust all initializations.
(RESOLVED_DEPS): New access macro.
(ready_add): Remove prototype.
(try_ready): Add prototype.
* sched-rgn.c (init_ready_list): Use try_ready.
(schedule_region): Initialize
current_sched_info->{sched_max_insns_priority, queue_must_finish_empty}.
* sched-ebb.c (new_ready): Remove. Adjust ebb_sched_info.
(init_ready_list): Use try_ready.
(schedule_ebb): Initialize current_sched_info->sched_max_insns_priority.
* lists.c (remove_list_elem): Remove `static'.
(remove_free_INSN_LIST_elem): New function.
* rtl.h (remove_list_elem, remove_free_INSN_LIST_elem): Add prototypes.
* haifa-sched.c (INTER_TICK, QUEUE_INDEX): New macros.
(INVALID_TICK, MIN_TICK, QUEUE_SCHEDULED, QUEUE_NOWHERE, QUEUE_READY):
New constants.
(readyp): New variable.
(queue_remove, ready_remove_insn, fix_inter_tick, fix_tick_ready,
change_queue_index, resolve_dep): New static functions.
(try_ready): New function. Adjust callers in sched-rgn.c and
sched-ebb.c to use it instead of ready_add.
(clock_var): Move at the begining of file.
(rank_for_schedule): Fix typo.
(queue_insn): Add assertion. Handle QUEUE_INDEX.
(ready_lastpos): Enforce assertion.
(ready_add): Make it static. Handle QUEUE_INDEX. Add new argument,
update all callers.
(ready_remove_first, ready_remove): Handle QUEUE_INDEX.
(schedule_insn): Rewrite to use try_ready and resolve_dep.
(queue_to_ready): Use free_INSN_LIST_list.
(early_queue_to_ready): Fix typo.
(schedule_block): Init readyp. Move init_ready_list call after the
initialization of clock_var. Fix error in rejecting insn by
targetm.sched.dfa_new_cycle. Add call to fix_inter_tick. Remove code
that previously corrected INSN_TICKs. Add code for handling
QUEUE_INDEX.
(set_priorities): Fix typo.
(sched_init): Initialize INSN_TICK, INTER_TICK and QUEUE_INDEX.
Clarify comment and code that keeps current_sched_info->next_tail
non-null.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112127 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sched-rgn.c')
-rw-r--r-- | gcc/sched-rgn.c | 43 |
1 files changed, 10 insertions, 33 deletions
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c index 0ee5be81d39..314d72851db 100644 --- a/gcc/sched-rgn.c +++ b/gcc/sched-rgn.c @@ -1884,7 +1884,7 @@ static int sched_n_insns; static int last_was_jump; /* Implementations of the sched_info functions for region scheduling. */ -static void init_ready_list (struct ready_list *); +static void init_ready_list (void); static int can_schedule_ready_p (rtx); static int new_ready (rtx); static int schedule_more_p (void); @@ -1905,7 +1905,7 @@ schedule_more_p (void) once before scheduling a set of insns. */ static void -init_ready_list (struct ready_list *ready) +init_ready_list (void) { rtx prev_head = current_sched_info->prev_head; rtx next_tail = current_sched_info->next_tail; @@ -1943,15 +1943,8 @@ init_ready_list (struct ready_list *ready) /* Initialize ready list with all 'ready' insns in target block. Count number of insns in the target block being scheduled. */ for (insn = NEXT_INSN (prev_head); insn != next_tail; insn = NEXT_INSN (insn)) - { - if (INSN_DEP_COUNT (insn) == 0) - { - ready_add (ready, insn); - - if (targetm.sched.adjust_priority) - INSN_PRIORITY (insn) = - targetm.sched.adjust_priority (insn, INSN_PRIORITY (insn)); - } + { + try_ready (insn); target_n_insns++; } @@ -1970,26 +1963,8 @@ init_ready_list (struct ready_list *ready) src_head = head; for (insn = src_head; insn != src_next_tail; insn = NEXT_INSN (insn)) - { - if (! INSN_P (insn)) - continue; - - if (!CANT_MOVE (insn) - && (!IS_SPECULATIVE_INSN (insn) - || ((recog_memoized (insn) < 0 - || min_insn_conflict_delay (curr_state, - insn, insn) <= 3) - && check_live (insn, bb_src) - && is_exception_free (insn, bb_src, target_bb)))) - if (INSN_DEP_COUNT (insn) == 0) - { - ready_add (ready, insn); - - if (targetm.sched.adjust_priority) - INSN_PRIORITY (insn) = - targetm.sched.adjust_priority (insn, INSN_PRIORITY (insn)); - } - } + if (INSN_P (insn)) + try_ready (insn); } } @@ -2638,6 +2613,7 @@ schedule_region (int rgn) } /* Set priorities. */ + current_sched_info->sched_max_insns_priority = 0; for (bb = 0; bb < current_nr_blocks; bb++) { rtx head, tail; @@ -2645,6 +2621,7 @@ schedule_region (int rgn) rgn_n_insns += set_priorities (head, tail); } + current_sched_info->sched_max_insns_priority++; /* Compute interblock info: probabilities, split-edges, dominators, etc. */ if (current_nr_blocks > 1) @@ -2727,8 +2704,8 @@ schedule_region (int rgn) target_bb = bb; - current_sched_info->queue_must_finish_empty - = current_nr_blocks > 1 && !flag_schedule_interblock; + gcc_assert (flag_schedule_interblock || current_nr_blocks == 1); + current_sched_info->queue_must_finish_empty = current_nr_blocks == 1; schedule_block (b, rgn_n_insns); sched_rgn_n_insns += sched_n_insns; |