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
This commit is contained in:
Jan Hubicka 2014-12-16 23:16:17 +01:00 committed by Jan Hubicka
parent 8c7d662b9a
commit 061ddf67f7
2 changed files with 17 additions and 8 deletions

View File

@ -1,3 +1,9 @@
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 ...

View File

@ -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;