aboutsummaryrefslogtreecommitdiff
path: root/gcc/cgraph.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2014-11-17 19:52:59 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2014-11-17 18:52:59 +0000
commita6b1490d35d7acb3dc5fe785fce116a674092c20 (patch)
tree271a33802b79d2437828ed71c783c755e8ff4130 /gcc/cgraph.c
parent7525bb7d7fe6d44c4634401e7468c408cee94d81 (diff)
downloadgcc-a6b1490d35d7acb3dc5fe785fce116a674092c20.zip
gcc-a6b1490d35d7acb3dc5fe785fce116a674092c20.tar.gz
gcc-a6b1490d35d7acb3dc5fe785fce116a674092c20.tar.bz2
cgraph.c (symbol_table::create_edge): Use opt_for_fn.
* cgraph.c (symbol_table::create_edge): Use opt_for_fn. (cgraph_node::cannot_return_p): Likewise. (cgraph_edge::cannot_lead_to_return_p): Likewise. (cgraph_edge::maybe_hot_p): Likewise. From-SVN: r217667
Diffstat (limited to 'gcc/cgraph.c')
-rw-r--r--gcc/cgraph.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index ad181b0..cc04744 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -859,7 +859,8 @@ symbol_table::create_edge (cgraph_node *caller, cgraph_node *callee,
edge->indirect_inlining_edge = 0;
edge->speculative = false;
edge->indirect_unknown_callee = indir_unknown_callee;
- if (flag_devirtualize && call_stmt && DECL_STRUCT_FUNCTION (caller->decl))
+ if (opt_for_fn (edge->caller->decl, flag_devirtualize)
+ && call_stmt && DECL_STRUCT_FUNCTION (caller->decl))
edge->in_polymorphic_cdtor
= decl_maybe_in_construction_p (NULL, NULL, call_stmt,
caller->decl);
@@ -2374,7 +2375,7 @@ bool
cgraph_node::cannot_return_p (void)
{
int flags = flags_from_decl_or_type (decl);
- if (!flag_exceptions)
+ if (!opt_for_fn (decl, flag_exceptions))
return (flags & ECF_NORETURN) != 0;
else
return ((flags & (ECF_NORETURN | ECF_NOTHROW))
@@ -2394,7 +2395,7 @@ cgraph_edge::cannot_lead_to_return_p (void)
if (indirect_unknown_callee)
{
int flags = indirect_info->ecf_flags;
- if (!flag_exceptions)
+ if (!opt_for_fn (caller->decl, flag_exceptions))
return (flags & ECF_NORETURN) != 0;
else
return ((flags & (ECF_NORETURN | ECF_NOTHROW))
@@ -2409,7 +2410,9 @@ cgraph_edge::cannot_lead_to_return_p (void)
bool
cgraph_edge::maybe_hot_p (void)
{
- if (profile_info && flag_branch_probabilities
+ /* TODO: Export profile_status from cfun->cfg to cgraph_node. */
+ if (profile_info
+ && opt_for_fn (caller->decl, flag_branch_probabilities)
&& !maybe_hot_count_p (NULL, count))
return false;
if (caller->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED
@@ -2420,17 +2423,18 @@ cgraph_edge::maybe_hot_p (void)
&& (callee
&& callee->frequency <= NODE_FREQUENCY_EXECUTED_ONCE))
return false;
- if (optimize_size) return false;
+ if (opt_for_fn (caller->decl, optimize_size))
+ return false;
if (caller->frequency == NODE_FREQUENCY_HOT)
return true;
if (caller->frequency == NODE_FREQUENCY_EXECUTED_ONCE
&& frequency < CGRAPH_FREQ_BASE * 3 / 2)
return false;
- if (flag_guess_branch_prob)
+ if (opt_for_fn (caller->decl, flag_guess_branch_prob))
{
if (PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION) == 0
|| frequency <= (CGRAPH_FREQ_BASE
- / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION)))
+ / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION)))
return false;
}
return true;