diff options
author | Jan Hubicka <jh@suse.cz> | 2008-07-29 10:52:16 +0000 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2008-07-29 10:52:16 +0000 |
commit | bf08ebebc7fb2f16aa6095a10987196cb4267a78 (patch) | |
tree | a553c86e8031502bd1ab3bdb7e5a7c83ff5e1088 /gcc/predict.c | |
parent | 993555181042e01fcdb573a44f4c787a3e50e25a (diff) | |
download | gcc-bf08ebebc7fb2f16aa6095a10987196cb4267a78.zip gcc-bf08ebebc7fb2f16aa6095a10987196cb4267a78.tar.gz gcc-bf08ebebc7fb2f16aa6095a10987196cb4267a78.tar.bz2 |
predict.c (always_optimize_for_size_p): New function.
* predict.c (always_optimize_for_size_p): New function.
(optimize_bb_for_size_p, optimize_bb_for_speed_p,
optimize_edge_for_size_p, optimize_edge_for_speed_p,
optimize_insn_for_size_p, optimize_insn_for_speed_p): New global
functions.
(rtl_profile_for_bb, rtl_profile_for_edge, rtl_default_profile): New.
* function.c (prepare_function_start): Set default profile.
* function.h (rtl_data): Add maybe_hot_insn_p.
* cfgexpand.c (expand_gimple_basic_block): Set RTL profile.
(construct_exit_block): Likewise.
(tree_expand_cfg): Likewise.
* basic-block.h
(optimize_bb_for_size_p, optimize_bb_for_speed_p,
optimize_edge_for_size_p, optimize_edge_for_speed_p,
optimize_insn_for_size_p, optimize_insn_for_speed_p): Declare.
(rtl_profile_for_bb, rtl_profile_for_edge, default_rtl_profile):
Declare.
From-SVN: r138237
Diffstat (limited to 'gcc/predict.c')
-rw-r--r-- | gcc/predict.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/gcc/predict.c b/gcc/predict.c index 6a887be..853c0c6 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -178,6 +178,86 @@ probably_never_executed_bb_p (const_basic_block bb) return false; } +/* Return true when current function should always be optimized for size. */ + +static bool +always_optimize_for_size_p (void) +{ + return (optimize_size + || cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED); +} + +/* Return TRUE when BB should be optimized for size. */ + +bool +optimize_bb_for_size_p (basic_block bb) +{ + return always_optimize_for_size_p () || !maybe_hot_bb_p (bb); +} + +/* Return TRUE when BB should be optimized for speed. */ + +bool +optimize_bb_for_speed_p (basic_block bb) +{ + return !optimize_bb_for_size_p (bb); +} + +/* Return TRUE when BB should be optimized for size. */ + +bool +optimize_edge_for_size_p (edge e) +{ + return always_optimize_for_size_p () || !maybe_hot_edge_p (e); +} + +/* Return TRUE when BB should be optimized for speed. */ + +bool +optimize_edge_for_speed_p (edge e) +{ + return !optimize_edge_for_size_p (e); +} + +/* Return TRUE when BB should be optimized for size. */ + +bool +optimize_insn_for_size_p (void) +{ + return always_optimize_for_size_p () || !crtl->maybe_hot_insn_p; +} + +/* Return TRUE when BB should be optimized for speed. */ + +bool +optimize_insn_for_speed_p (void) +{ + return !optimize_insn_for_size_p (); +} + +/* Set RTL expansion for BB profile. */ + +void +rtl_profile_for_bb (basic_block bb) +{ + crtl->maybe_hot_insn_p = maybe_hot_bb_p (bb); +} + +/* Set RTL expansion for edge profile. */ + +void +rtl_profile_for_edge (edge e) +{ + crtl->maybe_hot_insn_p = maybe_hot_edge_p (e); +} + +/* Set RTL expansion to default mode (i.e. when profile info is not known). */ +void +default_rtl_profile (void) +{ + crtl->maybe_hot_insn_p = true; +} + /* Return true if the one of outgoing edges is already predicted by PREDICTOR. */ |