From 04894c5a9e4ee2ac250c05c2d133ca6da3aab1a7 Mon Sep 17 00:00:00 2001 From: Dale Johannesen Date: Thu, 10 Jan 2002 21:00:43 +0000 Subject: [PATCH] re PR rtl-optimization/5269 (loop unroller fails to pull the right number of copies out) PR optimization/5269 * unroll.c (precondition_loop_p): Make *increment be the correct sign when n_iterations known, to avoid confusing caller. From-SVN: r48752 --- gcc/ChangeLog | 6 ++++++ gcc/unroll.c | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 76fcfbab3c1..fbabcae9f66 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2002-01-10 Dale Johannesen + + PR optimization/5269 + * unroll.c (precondition_loop_p): Make *increment be the correct + sign when n_iterations known, to avoid confusing caller. + 2002-01-10 Kazu Hirata * doc/extend.texi (deprecated): Fix a typo. diff --git a/gcc/unroll.c b/gcc/unroll.c index 047e98395d7..df02b7c8cbb 100644 --- a/gcc/unroll.c +++ b/gcc/unroll.c @@ -1392,9 +1392,18 @@ precondition_loop_p (loop, initial_value, final_value, increment, mode) if (loop_info->n_iterations > 0) { - *initial_value = const0_rtx; - *increment = const1_rtx; - *final_value = GEN_INT (loop_info->n_iterations); + if (INTVAL (loop_info->increment) > 0) + { + *initial_value = const0_rtx; + *increment = const1_rtx; + *final_value = GEN_INT (loop_info->n_iterations); + } + else + { + *initial_value = GEN_INT (loop_info->n_iterations); + *increment = constm1_rtx; + *final_value = const0_rtx; + } *mode = word_mode; if (loop_dump_stream)