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:
parent
7299cb9940
commit
cc870036bd
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user