diff options
author | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-01-28 17:12:06 +0000 |
---|---|---|
committer | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-01-28 17:12:06 +0000 |
commit | e26579fc90c714ccfbc29ce1b609f20eae6133dc (patch) | |
tree | 8180fc6a14989f4e80977340fde69e75dc5fec16 /gcc/sched-deps.c | |
parent | 6126e5e7073162589ec17b49b46a15cbc65011ef (diff) | |
download | gcc-e26579fc90c714ccfbc29ce1b609f20eae6133dc.tar.gz |
2003-01-28 Vladimir Makarov <vmakarov@redhat.com>
* haifa-sched.c (schedule_insn): Return necessary cycle advance
after issuing the insn.
(rank_for_schedule): Make a insn with /S the highest priority
insn.
(move_insn): Ignore schedule groups. Clear SCHED_GROUP_P.
(choose_ready): Check SCHED_GROUP_P.
(schedule_block): Advance cycle after issuing insn if it is
necessary. Don't reorder insns if there is an insn with /S.
(set_priorities): Ignore schedule groups.
* sched-deps.c (remove_dependence, group_leader): Remove the
functions.
(add_dependence): Ignore schedule groups.
(set_sched_group_p): Don't make copy of dependencies from previous
insn of the schedule group. Add anti-dependency to the previous
insn of the schedule group.
(compute_forward_dependences): Ignore schedule groups.
* sched-ebb.c (init_ready_list): Ignore schedule groups.
* sched-rgn.c (init_ready_list): Ditto.
(can_schedule_ready_p): Ditto.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@61983 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sched-deps.c')
-rw-r--r-- | gcc/sched-deps.c | 128 |
1 files changed, 4 insertions, 124 deletions
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c index d6fa2c821a6..fc9d4d857db 100644 --- a/gcc/sched-deps.c +++ b/gcc/sched-deps.c @@ -83,14 +83,12 @@ static sbitmap *forward_dependency_cache; static int deps_may_trap_p PARAMS ((rtx)); static void add_dependence_list PARAMS ((rtx, rtx, enum reg_note)); static void add_dependence_list_and_free PARAMS ((rtx, rtx *, enum reg_note)); -static void remove_dependence PARAMS ((rtx, rtx)); static void set_sched_group_p PARAMS ((rtx)); static void flush_pending_lists PARAMS ((struct deps *, rtx, int, int)); static void sched_analyze_1 PARAMS ((struct deps *, rtx, rtx)); static void sched_analyze_2 PARAMS ((struct deps *, rtx, rtx)); static void sched_analyze_insn PARAMS ((struct deps *, rtx, rtx, rtx)); -static rtx group_leader PARAMS ((rtx)); static rtx get_condition PARAMS ((rtx)); static int conditions_mutex_p PARAMS ((rtx, rtx)); @@ -184,7 +182,7 @@ add_dependence (insn, elem, dep_type) rtx elem; enum reg_note dep_type; { - rtx link, next; + rtx link; int present_p; rtx cond1, cond2; @@ -218,38 +216,6 @@ add_dependence (insn, elem, dep_type) return; } - /* If elem is part of a sequence that must be scheduled together, then - make the dependence point to the last insn of the sequence. - When HAVE_cc0, it is possible for NOTEs to exist between users and - setters of the condition codes, so we must skip past notes here. - Otherwise, NOTEs are impossible here. */ - next = next_nonnote_insn (elem); - if (next && INSN_P (next) && SCHED_GROUP_P (next)) - { - /* Notes will never intervene here though, so don't bother checking - for them. */ - /* Hah! Wrong. */ - /* We must reject CODE_LABELs, so that we don't get confused by one - that has LABEL_PRESERVE_P set, which is represented by the same - bit in the rtl as SCHED_GROUP_P. A CODE_LABEL can never be - SCHED_GROUP_P. */ - - rtx nnext; - while ((nnext = next_nonnote_insn (next)) != NULL - && INSN_P (nnext) - && SCHED_GROUP_P (nnext)) - next = nnext; - - /* Again, don't depend an insn on itself. */ - if (insn == next) - return; - - /* Make the dependence to NEXT, the last insn of the group, - instead of the original ELEM. */ - elem = next; - } - - present_p = 1; #ifdef INSN_SCHEDULING /* ??? No good way to tell from here whether we're doing interblock @@ -385,76 +351,6 @@ add_dependence_list_and_free (insn, listp, dep_type) } } -/* Remove ELEM wrapped in an INSN_LIST from the LOG_LINKS - of INSN. Abort if not found. */ - -static void -remove_dependence (insn, elem) - rtx insn; - rtx elem; -{ - rtx prev, link, next; - int found = 0; - - for (prev = 0, link = LOG_LINKS (insn); link; link = next) - { - next = XEXP (link, 1); - if (XEXP (link, 0) == elem) - { - if (prev) - XEXP (prev, 1) = next; - else - LOG_LINKS (insn) = next; - -#ifdef INSN_SCHEDULING - /* If we are removing a dependency from the LOG_LINKS list, - make sure to remove it from the cache too. */ - if (true_dependency_cache != NULL) - { - if (REG_NOTE_KIND (link) == 0) - RESET_BIT (true_dependency_cache[INSN_LUID (insn)], - INSN_LUID (elem)); - else if (REG_NOTE_KIND (link) == REG_DEP_ANTI) - RESET_BIT (anti_dependency_cache[INSN_LUID (insn)], - INSN_LUID (elem)); - else if (REG_NOTE_KIND (link) == REG_DEP_OUTPUT) - RESET_BIT (output_dependency_cache[INSN_LUID (insn)], - INSN_LUID (elem)); - } -#endif - - free_INSN_LIST_node (link); - - found = 1; - } - else - prev = link; - } - - if (!found) - abort (); - return; -} - -/* Return an insn which represents a SCHED_GROUP, which is - the last insn in the group. */ - -static rtx -group_leader (insn) - rtx insn; -{ - rtx prev; - - do - { - prev = insn; - insn = next_nonnote_insn (insn); - } - while (insn && INSN_P (insn) && SCHED_GROUP_P (insn)); - - return prev; -} - /* Set SCHED_GROUP_P and care for the rest of the bookkeeping that goes along with that. */ @@ -462,26 +358,12 @@ static void set_sched_group_p (insn) rtx insn; { - rtx link, prev; + rtx prev; SCHED_GROUP_P (insn) = 1; - /* There may be a note before this insn now, but all notes will - be removed before we actually try to schedule the insns, so - it won't cause a problem later. We must avoid it here - though. */ prev = prev_nonnote_insn (insn); - - /* Make a copy of all dependencies on the immediately previous - insn, and add to this insn. This is so that all the - dependencies will apply to the group. Remove an explicit - dependence on this insn as SCHED_GROUP_P now represents it. */ - - if (find_insn_list (prev, LOG_LINKS (insn))) - remove_dependence (insn, prev); - - for (link = LOG_LINKS (prev); link; link = XEXP (link, 1)) - add_dependence (insn, XEXP (link, 0), REG_NOTE_KIND (link)); + add_dependence (insn, prev, REG_DEP_ANTI); } /* Process an insn's memory dependencies. There are four kinds of @@ -1446,11 +1328,9 @@ compute_forward_dependences (head, tail) if (! INSN_P (insn)) continue; - insn = group_leader (insn); - for (link = LOG_LINKS (insn); link; link = XEXP (link, 1)) { - rtx x = group_leader (XEXP (link, 0)); + rtx x = XEXP (link, 0); rtx new_link; if (x != XEXP (link, 0)) |