Commit c12d9242 by Richard Biener Committed by Richard Biener

gimple.h (gimple_store_p): New predicate.

2012-10-30  Richard Biener  <rguenther@suse.de>

	* gimple.h (gimple_store_p): New predicate.
	(gimple_assign_load_p): Likewise.
	* tree-inline.c (estimate_num_insns): Use it.

	* gcc.dg/vect/slp-perm-2.c: Adjust.

From-SVN: r192987
parent 2e2e628b
2012-10-30 Richard Biener <rguenther@suse.de>
* gimple.h (gimple_store_p): New predicate.
(gimple_assign_load_p): Likewise.
* tree-inline.c (estimate_num_insns): Use it.
2012-10-30 Marc Glisse <marc.glisse@inria.fr> 2012-10-30 Marc Glisse <marc.glisse@inria.fr>
* fold-const.c (fold_binary_op_with_conditional_arg): Handle vectors. * fold-const.c (fold_binary_op_with_conditional_arg): Handle vectors.
...@@ -2041,6 +2041,31 @@ gimple_assign_single_p (gimple gs) ...@@ -2041,6 +2041,31 @@ gimple_assign_single_p (gimple gs)
&& gimple_assign_rhs_class (gs) == GIMPLE_SINGLE_RHS); && gimple_assign_rhs_class (gs) == GIMPLE_SINGLE_RHS);
} }
/* Return true if GS performs a store to its lhs. */
static inline bool
gimple_store_p (gimple gs)
{
tree lhs = gimple_get_lhs (gs);
return lhs && !is_gimple_reg (lhs);
}
/* Return true if GS is an assignment that loads from its rhs1. */
static inline bool
gimple_assign_load_p (gimple gs)
{
tree rhs;
if (!gimple_assign_single_p (gs))
return false;
rhs = gimple_assign_rhs1 (gs);
if (TREE_CODE (rhs) == WITH_SIZE_EXPR)
return true;
rhs = get_base_address (rhs);
return (DECL_P (rhs)
|| TREE_CODE (rhs) == MEM_REF || TREE_CODE (rhs) == TARGET_MEM_REF);
}
/* Return true if S is a type-cast assignment. */ /* Return true if S is a type-cast assignment. */
......
2012-10-30 Richard Biener <rguenther@suse.de> 2012-10-30 Richard Biener <rguenther@suse.de>
* gcc.dg/vect/slp-perm-2.c: Adjust.
2012-10-30 Richard Biener <rguenther@suse.de>
PR tree-optimization/55111 PR tree-optimization/55111
* gcc.dg/torture/pr55111.c: New testcase. * gcc.dg/torture/pr55111.c: New testcase.
......
...@@ -12,7 +12,8 @@ ...@@ -12,7 +12,8 @@
#define N 16 #define N 16
void foo (unsigned int *__restrict__ pInput, unsigned int *__restrict__ pOutput) void __attribute__((noinline))
foo (unsigned int *__restrict__ pInput, unsigned int *__restrict__ pOutput)
{ {
unsigned int i, a, b; unsigned int i, a, b;
......
...@@ -3512,12 +3512,12 @@ estimate_num_insns (gimple stmt, eni_weights *weights) ...@@ -3512,12 +3512,12 @@ estimate_num_insns (gimple stmt, eni_weights *weights)
lhs = gimple_assign_lhs (stmt); lhs = gimple_assign_lhs (stmt);
rhs = gimple_assign_rhs1 (stmt); rhs = gimple_assign_rhs1 (stmt);
if (is_gimple_reg (lhs)) cost = 0;
cost = 0;
else
cost = estimate_move_cost (TREE_TYPE (lhs));
if (!is_gimple_reg (rhs) && !is_gimple_min_invariant (rhs)) /* Account for the cost of moving to / from memory. */
if (gimple_store_p (stmt))
cost += estimate_move_cost (TREE_TYPE (lhs));
if (gimple_assign_load_p (stmt))
cost += estimate_move_cost (TREE_TYPE (rhs)); cost += estimate_move_cost (TREE_TYPE (rhs));
cost += estimate_operator_cost (gimple_assign_rhs_code (stmt), weights, cost += estimate_operator_cost (gimple_assign_rhs_code (stmt), 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