aboutsummaryrefslogtreecommitdiff
path: root/gcc/predict.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2008-07-29 10:52:16 +0000
committerJan Hubicka <hubicka@gcc.gnu.org>2008-07-29 10:52:16 +0000
commitbf08ebebc7fb2f16aa6095a10987196cb4267a78 (patch)
treea553c86e8031502bd1ab3bdb7e5a7c83ff5e1088 /gcc/predict.c
parent993555181042e01fcdb573a44f4c787a3e50e25a (diff)
downloadgcc-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.c80
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. */