diff options
Diffstat (limited to 'gcc/sched.c')
-rw-r--r-- | gcc/sched.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/sched.c b/gcc/sched.c index a06044e2d29..b7aa75de1eb 100644 --- a/gcc/sched.c +++ b/gcc/sched.c @@ -431,17 +431,19 @@ remove_dependence (insn, elem) rtx prev, link; int found = 0; - for (prev = 0, link = LOG_LINKS (insn); link; - prev = link, link = XEXP (link, 1)) + for (prev = 0, link = LOG_LINKS (insn); link; link = XEXP (link, 1)) { if (XEXP (link, 0) == elem) { + RTX_INTEGRATED_P (link) = 1; if (prev) XEXP (prev, 1) = XEXP (link, 1); else LOG_LINKS (insn) = XEXP (link, 1); found = 1; } + else + prev = link; } if (! found) @@ -919,6 +921,11 @@ priority (insn) { rtx x = XEXP (prev, 0); + /* If this was a duplicate of a dependence we already deleted, + ignore it. */ + if (RTX_INTEGRATED_P (prev)) + continue; + /* A dependence pointing to a note or deleted insn is always obsolete, because sched_analyze_insn will have created any necessary new dependences which replace it. Notes and deleted |