+2014-07-24 Richard Biener <rguenther@suse.de>
+
+ * tree-inline.h (estimate_move_cost): Add speed_p parameter.
+ * tree-inline.c (estimate_move_cost): Add speed_p parameter
+ and adjust MOVE_RATIO query accordingly.
+ (estimate_num_insns): Adjust callers.
+ * ipa-prop.c (ipa_populate_param_decls): Likewise.
+ * ipa-cp.c (gather_context_independent_values,
+ estimate_local_effects): Likewise.
+ * ipa-split.c (consider_split): Likewise.
+
2014-07-24 Trevor Saunders <tsaunders@mozilla.com>
* config/i386/driver-i386.c: Remove names of unused arguments and
(*known_csts)[i] = val->value;
if (removable_params_cost)
*removable_params_cost
- += estimate_move_cost (TREE_TYPE (val->value));
+ += estimate_move_cost (TREE_TYPE (val->value), false);
ret = true;
}
else if (plats->virt_call)
{
known_csts[i] = val->value;
known_binfos[i] = NULL_TREE;
- emc = estimate_move_cost (TREE_TYPE (val->value));
+ emc = estimate_move_cost (TREE_TYPE (val->value), true);
}
else if (plats->virt_call)
{
for (parm = fnargs; parm; parm = DECL_CHAIN (parm))
{
descriptors[param_num].decl = parm;
- descriptors[param_num].move_cost = estimate_move_cost (TREE_TYPE (parm));
+ descriptors[param_num].move_cost = estimate_move_cost (TREE_TYPE (parm),
+ true);
param_num++;
}
}
SSA_NAME_VERSION (ddef)))
{
if (!VOID_TYPE_P (TREE_TYPE (parm)))
- call_overhead += estimate_move_cost (TREE_TYPE (parm));
+ call_overhead += estimate_move_cost (TREE_TYPE (parm), false);
num_args++;
}
}
}
if (!VOID_TYPE_P (TREE_TYPE (current_function_decl)))
- call_overhead += estimate_move_cost (TREE_TYPE (current_function_decl));
+ call_overhead += estimate_move_cost (TREE_TYPE (current_function_decl),
+ false);
if (current->split_size <= call_overhead)
{
return inlinable;
}
-/* Estimate the cost of a memory move. Use machine dependent
- word size and take possible memcpy call into account. */
+/* Estimate the cost of a memory move of type TYPE. Use machine dependent
+ word size and take possible memcpy call into account and return
+ cost based on whether optimizing for size or speed according to SPEED_P. */
int
-estimate_move_cost (tree type)
+estimate_move_cost (tree type, bool speed_p)
{
HOST_WIDE_INT size;
size = int_size_in_bytes (type);
- if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO (!optimize_size))
+ if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO (speed_p))
/* Cost of a memcpy call, 3 arguments and the call. */
return 4;
else
/* Account for the cost of moving to / from memory. */
if (gimple_store_p (stmt))
- cost += estimate_move_cost (TREE_TYPE (lhs));
+ cost += estimate_move_cost (TREE_TYPE (lhs), weights->time_based);
if (gimple_assign_load_p (stmt))
- cost += estimate_move_cost (TREE_TYPE (rhs));
+ cost += estimate_move_cost (TREE_TYPE (rhs), weights->time_based);
cost += estimate_operator_cost (gimple_assign_rhs_code (stmt), weights,
gimple_assign_rhs1 (stmt),
cost = decl ? weights->call_cost : weights->indirect_call_cost;
if (gimple_call_lhs (stmt))
- cost += estimate_move_cost (TREE_TYPE (gimple_call_lhs (stmt)));
+ cost += estimate_move_cost (TREE_TYPE (gimple_call_lhs (stmt)),
+ weights->time_based);
for (i = 0; i < gimple_call_num_args (stmt); i++)
{
tree arg = gimple_call_arg (stmt, i);
- cost += estimate_move_cost (TREE_TYPE (arg));
+ cost += estimate_move_cost (TREE_TYPE (arg),
+ weights->time_based);
}
break;
}
bool tree_inlinable_function_p (tree);
tree copy_tree_r (tree *, int *, void *);
tree copy_decl_no_change (tree decl, copy_body_data *id);
-int estimate_move_cost (tree type);
+int estimate_move_cost (tree type, bool);
int estimate_num_insns (gimple, eni_weights *);
int estimate_num_insns_fn (tree, eni_weights *);
int count_insns_seq (gimple_seq, eni_weights *);