2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-03-22 00:01:10 +08:00

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
This commit is contained in:
Jan Hubicka 2008-08-29 10:58:52 +02:00 committed by Jan Hubicka
parent 7299cb9940
commit cc870036bd
4 changed files with 40 additions and 4 deletions

@ -1,3 +1,14 @@
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.

@ -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);

@ -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

@ -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;