diff options
author | Richard Henderson <rth@redhat.com> | 2002-07-21 17:26:03 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2002-07-21 17:26:03 -0700 |
commit | 5e1afb115ee0038eb3474176d8c56c2460a4274e (patch) | |
tree | 2ff7eb08105c0df70c8ebbd19873fcb13b68513d /gcc | |
parent | c67a1cf6a842249a064d479b455321e6663e4708 (diff) | |
download | gcc-5e1afb115ee0038eb3474176d8c56c2460a4274e.zip gcc-5e1afb115ee0038eb3474176d8c56c2460a4274e.tar.gz gcc-5e1afb115ee0038eb3474176d8c56c2460a4274e.tar.bz2 |
loop.h (LOOP_AUTO_UNROLL): Rename from LOOP_FIRST_PASS.
* loop.h (LOOP_AUTO_UNROLL): Rename from LOOP_FIRST_PASS.
* loop.c (strength_reduce): Update.
* toplev.c (rest_of_compilation): Do unrolling in the first
loop pass, not the second.
From-SVN: r55634
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/loop.c | 2 | ||||
-rw-r--r-- | gcc/loop.h | 2 | ||||
-rw-r--r-- | gcc/toplev.c | 12 |
4 files changed, 16 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a852ef7..d1959cc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2002-07-21 Richard Henderson <rth@redhat.com> + * loop.h (LOOP_AUTO_UNROLL): Rename from LOOP_FIRST_PASS. + * loop.c (strength_reduce): Update. + * toplev.c (rest_of_compilation): Do unrolling in the first + loop pass, not the second. + +2002-07-21 Richard Henderson <rth@redhat.com> + * emit-rtl.c (set_mem_attributes): Preserve indirection of PARM_DECL when flag_argument_noalias == 2. * alias.c (nonoverlapping_memrefs_p): Handle that. @@ -5320,7 +5320,7 @@ strength_reduce (loop, flags) collected. Always unroll loops that would be as small or smaller unrolled than when rolled. */ if ((flags & LOOP_UNROLL) - || (!(flags & LOOP_FIRST_PASS) + || ((flags & LOOP_AUTO_UNROLL) && loop_info->n_iterations > 0 && unrolled_insn_copies <= insn_count)) unroll_loop (loop, insn_count, 1); @@ -28,7 +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 +#define LOOP_AUTO_UNROLL 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 f9ebc17..cfb21e4 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1,4 +1,3 @@ - /* Top level of GNU C compiler Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. @@ -2878,6 +2877,8 @@ rest_of_compilation (decl) if (optimize > 0 && flag_loop_optimize) { + int do_unroll, do_prefetch; + timevar_push (TV_LOOP); delete_dead_jumptables (); cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP); @@ -2885,12 +2886,15 @@ rest_of_compilation (decl) /* CFG is no longer maintained up-to-date. */ free_bb_for_insn (); + do_unroll = flag_unroll_loops ? LOOP_UNROLL : LOOP_AUTO_UNROLL; + do_prefetch = flag_prefetch_loop_arrays ? LOOP_PREFETCH : 0; if (flag_rerun_loop_opt) { cleanup_barriers (); /* We only want to perform unrolling once. */ - loop_optimize (insns, rtl_dump_file, LOOP_FIRST_PASS); + loop_optimize (insns, rtl_dump_file, do_unroll); + do_unroll = 0; /* The first call to loop_optimize makes some instructions trivially dead. We delete those instructions now in the @@ -2903,9 +2907,7 @@ rest_of_compilation (decl) reg_scan (insns, max_reg_num (), 1); } cleanup_barriers (); - loop_optimize (insns, rtl_dump_file, - (flag_unroll_loops ? LOOP_UNROLL : 0) | LOOP_BCT - | (flag_prefetch_loop_arrays ? LOOP_PREFETCH : 0)); + loop_optimize (insns, rtl_dump_file, do_unroll | LOOP_BCT | do_prefetch); /* Loop can create trivially dead instructions. */ delete_trivially_dead_insns (insns, max_reg_num ()); |