aboutsummaryrefslogtreecommitdiff
path: root/gcc/unroll.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@multimania.com>2002-06-15 01:10:49 +0000
committerRichard Henderson <rth@gcc.gnu.org>2002-06-14 18:10:49 -0700
commit045d7161a0fbbde5c70c2d1aef786c578f423a61 (patch)
tree32973a77f9b92a29a421bc6e7eefe35737b606cc /gcc/unroll.c
parent048c86160456fc8b165ec3a9761166896d17d566 (diff)
downloadgcc-045d7161a0fbbde5c70c2d1aef786c578f423a61.zip
gcc-045d7161a0fbbde5c70c2d1aef786c578f423a61.tar.gz
gcc-045d7161a0fbbde5c70c2d1aef786c578f423a61.tar.bz2
loop.c (check_final_value): Use v->always_executed instead of v->always_computable.
* loop.c (check_final_value): Use v->always_executed instead of v->always_computable. * unroll.c (final_giv_value): Don't calculate the final value as a function of the biv if the giv is not computed for every loop iteration. From-SVN: r54634
Diffstat (limited to 'gcc/unroll.c')
-rw-r--r--gcc/unroll.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/unroll.c b/gcc/unroll.c
index 3b81d22..a795dcb 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -3249,7 +3249,8 @@ final_giv_value (loop, v)
/* Try to calculate the final value as a function of the biv it depends
upon. The only exit from the loop must be the fall through at the bottom
- (otherwise it may not have its final value when the loop exits). */
+ and the insn that sets the giv must be executed on every iteration
+ (otherwise the giv may not have its final value when the loop exits). */
/* ??? Can calculate the final giv value by subtracting off the
extra biv increments times the giv's mult_val. The loop must have
@@ -3257,7 +3258,8 @@ final_giv_value (loop, v)
to be known. */
if (n_iterations != 0
- && ! loop->exit_count)
+ && ! loop->exit_count
+ && v->always_executed)
{
/* ?? It is tempting to use the biv's value here since these insns will
be put after the loop, and hence the biv will have its final value