aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2004-02-06 20:10:35 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2004-02-06 20:10:35 +0000
commit1f0db3dfca894ec75f6b6a9f360faa9b1253f0a1 (patch)
tree5d1d882247fd66bae6398a9890456f624b5faa40 /gcc
parent014a1138d6ff79eff9aea704d5e8ae3f58fef5d1 (diff)
downloadgcc-1f0db3dfca894ec75f6b6a9f360faa9b1253f0a1.zip
gcc-1f0db3dfca894ec75f6b6a9f360faa9b1253f0a1.tar.gz
gcc-1f0db3dfca894ec75f6b6a9f360faa9b1253f0a1.tar.bz2
loop.c (force_movables): Transitively increase the priorities of all insns forces by an insn...
* loop.c (force_movables): Transitively increase the priorities of all insns forces by an insn, not just the first one. From-SVN: r77419
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/loop.c12
2 files changed, 14 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 35aab6c..6853041 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-02-06 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * loop.c (force_movables): Transitively increase the priorities of
+ all insns forces by an insn, not just the first one.
+
2004-02-06 Josef Zlomek <zlomekj@suse.cz>
Daniel Berlin <dberlin@dberlin.org>
diff --git a/gcc/loop.c b/gcc/loop.c
index 55c9834..911d561 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -1469,12 +1469,18 @@ force_movables (struct loop_movables *movables)
m = 0;
/* Increase the priority of the moving the first insn
- since it permits the second to be moved as well. */
+ since it permits the second to be moved as well.
+ Likewise for insns already forced by the first insn. */
if (m != 0)
{
+ struct movable *m2;
+
m->forces = m1;
- m1->lifetime += m->lifetime;
- m1->savings += m->savings;
+ for (m2 = m1; m2; m2 = m2->forces)
+ {
+ m2->lifetime += m->lifetime;
+ m2->savings += m->savings;
+ }
}
}
}