diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2014-12-16 23:16:17 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2014-12-16 22:16:17 +0000 |
commit | 061ddf67f7bb299e3eff9ea5cc96d12668ea8f56 (patch) | |
tree | b7bf593dc9aaae190f0a6bc84296f3a61d79e92c /gcc | |
parent | 8c7d662b9a526b84415f263e029dea0a5b12401a (diff) | |
download | gcc-061ddf67f7bb299e3eff9ea5cc96d12668ea8f56.zip gcc-061ddf67f7bb299e3eff9ea5cc96d12668ea8f56.tar.gz gcc-061ddf67f7bb299e3eff9ea5cc96d12668ea8f56.tar.bz2 |
ipa-inline-analysis.c (will_be_nonconstant_predicate): Consider return values of const calls as constants.
* ipa-inline-analysis.c (will_be_nonconstant_predicate): Consider
return values of const calls as constants.
(estimate_function_body_sizes): Expect calls to have false predicates.
From-SVN: r218796
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ipa-inline-analysis.c | 19 |
2 files changed, 17 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b8009b18..da10096 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2014-12-16 Jan Hubicka <hubicka@ucw.cz> + * ipa-inline-analysis.c (will_be_nonconstant_predicate): Consider + return values of const calls as constants. + (estimate_function_body_sizes): Expect calls to have false predicates. + +2014-12-16 Jan Hubicka <hubicka@ucw.cz> + * hwint.c (abs_hwi, absu_hwi): Move to ... * hwint.h (abs_hwi, absu_hwi): ... here; make inline. diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c index fb4e81e..3b622f2 100644 --- a/gcc/ipa-inline-analysis.c +++ b/gcc/ipa-inline-analysis.c @@ -2036,12 +2036,12 @@ will_be_nonconstant_predicate (struct ipa_node_params *info, struct agg_position_info aggpos; /* What statments might be optimized away - when their arguments are constant - TODO: also trivial builtins. - builtin_constant_p is already handled later. */ + when their arguments are constant. */ if (gimple_code (stmt) != GIMPLE_ASSIGN && gimple_code (stmt) != GIMPLE_COND - && gimple_code (stmt) != GIMPLE_SWITCH) + && gimple_code (stmt) != GIMPLE_SWITCH + && (gimple_code (stmt) != GIMPLE_CALL + || !(gimple_call_flags (stmt) & ECF_CONST))) return p; /* Stores will stay anyway. */ @@ -2101,9 +2101,10 @@ will_be_nonconstant_predicate (struct ipa_node_params *info, p = nonconstant_names[SSA_NAME_VERSION (use)]; op_non_const = or_predicates (summary->conds, &p, &op_non_const); } - if (gimple_code (stmt) == GIMPLE_ASSIGN - && TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME) - nonconstant_names[SSA_NAME_VERSION (gimple_assign_lhs (stmt))] + if ((gimple_code (stmt) == GIMPLE_ASSIGN || gimple_code (stmt) == GIMPLE_CALL) + && gimple_op (stmt, 0) + && TREE_CODE (gimple_op (stmt, 0)) == SSA_NAME) + nonconstant_names[SSA_NAME_VERSION (gimple_op (stmt, 0))] = op_non_const; return op_non_const; } @@ -2683,7 +2684,9 @@ estimate_function_body_sizes (struct cgraph_node *node, bool early) else p = true_predicate (); - if (!false_predicate_p (&p)) + if (!false_predicate_p (&p) + || (is_gimple_call (stmt) + && !false_predicate_p (&bb_predicate))) { time += this_time; size += this_size; |