tree-inline.c (estimate_num_insns): For calls simply account for all passed arguments and a used return value.
2011-04-06 Richard Guenther <rguenther@suse.de> * tree-inline.c (estimate_num_insns): For calls simply account for all passed arguments and a used return value. From-SVN: r172024
This commit is contained in:
parent
d7d1d041ae
commit
ff5d142c9e
2 changed files with 10 additions and 47 deletions
|
@ -1,3 +1,8 @@
|
|||
2011-04-06 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* tree-inline.c (estimate_num_insns): For calls simply account
|
||||
for all passed arguments and a used return value.
|
||||
|
||||
2011-04-06 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/47663
|
||||
|
|
|
@ -3470,12 +3470,6 @@ estimate_num_insns (gimple stmt, eni_weights *weights)
|
|||
case GIMPLE_CALL:
|
||||
{
|
||||
tree decl = gimple_call_fndecl (stmt);
|
||||
tree addr = gimple_call_fn (stmt);
|
||||
tree funtype = TREE_TYPE (addr);
|
||||
bool stdarg = false;
|
||||
|
||||
if (POINTER_TYPE_P (funtype))
|
||||
funtype = TREE_TYPE (funtype);
|
||||
|
||||
/* Do not special case builtins where we see the body.
|
||||
This just confuse inliner. */
|
||||
|
@ -3511,49 +3505,13 @@ estimate_num_insns (gimple stmt, eni_weights *weights)
|
|||
}
|
||||
|
||||
cost = weights->call_cost;
|
||||
if (decl)
|
||||
funtype = TREE_TYPE (decl);
|
||||
|
||||
if (!VOID_TYPE_P (TREE_TYPE (funtype))
|
||||
&& gimple_call_lhs (stmt))
|
||||
cost += estimate_move_cost (TREE_TYPE (funtype));
|
||||
|
||||
if (funtype)
|
||||
stdarg = stdarg_p (funtype);
|
||||
|
||||
/* Our cost must be kept in sync with
|
||||
cgraph_estimate_size_after_inlining that does use function
|
||||
declaration to figure out the arguments.
|
||||
|
||||
For functions taking variable list of arguments we must
|
||||
look into call statement intself. This is safe because
|
||||
we will get only higher costs and in most cases we will
|
||||
not inline these anyway. */
|
||||
if (decl && DECL_ARGUMENTS (decl) && !stdarg)
|
||||
if (gimple_call_lhs (stmt))
|
||||
cost += estimate_move_cost (TREE_TYPE (gimple_call_lhs (stmt)));
|
||||
for (i = 0; i < gimple_call_num_args (stmt); i++)
|
||||
{
|
||||
tree arg;
|
||||
for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
|
||||
if (!VOID_TYPE_P (TREE_TYPE (arg)))
|
||||
cost += estimate_move_cost (TREE_TYPE (arg));
|
||||
tree arg = gimple_call_arg (stmt, i);
|
||||
cost += estimate_move_cost (TREE_TYPE (arg));
|
||||
}
|
||||
else if (funtype && prototype_p (funtype) && !stdarg)
|
||||
{
|
||||
tree t;
|
||||
for (t = TYPE_ARG_TYPES (funtype); t && t != void_list_node;
|
||||
t = TREE_CHAIN (t))
|
||||
if (!VOID_TYPE_P (TREE_VALUE (t)))
|
||||
cost += estimate_move_cost (TREE_VALUE (t));
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < gimple_call_num_args (stmt); i++)
|
||||
{
|
||||
tree arg = gimple_call_arg (stmt, i);
|
||||
if (!VOID_TYPE_P (TREE_TYPE (arg)))
|
||||
cost += estimate_move_cost (TREE_TYPE (arg));
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue