Commit b4c9af96 by Richard Biener Committed by Richard Biener

tree-inline.h (estimate_move_cost): Add speed_p parameter.

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.

From-SVN: r212970
parent 997ef9e7
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> 2014-07-24 Trevor Saunders <tsaunders@mozilla.com>
* config/i386/driver-i386.c: Remove names of unused arguments and * config/i386/driver-i386.c: Remove names of unused arguments and
......
...@@ -1845,7 +1845,7 @@ gather_context_independent_values (struct ipa_node_params *info, ...@@ -1845,7 +1845,7 @@ gather_context_independent_values (struct ipa_node_params *info,
(*known_csts)[i] = val->value; (*known_csts)[i] = val->value;
if (removable_params_cost) if (removable_params_cost)
*removable_params_cost *removable_params_cost
+= estimate_move_cost (TREE_TYPE (val->value)); += estimate_move_cost (TREE_TYPE (val->value), false);
ret = true; ret = true;
} }
else if (plats->virt_call) else if (plats->virt_call)
...@@ -1997,7 +1997,7 @@ estimate_local_effects (struct cgraph_node *node) ...@@ -1997,7 +1997,7 @@ estimate_local_effects (struct cgraph_node *node)
{ {
known_csts[i] = val->value; known_csts[i] = val->value;
known_binfos[i] = NULL_TREE; 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) else if (plats->virt_call)
{ {
......
...@@ -204,7 +204,8 @@ ipa_populate_param_decls (struct cgraph_node *node, ...@@ -204,7 +204,8 @@ ipa_populate_param_decls (struct cgraph_node *node,
for (parm = fnargs; parm; parm = DECL_CHAIN (parm)) for (parm = fnargs; parm; parm = DECL_CHAIN (parm))
{ {
descriptors[param_num].decl = 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++; param_num++;
} }
} }
......
...@@ -488,13 +488,14 @@ consider_split (struct split_point *current, bitmap non_ssa_vars, ...@@ -488,13 +488,14 @@ consider_split (struct split_point *current, bitmap non_ssa_vars,
SSA_NAME_VERSION (ddef))) SSA_NAME_VERSION (ddef)))
{ {
if (!VOID_TYPE_P (TREE_TYPE (parm))) 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++; num_args++;
} }
} }
} }
if (!VOID_TYPE_P (TREE_TYPE (current_function_decl))) 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) if (current->split_size <= call_overhead)
{ {
......
...@@ -3623,11 +3623,12 @@ tree_inlinable_function_p (tree fn) ...@@ -3623,11 +3623,12 @@ tree_inlinable_function_p (tree fn)
return inlinable; return inlinable;
} }
/* Estimate the cost of a memory move. Use machine dependent /* Estimate the cost of a memory move of type TYPE. Use machine dependent
word size and take possible memcpy call into account. */ 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 int
estimate_move_cost (tree type) estimate_move_cost (tree type, bool speed_p)
{ {
HOST_WIDE_INT size; HOST_WIDE_INT size;
...@@ -3645,7 +3646,7 @@ estimate_move_cost (tree type) ...@@ -3645,7 +3646,7 @@ estimate_move_cost (tree type)
size = int_size_in_bytes (type); 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. */ /* Cost of a memcpy call, 3 arguments and the call. */
return 4; return 4;
else else
...@@ -3847,9 +3848,9 @@ estimate_num_insns (gimple stmt, eni_weights *weights) ...@@ -3847,9 +3848,9 @@ estimate_num_insns (gimple stmt, eni_weights *weights)
/* Account for the cost of moving to / from memory. */ /* Account for the cost of moving to / from memory. */
if (gimple_store_p (stmt)) 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)) 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, cost += estimate_operator_cost (gimple_assign_rhs_code (stmt), weights,
gimple_assign_rhs1 (stmt), gimple_assign_rhs1 (stmt),
...@@ -3923,11 +3924,13 @@ estimate_num_insns (gimple stmt, eni_weights *weights) ...@@ -3923,11 +3924,13 @@ estimate_num_insns (gimple stmt, eni_weights *weights)
cost = decl ? weights->call_cost : weights->indirect_call_cost; cost = decl ? weights->call_cost : weights->indirect_call_cost;
if (gimple_call_lhs (stmt)) 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++) for (i = 0; i < gimple_call_num_args (stmt); i++)
{ {
tree arg = gimple_call_arg (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; break;
} }
......
...@@ -191,7 +191,7 @@ tree maybe_inline_call_in_expr (tree); ...@@ -191,7 +191,7 @@ tree maybe_inline_call_in_expr (tree);
bool tree_inlinable_function_p (tree); bool tree_inlinable_function_p (tree);
tree copy_tree_r (tree *, int *, void *); tree copy_tree_r (tree *, int *, void *);
tree copy_decl_no_change (tree decl, copy_body_data *id); 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 (gimple, eni_weights *);
int estimate_num_insns_fn (tree, eni_weights *); int estimate_num_insns_fn (tree, eni_weights *);
int count_insns_seq (gimple_seq, eni_weights *); int count_insns_seq (gimple_seq, eni_weights *);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment