From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11594 invoked by alias); 26 Jun 2002 03:26:02 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 11579 invoked by uid 71); 26 Jun 2002 03:26:02 -0000 Date: Tue, 25 Jun 2002 20:56:00 -0000 Message-ID: <20020626032602.11578.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Alan Modra Subject: Re: optimization/7120: Run once loop should *always* be unrolled Reply-To: Alan Modra X-SW-Source: 2002-06/txt/msg00623.txt.bz2 List-Id: The following reply was made to PR optimization/7120; it has been noted by GNATS. From: Alan Modra To: davem@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, rth@twiddle.net, rusty@rustcorp.com.au, gcc-gnats@gcc.gnu.org Cc: gcc-patches@gcc.gnu.org Subject: Re: optimization/7120: Run once loop should *always* be unrolled Date: Wed, 26 Jun 2002 12:54:56 +0930 On Tue, Jun 25, 2002 at 04:21:32PM -0000, davem@gcc.gnu.org wrote: > Synopsis: Run once loop should *always* be unrolled This patch cures the problem. bootstrap i686-linux in progress. * unroll.c (loop_iterations): Handle EQ loops. Index: gcc/unroll.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/unroll.c,v retrieving revision 1.168 diff -u -p -r1.168 unroll.c --- gcc/unroll.c 15 Jun 2002 01:10:49 -0000 1.168 +++ gcc/unroll.c 26 Jun 2002 03:19:38 -0000 @@ -3941,12 +3941,6 @@ loop_iterations (loop) } return 0; } - else if (comparison_code == EQ) - { - if (loop_dump_stream) - fprintf (loop_dump_stream, "Loop iterations: EQ comparison loop.\n"); - return 0; - } else if (GET_CODE (final_value) != CONST_INT) { if (loop_dump_stream) @@ -3957,6 +3951,15 @@ loop_iterations (loop) fprintf (loop_dump_stream, ".\n"); } return 0; + } + else if (comparison_code == EQ) + { + if (loop_dump_stream) + fprintf (loop_dump_stream, "Loop iterations: EQ comparison loop.\n"); + if (INTVAL (increment) == 0) + return 0; + loop_info->n_iterations = 1; + return loop_info->n_iterations; } /* Final_larger is 1 if final larger, 0 if they are equal, otherwise -1. */ -- Alan Modra IBM OzLabs - Linux Technology Centre