aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorFranz Sirl <Franz.Sirl-kernel@lauterbach.com>2001-10-08 21:20:43 +0000
committerFranz Sirl <sirl@gcc.gnu.org>2001-10-08 21:20:43 +0000
commit9d1e9f93a936c30220a46964ea49fc461f8ccb88 (patch)
treeb6d0cdb17f0f0e233132c9646b118f05a8145743 /gcc
parent0bdf7869bf1de3549de62e49901ebcea8578f5d3 (diff)
downloadgcc-9d1e9f93a936c30220a46964ea49fc461f8ccb88.zip
gcc-9d1e9f93a936c30220a46964ea49fc461f8ccb88.tar.gz
gcc-9d1e9f93a936c30220a46964ea49fc461f8ccb88.tar.bz2
unroll.c (loop_iterations): Extend check for multiple back edges.
2001-10-08 Franz Sirl <Franz.Sirl-kernel@lauterbach.com> * unroll.c (loop_iterations): Extend check for multiple back edges. From-SVN: r46099
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/unroll.c21
2 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f21ad78..854f28a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2001-10-08 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+
+ * unroll.c (loop_iterations): Extend check for multiple back edges.
+
2001-10-08 Alexandre Oliva <aoliva@redhat.com>
* langhooks.h: New file.
diff --git a/gcc/unroll.c b/gcc/unroll.c
index c0fe373..a2af213 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -3519,6 +3519,27 @@ loop_iterations (loop)
return 0;
}
+ /* If there are multiple conditionalized loop exit tests, they may jump
+ back to differing CODE_LABELs. */
+ if (loop->top && loop->cont)
+ {
+ rtx temp = PREV_INSN (last_loop_insn);
+
+ do
+ {
+ if (GET_CODE (temp) == JUMP_INSN
+ && INSN_LUID (JUMP_LABEL (temp)) > INSN_LUID (loop->top)
+ && INSN_LUID (JUMP_LABEL (temp)) < INSN_LUID (loop->cont))
+ {
+ if (loop_dump_stream)
+ fprintf (loop_dump_stream,
+ "Loop iterations: Loop has multiple back edges.\n");
+ return 0;
+ }
+ }
+ while ((temp = PREV_INSN (temp)) != loop->cont);
+ }
+
/* Find the iteration variable. If the last insn is a conditional
branch, and the insn before tests a register value, make that the
iteration variable. */