diff options
author | Jan Hubicka <jh@suse.cz> | 2008-08-29 10:58:52 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2008-08-29 08:58:52 +0000 |
commit | cc870036bd76fccec8aeb19a3f8c4fda081e5c3d (patch) | |
tree | 92d8dcba01165e9199c912b448b73d517d093087 /gcc | |
parent | 7299cb994088a68a4fec5e479a03fc8a71e50646 (diff) | |
download | gcc-cc870036bd76fccec8aeb19a3f8c4fda081e5c3d.zip gcc-cc870036bd76fccec8aeb19a3f8c4fda081e5c3d.tar.gz gcc-cc870036bd76fccec8aeb19a3f8c4fda081e5c3d.tar.bz2 |
tree-ssa-loop-ch.c (should_duplicate_loop_header_p): Check that loop is not cold.
* tree-ssa-loop-ch.c (should_duplicate_loop_header_p): Check that loop
is not cold.
* predict.c (optimize_bb_for_size_p, optimize_bb_for_speed_p):
Constify arguments.
(optimize_loop_for_size_p, optimize_loop_for_speed_p): New functions.
* basic-block.h (optimize_bb_for_size_p, optimize_bb_for_speed_p):
Constify.
(optimize_loop_for_size_p, optimize_loop_for_speed_p): Declare.
From-SVN: r139756
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/basic-block.h | 6 | ||||
-rw-r--r-- | gcc/predict.c | 20 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-ch.c | 7 |
4 files changed, 40 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 431661b..a859a36 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,16 @@ 2008-08-29 Jan Hubicka <jh@suse.cz> + * tree-ssa-loop-ch.c (should_duplicate_loop_header_p): Check that loop + is not cold. + * predict.c (optimize_bb_for_size_p, optimize_bb_for_speed_p): + Constify arguments. + (optimize_loop_for_size_p, optimize_loop_for_speed_p): New functions. + * basic-block.h (optimize_bb_for_size_p, optimize_bb_for_speed_p): + Constify. + (optimize_loop_for_size_p, optimize_loop_for_speed_p): Declare. + +2008-08-29 Jan Hubicka <jh@suse.cz> + * tree-pass.h (pass_strip_predict_hints): Declare. * predict.c (strip_builtin_expect): Rename to ... (strip_predict_hints): ... this one; strip also GIMPLE_PREDICT. diff --git a/gcc/basic-block.h b/gcc/basic-block.h index c3cb76b..50d3e62 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -831,14 +831,16 @@ extern bool maybe_hot_bb_p (const_basic_block); extern bool maybe_hot_edge_p (edge); extern bool probably_cold_bb_p (const_basic_block); extern bool probably_never_executed_bb_p (const_basic_block); -extern bool optimize_bb_for_size_p (basic_block); -extern bool optimize_bb_for_speed_p (basic_block); +extern bool optimize_bb_for_size_p (const_basic_block); +extern bool optimize_bb_for_speed_p (const_basic_block); extern bool optimize_edge_for_size_p (edge); extern bool optimize_edge_for_speed_p (edge); extern bool optimize_insn_for_size_p (void); extern bool optimize_insn_for_speed_p (void); extern bool optimize_function_for_size_p (struct function *); extern bool optimize_function_for_speed_p (struct function *); +extern bool optimize_loop_for_size_p (struct loop *); +extern bool optimize_loop_for_speed_p (struct loop *); extern bool gimple_predicted_by_p (const_basic_block, enum br_predictor); extern bool rtl_predicted_by_p (const_basic_block, enum br_predictor); extern void gimple_predict_edge (edge, enum br_predictor, int); diff --git a/gcc/predict.c b/gcc/predict.c index 6107723..4de95e2 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -200,7 +200,7 @@ optimize_function_for_speed_p (struct function *fun) /* Return TRUE when BB should be optimized for size. */ bool -optimize_bb_for_size_p (basic_block bb) +optimize_bb_for_size_p (const_basic_block bb) { return optimize_function_for_size_p (cfun) || !maybe_hot_bb_p (bb); } @@ -208,7 +208,7 @@ optimize_bb_for_size_p (basic_block bb) /* Return TRUE when BB should be optimized for speed. */ bool -optimize_bb_for_speed_p (basic_block bb) +optimize_bb_for_speed_p (const_basic_block bb) { return !optimize_bb_for_size_p (bb); } @@ -245,6 +245,22 @@ optimize_insn_for_speed_p (void) return !optimize_insn_for_size_p (); } +/* Return TRUE when LOOP should be optimized for size. */ + +bool +optimize_loop_for_size_p (struct loop *loop) +{ + return optimize_bb_for_size_p (loop->header); +} + +/* Return TRUE when LOOP should be optimized for speed. */ + +bool +optimize_loop_for_speed_p (struct loop *loop) +{ + return optimize_bb_for_speed_p (loop->header); +} + /* Set RTL expansion for BB profile. */ void diff --git a/gcc/tree-ssa-loop-ch.c b/gcc/tree-ssa-loop-ch.c index 9a0dca7..33e85c8 100644 --- a/gcc/tree-ssa-loop-ch.c +++ b/gcc/tree-ssa-loop-ch.c @@ -58,6 +58,13 @@ should_duplicate_loop_header_p (basic_block header, struct loop *loop, if (header->aux) return false; + /* Loop header copying usually increases size of the code. This used not to + be true, since quite often it is possible to verify that the condition is + satisfied in the first iteration and therefore to eliminate it. Jump + threading handles these cases now. */ + if (optimize_loop_for_size_p (loop)) + return false; + gcc_assert (EDGE_COUNT (header->succs) > 0); if (single_succ_p (header)) return false; |