Commit 81c40241 by Richard Biener Committed by Richard Biener

tree-vectorizer.h (vect_is_simple_use): Remove unused parameters.

2015-10-14  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (vect_is_simple_use): Remove unused parameters.
	(vect_is_simple_use_1): Likewise.  Make overload of vect_is_simple_use.
	(vect_get_vec_def_for_operand): Remove unused parameter.
	* tree-vect-loop.c (get_initial_def_for_induction): Adjust.
	(vect_create_epilog_for_reduction): Likewise.
	(vectorizable_reduction): Likewise.
	(vectorizable_live_operation): Likewise.
	* tree-vect-patterns.c (type_conversion_p): Likewise.
	(vect_recog_vector_vector_shift_pattern): Likewise.
	(check_bool_pattern): Likewise.
	* tree-vect-slp.c (vect_get_and_check_slp_defs): Likewise.
	(vect_analyze_slp_cost_1): Likewise.
	* tree-vect-stmts.c (process_use): Likewise.
	(vect_get_vec_def_for_operand): Do not handle reductions.
	(vect_get_vec_defs): Adjust.
	(vectorizable_mask_load_store): Likewise.
	(vectorizable_call): Likewise.
	(vectorizable_simd_clone_call): Likewise.
	(vect_get_loop_based_defs): Likewise.
	(vectorizable_conversion): Likewise.
	(vectorizable_assignment): Likewise.
	(vectorizable_shift): Likewise.
	(vectorizable_operation): Likewise.
	(vectorizable_store): Likewise.
	(vectorizable_load): Likewise.
	(vect_is_simple_cond): Likewise.
	(vectorizable_condition): Likewise.
	(vect_is_simple_use): Remove unused parameters.
	(vect_is_simple_use_1): Adjust and rename.

