summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/sched-rgn.c
diff options
context:
space:
mode:
authorkan <kan@FreeBSD.org>2006-08-26 21:29:10 +0000
committerkan <kan@FreeBSD.org>2006-08-26 21:29:10 +0000
commitab6c6e434e4ca0bf593007d49dee6eceb73286c0 (patch)
tree843ffc6140f66bf60562adb1bf8d3d82b9739b5e /contrib/gcc/sched-rgn.c
parent8a6911d2bb988a943624cbf4e4041b827d9ade53 (diff)
downloadFreeBSD-src-ab6c6e434e4ca0bf593007d49dee6eceb73286c0.zip
FreeBSD-src-ab6c6e434e4ca0bf593007d49dee6eceb73286c0.tar.gz
Gcc 3.4.6 as of 2006/08/25 #116475.
Diffstat (limited to 'contrib/gcc/sched-rgn.c')
-rw-r--r--contrib/gcc/sched-rgn.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/contrib/gcc/sched-rgn.c b/contrib/gcc/sched-rgn.c
index b8e474d..7107445 100644
--- a/contrib/gcc/sched-rgn.c
+++ b/contrib/gcc/sched-rgn.c
@@ -2078,6 +2078,42 @@ add_branch_dependences (rtx head, rtx tail)
insn = PREV_INSN (insn);
}
+#ifdef HAVE_cc0
+ /* There may be other cc0 setters earlier on in this block.
+ Look for them and include them in the set not to be disturbed. */
+ if (insn != head && last != NULL_RTX)
+ {
+ rtx earlier_cc0_setter = NULL_RTX;
+
+ for (insn = last; insn != NULL_RTX && insn != head;)
+ {
+ insn = prev_nonnote_insn (insn);
+ if (sets_cc0_p (insn))
+ earlier_cc0_setter = insn;
+ }
+
+ if (earlier_cc0_setter != NULL_RTX)
+ {
+ insn = last;
+ do
+ {
+ insn = prev_nonnote_insn (insn);
+
+ if (last != 0 && ! find_insn_list (insn, LOG_LINKS (last)))
+ {
+ add_dependence (last, insn, REG_DEP_ANTI);
+ INSN_REF_COUNT (insn)++;
+ }
+
+ CANT_MOVE (insn) = 1;
+
+ last = insn;
+ }
+ while (insn != earlier_cc0_setter);
+ }
+ }
+#endif
+
/* Make sure these insns are scheduled last in their block. */
insn = last;
if (insn != 0)
OpenPOWER on IntegriCloud