diff options
author | Jan Hubicka <jh@suse.cz> | 2005-06-20 00:40:34 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2005-06-19 22:40:34 +0000 |
commit | 7f7b17185b2783e7a4794ac254cef2c8d2a6afca (patch) | |
tree | 07b4151376678a25dbd81f59058d37f2a765165b /gcc | |
parent | cac24f06cb5600e5e744e724764687b2837a2a52 (diff) | |
download | gcc-7f7b17185b2783e7a4794ac254cef2c8d2a6afca.zip gcc-7f7b17185b2783e7a4794ac254cef2c8d2a6afca.tar.gz gcc-7f7b17185b2783e7a4794ac254cef2c8d2a6afca.tar.bz2 |
cfgloop.h (DLTHE_RECORD_COPY_NUMBER): New flag.
* cfgloop.h (DLTHE_RECORD_COPY_NUMBER): New flag.
* cfgloopmanip.c (duplicate_loop_to_header_edge): Set aux flags only
when asked for.
* loop-unroll.c (peel_loop_completely, unroll_loop_constant_iterations,
unroll_loop_runtime_iterations, peel_loop_simple, unroll_loop_stupid):
Update call of duplicate_loop_to_header_edge.
(apply_opt_in_copies): Clear out aux pointers.
From-SVN: r101193
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cfgloop.h | 2 | ||||
-rw-r--r-- | gcc/cfgloopmanip.c | 11 | ||||
-rw-r--r-- | gcc/loop-unroll.c | 35 |
4 files changed, 46 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ab9dcd3..e473165 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2005-06-20 Jan Hubicka <jh@suse.cz> + + * cfgloop.h (DLTHE_RECORD_COPY_NUMBER): New flag. + * cfgloopmanip.c (duplicate_loop_to_header_edge): Set aux flags only + when asked for. + * loop-unroll.c (peel_loop_completely, unroll_loop_constant_iterations, + unroll_loop_runtime_iterations, peel_loop_simple, unroll_loop_stupid): + Update call of duplicate_loop_to_header_edge. + (apply_opt_in_copies): Clear out aux pointers. + 2005-06-19 Joseph S. Myers <joseph@codesourcery.com> * config/i386/i386.c (TARGET_MANGLE_FUNDAMENTAL_TYPE): Define. diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h index 048802b..bfcb0b9 100644 --- a/gcc/cfgloop.h +++ b/gcc/cfgloop.h @@ -296,6 +296,8 @@ extern bool can_duplicate_loop_p (struct loop *loop); #define DLTHE_FLAG_UPDATE_FREQ 1 /* Update frequencies in duplicate_loop_to_header_edge. */ +#define DLTHE_RECORD_COPY_NUMBER 2 /* Record copy number in the aux + field of newly create BB. */ extern struct loop * duplicate_loop (struct loops *, struct loop *, struct loop *); diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index 9972378..d75c7d4 100644 --- a/gcc/cfgloopmanip.c +++ b/gcc/cfgloopmanip.c @@ -982,11 +982,12 @@ duplicate_loop_to_header_edge (struct loop *loop, edge e, struct loops *loops, /* Copy bbs. */ copy_bbs (bbs, n, new_bbs, spec_edges, 2, new_spec_edges, loop); - for (i = 0; i < n; i++) - { - gcc_assert (!new_bbs[i]->aux); - new_bbs[i]->aux = (void *)(size_t)(j + 1); - } + if (flags & DLTHE_RECORD_COPY_NUMBER) + for (i = 0; i < n; i++) + { + gcc_assert (!new_bbs[i]->aux); + new_bbs[i]->aux = (void *)(size_t)(j + 1); + } /* Note whether the blocks and edges belong to an irreducible loop. */ if (add_irreducible_flag) diff --git a/gcc/loop-unroll.c b/gcc/loop-unroll.c index 72fda46..fd1821c 100644 --- a/gcc/loop-unroll.c +++ b/gcc/loop-unroll.c @@ -519,7 +519,9 @@ peel_loop_completely (struct loops *loops, struct loop *loop) loops, npeel, wont_exit, desc->out_edge, remove_edges, &n_remove_edges, - DLTHE_FLAG_UPDATE_FREQ); + DLTHE_FLAG_UPDATE_FREQ + | (opt_info + ? DLTHE_RECORD_COPY_NUMBER : 0)); gcc_assert (ok); free (wont_exit); @@ -717,7 +719,10 @@ unroll_loop_constant_iterations (struct loops *loops, struct loop *loop) loops, exit_mod, wont_exit, desc->out_edge, remove_edges, &n_remove_edges, - DLTHE_FLAG_UPDATE_FREQ); + DLTHE_FLAG_UPDATE_FREQ + | (opt_info && exit_mod > 1 + ? DLTHE_RECORD_COPY_NUMBER + : 0)); gcc_assert (ok); if (opt_info && exit_mod > 1) @@ -753,7 +758,10 @@ unroll_loop_constant_iterations (struct loops *loops, struct loop *loop) loops, exit_mod + 1, wont_exit, desc->out_edge, remove_edges, &n_remove_edges, - DLTHE_FLAG_UPDATE_FREQ); + DLTHE_FLAG_UPDATE_FREQ + | (opt_info && exit_mod > 0 + ? DLTHE_RECORD_COPY_NUMBER + : 0)); gcc_assert (ok); if (opt_info && exit_mod > 0) @@ -777,7 +785,10 @@ unroll_loop_constant_iterations (struct loops *loops, struct loop *loop) loops, max_unroll, wont_exit, desc->out_edge, remove_edges, &n_remove_edges, - DLTHE_FLAG_UPDATE_FREQ); + DLTHE_FLAG_UPDATE_FREQ + | (opt_info + ? DLTHE_RECORD_COPY_NUMBER + : 0)); gcc_assert (ok); if (opt_info) @@ -1097,7 +1108,10 @@ unroll_loop_runtime_iterations (struct loops *loops, struct loop *loop) loops, max_unroll, wont_exit, desc->out_edge, remove_edges, &n_remove_edges, - DLTHE_FLAG_UPDATE_FREQ); + DLTHE_FLAG_UPDATE_FREQ + | (opt_info + ? DLTHE_RECORD_COPY_NUMBER + : 0)); gcc_assert (ok); if (opt_info) @@ -1274,7 +1288,10 @@ peel_loop_simple (struct loops *loops, struct loop *loop) ok = duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop), loops, npeel, wont_exit, NULL, NULL, - NULL, DLTHE_FLAG_UPDATE_FREQ); + NULL, DLTHE_FLAG_UPDATE_FREQ + | (opt_info + ? DLTHE_RECORD_COPY_NUMBER + : 0)); gcc_assert (ok); free (wont_exit); @@ -1422,7 +1439,10 @@ unroll_loop_stupid (struct loops *loops, struct loop *loop) ok = duplicate_loop_to_header_edge (loop, loop_latch_edge (loop), loops, nunroll, wont_exit, NULL, NULL, NULL, - DLTHE_FLAG_UPDATE_FREQ); + DLTHE_FLAG_UPDATE_FREQ + | (opt_info + ? DLTHE_RECORD_COPY_NUMBER + : 0)); gcc_assert (ok); if (opt_info) @@ -2064,6 +2084,7 @@ apply_opt_in_copies (struct opt_info *opt_info, duplicate_loop_to_header_edge. */ delta = determine_split_iv_delta ((size_t)bb->aux, n_copies, unrolling); + bb->aux = 0; orig_insn = BB_HEAD (orig_bb); for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb)); insn = next) { |