From-SVN: r228811
parent c3bea076
2015-10-14 Richard Biener <rguenther@suse.de> 2015-10-14 Richard Biener <rguenther@suse.de>
* tree-vectorizer.h (vect_is_simple_use): Remove unused parameters.
(vect_is_simple_use_1): Likewise. Make overload of vect_is_simple_use.
(vect_get_vec_def_for_operand): Remove unused parameter.
* tree-vect-loop.c (get_initial_def_for_induction): Adjust.
(vect_create_epilog_for_reduction): Likewise.
(vectorizable_reduction): Likewise.
(vectorizable_live_operation): Likewise.
* tree-vect-patterns.c (type_conversion_p): Likewise.
(vect_recog_vector_vector_shift_pattern): Likewise.
(check_bool_pattern): Likewise.
* tree-vect-slp.c (vect_get_and_check_slp_defs): Likewise.
(vect_analyze_slp_cost_1): Likewise.
* tree-vect-stmts.c (process_use): Likewise.
(vect_get_vec_def_for_operand): Do not handle reductions.
(vect_get_vec_defs): Adjust.
(vectorizable_mask_load_store): Likewise.
(vectorizable_call): Likewise.
(vectorizable_simd_clone_call): Likewise.
(vect_get_loop_based_defs): Likewise.
(vectorizable_conversion): Likewise.
(vectorizable_assignment): Likewise.
(vectorizable_shift): Likewise.
(vectorizable_operation): Likewise.
(vectorizable_store): Likewise.
(vectorizable_load): Likewise.
(vect_is_simple_cond): Likewise.
(vectorizable_condition): Likewise.
(vect_is_simple_use): Remove unused parameters.
(vect_is_simple_use_1): Adjust and rename.
2015-10-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/67915 PR tree-optimization/67915
* match.pd: Handle comparisons of addresses of STRING_CSTs. * match.pd: Handle comparisons of addresses of STRING_CSTs.
* gimplify.c (gimplify_cond_expr): Fold the GIMPLE conds we build. * gimplify.c (gimplify_cond_expr): Fold the GIMPLE conds we build.
...@@ -3412,7 +3412,7 @@ get_initial_def_for_induction (gimple *iv_phi) ...@@ -3412,7 +3412,7 @@ get_initial_def_for_induction (gimple *iv_phi)
/* iv_loop is nested in the loop to be vectorized. init_expr had already /* iv_loop is nested in the loop to be vectorized. init_expr had already
been created during vectorization of previous stmts. We obtain it been created during vectorization of previous stmts. We obtain it
from the STMT_VINFO_VEC_STMT of the defining stmt. */ from the STMT_VINFO_VEC_STMT of the defining stmt. */
vec_init = vect_get_vec_def_for_operand (init_expr, iv_phi, NULL); vec_init = vect_get_vec_def_for_operand (init_expr, iv_phi);
/* If the initial value is not of proper type, convert it. */ /* If the initial value is not of proper type, convert it. */
if (!useless_type_conversion_p (vectype, TREE_TYPE (vec_init))) if (!useless_type_conversion_p (vectype, TREE_TYPE (vec_init)))
{ {
...@@ -3798,8 +3798,7 @@ get_initial_def_for_reduction (gimple *stmt, tree init_val, ...@@ -3798,8 +3798,7 @@ get_initial_def_for_reduction (gimple *stmt, tree init_val,
if (adjustment_def) if (adjustment_def)
{ {
if (nested_in_vect_loop) if (nested_in_vect_loop)
*adjustment_def = vect_get_vec_def_for_operand (init_val, stmt, *adjustment_def = vect_get_vec_def_for_operand (init_val, stmt);
NULL);
else else
*adjustment_def = init_val; *adjustment_def = init_val;
} }
...@@ -3853,7 +3852,7 @@ get_initial_def_for_reduction (gimple *stmt, tree init_val, ...@@ -3853,7 +3852,7 @@ get_initial_def_for_reduction (gimple *stmt, tree init_val,
if (adjustment_def) if (adjustment_def)
{ {
*adjustment_def = NULL_TREE; *adjustment_def = NULL_TREE;
init_def = vect_get_vec_def_for_operand (init_val, stmt, NULL); init_def = vect_get_vec_def_for_operand (init_val, stmt);
break; break;
} }
...@@ -4012,12 +4011,13 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs, gimple *stmt, ...@@ -4012,12 +4011,13 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs, gimple *stmt,
NULL, slp_node, reduc_index); NULL, slp_node, reduc_index);
else else
{ {
/* Get at the scalar def before the loop, that defines the initial value
of the reduction variable. */
gimple *def_stmt = SSA_NAME_DEF_STMT (reduction_op);
tree op = PHI_ARG_DEF_FROM_EDGE (def_stmt, loop_preheader_edge (loop));
vec_initial_defs.create (1); vec_initial_defs.create (1);
/* For the case of reduction, vect_get_vec_def_for_operand returns vec_initial_def = get_initial_def_for_reduction (stmt, op,
the scalar def before the loop, that defines the initial value &adjustment_def);
of the reduction variable. */
vec_initial_def = vect_get_vec_def_for_operand (reduction_op, stmt,
&adjustment_def);
vec_initial_defs.quick_push (vec_initial_def); vec_initial_defs.quick_push (vec_initial_def);
} }
...@@ -4800,7 +4800,6 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi, ...@@ -4800,7 +4800,6 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi,
int op_type; int op_type;
optab optab, reduc_optab; optab optab, reduc_optab;
tree new_temp = NULL_TREE; tree new_temp = NULL_TREE;
tree def;
gimple *def_stmt; gimple *def_stmt;
enum vect_def_type dt; enum vect_def_type dt;
gphi *new_phi = NULL; gphi *new_phi = NULL;
...@@ -4956,8 +4955,8 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi, ...@@ -4956,8 +4955,8 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi,
if (i == 0 && code == COND_EXPR) if (i == 0 && code == COND_EXPR)
continue; continue;
is_simple_use = vect_is_simple_use_1 (ops[i], stmt, loop_vinfo, is_simple_use = vect_is_simple_use (ops[i], loop_vinfo,
&def_stmt, &def, &dt, &tem); &def_stmt, &dt, &tem);
if (!vectype_in) if (!vectype_in)
vectype_in = tem; vectype_in = tem;
gcc_assert (is_simple_use); gcc_assert (is_simple_use);
...@@ -4977,8 +4976,7 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi, ...@@ -4977,8 +4976,7 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi,
} }
} }
is_simple_use = vect_is_simple_use_1 (ops[i], stmt, loop_vinfo, is_simple_use = vect_is_simple_use (ops[i], loop_vinfo, &def_stmt, &dt, &tem);
&def_stmt, &def, &dt, &tem);
if (!vectype_in) if (!vectype_in)
vectype_in = tem; vectype_in = tem;
gcc_assert (is_simple_use); gcc_assert (is_simple_use);
...@@ -5340,12 +5338,11 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi, ...@@ -5340,12 +5338,11 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi,
else else
{ {
loop_vec_def0 = vect_get_vec_def_for_operand (ops[!reduc_index], loop_vec_def0 = vect_get_vec_def_for_operand (ops[!reduc_index],
stmt, NULL); stmt);
vec_oprnds0.quick_push (loop_vec_def0); vec_oprnds0.quick_push (loop_vec_def0);
if (op_type == ternary_op) if (op_type == ternary_op)
{ {
loop_vec_def1 = vect_get_vec_def_for_operand (op1, stmt, loop_vec_def1 = vect_get_vec_def_for_operand (op1, stmt);
NULL);
vec_oprnds1.quick_push (loop_vec_def1); vec_oprnds1.quick_push (loop_vec_def1);
} }
} }
...@@ -5356,17 +5353,15 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi, ...@@ -5356,17 +5353,15 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi,
{ {
enum vect_def_type dt; enum vect_def_type dt;
gimple *dummy_stmt; gimple *dummy_stmt;
tree dummy;
vect_is_simple_use (ops[!reduc_index], stmt, loop_vinfo, vect_is_simple_use (ops[!reduc_index], loop_vinfo,
&dummy_stmt, &dummy, &dt); &dummy_stmt, &dt);
loop_vec_def0 = vect_get_vec_def_for_stmt_copy (dt, loop_vec_def0 = vect_get_vec_def_for_stmt_copy (dt,
loop_vec_def0); loop_vec_def0);
vec_oprnds0[0] = loop_vec_def0; vec_oprnds0[0] = loop_vec_def0;
if (op_type == ternary_op) if (op_type == ternary_op)
{ {
vect_is_simple_use (op1, stmt, loop_vinfo, &dummy_stmt, vect_is_simple_use (op1, loop_vinfo, &dummy_stmt, &dt);
&dummy, &dt);
loop_vec_def1 = vect_get_vec_def_for_stmt_copy (dt, loop_vec_def1 = vect_get_vec_def_for_stmt_copy (dt,
loop_vec_def1); loop_vec_def1);
vec_oprnds1[0] = loop_vec_def1; vec_oprnds1[0] = loop_vec_def1;
...@@ -5595,7 +5590,6 @@ vectorizable_live_operation (gimple *stmt, ...@@ -5595,7 +5590,6 @@ vectorizable_live_operation (gimple *stmt,
int i; int i;
int op_type; int op_type;
tree op; tree op;
tree def;
gimple *def_stmt; gimple *def_stmt;
enum vect_def_type dt; enum vect_def_type dt;
enum tree_code code; enum tree_code code;
...@@ -5667,7 +5661,7 @@ vectorizable_live_operation (gimple *stmt, ...@@ -5667,7 +5661,7 @@ vectorizable_live_operation (gimple *stmt,
else else
op = gimple_op (stmt, i + 1); op = gimple_op (stmt, i + 1);
if (op if (op
&& !vect_is_simple_use (op, stmt, loop_vinfo, &def_stmt, &def, &dt)) && !vect_is_simple_use (op, loop_vinfo, &def_stmt, &dt))
{ {
if (dump_enabled_p ()) if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
......
...@@ -169,17 +169,14 @@ static bool ...@@ -169,17 +169,14 @@ static bool
type_conversion_p (tree name, gimple *use_stmt, bool check_sign, type_conversion_p (tree name, gimple *use_stmt, bool check_sign,
tree *orig_type, gimple **def_stmt, bool *promotion) tree *orig_type, gimple **def_stmt, bool *promotion)
{ {
tree dummy;
gimple *dummy_gimple; gimple *dummy_gimple;
stmt_vec_info stmt_vinfo; stmt_vec_info stmt_vinfo;
tree type = TREE_TYPE (name); tree type = TREE_TYPE (name);
tree oprnd0; tree oprnd0;
enum vect_def_type dt; enum vect_def_type dt;
tree def;
stmt_vinfo = vinfo_for_stmt (use_stmt); stmt_vinfo = vinfo_for_stmt (use_stmt);
if (!vect_is_simple_use (name, use_stmt, stmt_vinfo->vinfo, def_stmt, if (!vect_is_simple_use (name, stmt_vinfo->vinfo, def_stmt, &dt))
&def, &dt))
return false; return false;
if (dt != vect_internal_def if (dt != vect_internal_def
...@@ -207,8 +204,7 @@ type_conversion_p (tree name, gimple *use_stmt, bool check_sign, ...@@ -207,8 +204,7 @@ type_conversion_p (tree name, gimple *use_stmt, bool check_sign,
else else
*promotion = false; *promotion = false;
if (!vect_is_simple_use (oprnd0, *def_stmt, stmt_vinfo->vinfo, if (!vect_is_simple_use (oprnd0, stmt_vinfo->vinfo, &dummy_gimple, &dt))
&dummy_gimple, &dummy, &dt))
return false; return false;
return true; return true;
...@@ -1830,7 +1826,7 @@ vect_recog_rotate_pattern (vec<gimple *> *stmts, tree *type_in, tree *type_out) ...@@ -1830,7 +1826,7 @@ vect_recog_rotate_pattern (vec<gimple *> *stmts, tree *type_in, tree *type_out)
|| !TYPE_UNSIGNED (type)) || !TYPE_UNSIGNED (type))
return NULL; return NULL;
if (!vect_is_simple_use (oprnd1, last_stmt, vinfo, &def_stmt, &def, &dt)) if (!vect_is_simple_use (oprnd1, vinfo, &def_stmt, &dt))
return NULL; return NULL;
if (dt != vect_internal_def if (dt != vect_internal_def
...@@ -2058,7 +2054,6 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts, ...@@ -2058,7 +2054,6 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts,
stmt_vec_info stmt_vinfo = vinfo_for_stmt (last_stmt); stmt_vec_info stmt_vinfo = vinfo_for_stmt (last_stmt);
vec_info *vinfo = stmt_vinfo->vinfo; vec_info *vinfo = stmt_vinfo->vinfo;
enum vect_def_type dt; enum vect_def_type dt;
tree def;
if (!is_gimple_assign (last_stmt)) if (!is_gimple_assign (last_stmt))
return NULL; return NULL;
...@@ -2090,8 +2085,7 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts, ...@@ -2090,8 +2085,7 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts,
!= TYPE_PRECISION (TREE_TYPE (oprnd0))) != TYPE_PRECISION (TREE_TYPE (oprnd0)))
return NULL; return NULL;
if (!vect_is_simple_use (oprnd1, last_stmt, vinfo, &def_stmt, if (!vect_is_simple_use (oprnd1, vinfo, &def_stmt, &dt))
&def, &dt))
return NULL; return NULL;
if (dt != vect_internal_def) if (dt != vect_internal_def)
...@@ -2102,7 +2096,7 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts, ...@@ -2102,7 +2096,7 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts,
if (*type_in == NULL_TREE) if (*type_in == NULL_TREE)
return NULL; return NULL;
def = NULL_TREE; tree def = NULL_TREE;
if (gimple_assign_cast_p (def_stmt)) if (gimple_assign_cast_p (def_stmt))
{ {
tree rhs1 = gimple_assign_rhs1 (def_stmt); tree rhs1 = gimple_assign_rhs1 (def_stmt);
...@@ -2892,11 +2886,10 @@ check_bool_pattern (tree var, vec_info *vinfo) ...@@ -2892,11 +2886,10 @@ check_bool_pattern (tree var, vec_info *vinfo)
{ {
gimple *def_stmt; gimple *def_stmt;
enum vect_def_type dt; enum vect_def_type dt;
tree def, rhs1; tree rhs1;
enum tree_code rhs_code; enum tree_code rhs_code;
if (!vect_is_simple_use (var, NULL, vinfo, &def_stmt, &def, if (!vect_is_simple_use (var, vinfo, &def_stmt, &dt))
&dt))
return false; return false;
if (dt != vect_internal_def) if (dt != vect_internal_def)
...@@ -2905,7 +2898,7 @@ check_bool_pattern (tree var, vec_info *vinfo) ...@@ -2905,7 +2898,7 @@ check_bool_pattern (tree var, vec_info *vinfo)
if (!is_gimple_assign (def_stmt)) if (!is_gimple_assign (def_stmt))
return false; return false;
if (!has_single_use (def)) if (!has_single_use (var))
return false; return false;
rhs1 = gimple_assign_rhs1 (def_stmt); rhs1 = gimple_assign_rhs1 (def_stmt);
......
...@@ -234,7 +234,6 @@ vect_get_and_check_slp_defs (vec_info *vinfo, ...@@ -234,7 +234,6 @@ vect_get_and_check_slp_defs (vec_info *vinfo,
{ {
tree oprnd; tree oprnd;
unsigned int i, number_of_oprnds; unsigned int i, number_of_oprnds;
tree def;
gimple *def_stmt; gimple *def_stmt;
enum vect_def_type dt = vect_uninitialized_def; enum vect_def_type dt = vect_uninitialized_def;
struct loop *loop = NULL; struct loop *loop = NULL;
...@@ -287,8 +286,7 @@ again: ...@@ -287,8 +286,7 @@ again:
oprnd_info = (*oprnds_info)[i]; oprnd_info = (*oprnds_info)[i];
if (!vect_is_simple_use (oprnd, NULL, vinfo, &def_stmt, if (!vect_is_simple_use (oprnd, vinfo, &def_stmt, &dt))
&def, &dt))
{ {
if (dump_enabled_p ()) if (dump_enabled_p ())
{ {
...@@ -355,19 +353,15 @@ again: ...@@ -355,19 +353,15 @@ again:
switch (gimple_code (def_stmt)) switch (gimple_code (def_stmt))
{ {
case GIMPLE_PHI: case GIMPLE_PHI:
def = gimple_phi_result (def_stmt); case GIMPLE_ASSIGN:
break; break;
case GIMPLE_ASSIGN: default:
def = gimple_assign_lhs (def_stmt); if (dump_enabled_p ())
break; dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"unsupported defining stmt:\n");
default: return -1;
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"unsupported defining stmt:\n");
return -1;
} }
} }
...@@ -432,7 +426,7 @@ again: ...@@ -432,7 +426,7 @@ again:
{ {
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"Build SLP failed: illegal type of def "); "Build SLP failed: illegal type of def ");
dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM, def); dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM, oprnd);
dump_printf (MSG_MISSED_OPTIMIZATION, "\n"); dump_printf (MSG_MISSED_OPTIMIZATION, "\n");
} }
...@@ -1555,12 +1549,12 @@ vect_analyze_slp_cost_1 (slp_instance instance, slp_tree node, ...@@ -1555,12 +1549,12 @@ vect_analyze_slp_cost_1 (slp_instance instance, slp_tree node,
lhs = gimple_get_lhs (stmt); lhs = gimple_get_lhs (stmt);
for (i = 0; i < gimple_num_ops (stmt); ++i) for (i = 0; i < gimple_num_ops (stmt); ++i)
{ {
tree def, op = gimple_op (stmt, i); tree op = gimple_op (stmt, i);
gimple *def_stmt; gimple *def_stmt;
enum vect_def_type dt; enum vect_def_type dt;
if (!op || op == lhs) if (!op || op == lhs)
continue; continue;
if (vect_is_simple_use (op, NULL, stmt_info->vinfo, &def_stmt, &def, &dt)) if (vect_is_simple_use (op, stmt_info->vinfo, &def_stmt, &dt))
{ {
/* Without looking at the actual initializer a vector of /* Without looking at the actual initializer a vector of
constants can be implemented as load from the constant pool. constants can be implemented as load from the constant pool.
......
...@@ -932,10 +932,10 @@ extern bool vect_can_advance_ivs_p (loop_vec_info); ...@@ -932,10 +932,10 @@ extern bool vect_can_advance_ivs_p (loop_vec_info);
extern unsigned int current_vector_size; extern unsigned int current_vector_size;
extern tree get_vectype_for_scalar_type (tree); extern tree get_vectype_for_scalar_type (tree);
extern tree get_same_sized_vectype (tree, tree); extern tree get_same_sized_vectype (tree, tree);
extern bool vect_is_simple_use (tree, gimple *, vec_info *, gimple **, extern bool vect_is_simple_use (tree, vec_info *, gimple **,
tree *, enum vect_def_type *); enum vect_def_type *);
extern bool vect_is_simple_use_1 (tree, gimple *, vec_info *, gimple **, extern bool vect_is_simple_use (tree, vec_info *, gimple **,
tree *, enum vect_def_type *, tree *); enum vect_def_type *, tree *);
extern bool supportable_widening_operation (enum tree_code, gimple *, tree, extern bool supportable_widening_operation (enum tree_code, gimple *, tree,
tree, enum tree_code *, tree, enum tree_code *,
enum tree_code *, int *, enum tree_code *, int *,
...@@ -962,7 +962,7 @@ extern unsigned record_stmt_cost (stmt_vector_for_cost *, int, ...@@ -962,7 +962,7 @@ extern unsigned record_stmt_cost (stmt_vector_for_cost *, int,
extern void vect_finish_stmt_generation (gimple *, gimple *, extern void vect_finish_stmt_generation (gimple *, gimple *,
gimple_stmt_iterator *); gimple_stmt_iterator *);
extern bool vect_mark_stmts_to_be_vectorized (loop_vec_info); extern bool vect_mark_stmts_to_be_vectorized (loop_vec_info);
extern tree vect_get_vec_def_for_operand (tree, gimple *, tree *); extern tree vect_get_vec_def_for_operand (tree, gimple *);
extern tree vect_init_vector (gimple *, tree, tree, extern tree vect_init_vector (gimple *, tree, tree,
gimple_stmt_iterator *); gimple_stmt_iterator *);
extern tree vect_get_vec_def_for_stmt_copy (enum vect_def_type, tree); extern tree vect_get_vec_def_for_stmt_copy (enum vect_def_type, tree);
......
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