diff options
author | Richard Henderson <rth@redhat.com> | 2002-04-02 23:56:47 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2002-04-02 23:56:47 -0800 |
commit | 6584b4aa8bf0515432f520c3ac8379e3bd70e8d2 (patch) | |
tree | 20695b9c1c06a51bef949e2e27c2c1bc4213eb58 /gcc | |
parent | 0acf409fdc1266c03caf70c778e8a79ce2f59261 (diff) | |
download | gcc-6584b4aa8bf0515432f520c3ac8379e3bd70e8d2.zip gcc-6584b4aa8bf0515432f520c3ac8379e3bd70e8d2.tar.gz gcc-6584b4aa8bf0515432f520c3ac8379e3bd70e8d2.tar.bz2 |
re PR rtl-optimization/4311 (unrolling loops creates non-ending loop)
PR opt/4311
* loop.h (LOOP_FIRST_PASS): New.
* loop.c (strength_reduce): Mind it when deciding to unroll.
* toplev.c (rest_of_compilation): Set it.
From-SVN: r51798
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/loop.c | 3 | ||||
-rw-r--r-- | gcc/loop.h | 1 | ||||
-rw-r--r-- | gcc/toplev.c | 3 |
4 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d452251..5a4f4f3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2002-04-02 Richard Henderson <rth@redhat.com> + + PR opt/4311 + * loop.h (LOOP_FIRST_PASS): New. + * loop.c (strength_reduce): Mind it when deciding to unroll. + * toplev.c (rest_of_compilation): Set it. + 2002-04-02 David S. Miller <davem@redhat.com> * config/sparc/sparc.md (ldd peephole2s): Fix final arg to @@ -5214,7 +5214,8 @@ strength_reduce (loop, flags) collected. Always unroll loops that would be as small or smaller unrolled than when rolled. */ if ((flags & LOOP_UNROLL) - || (loop_info->n_iterations > 0 + || (!(flags & LOOP_FIRST_PASS) + && loop_info->n_iterations > 0 && unrolled_insn_copies <= insn_count)) unroll_loop (loop, insn_count, 1); @@ -28,6 +28,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #define LOOP_UNROLL 1 #define LOOP_BCT 2 #define LOOP_PREFETCH 4 +#define LOOP_FIRST_PASS 8 /* Get the loop info pointer of a loop. */ #define LOOP_INFO(LOOP) ((struct loop_info *) (LOOP)->aux) diff --git a/gcc/toplev.c b/gcc/toplev.c index 2400959..9fa22fc 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -2805,8 +2805,7 @@ rest_of_compilation (decl) cleanup_barriers (); /* We only want to perform unrolling once. */ - - loop_optimize (insns, rtl_dump_file, 0); + loop_optimize (insns, rtl_dump_file, LOOP_FIRST_PASS); /* The first call to loop_optimize makes some instructions trivially dead. We delete those instructions now in the |