aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-patterns.c
diff options
context:
space:
mode:
authorirar <irar@138bc75d-0d04-0410-961f-82ee72b054a4>2012-02-05 05:58:18 +0000
committerirar <irar@138bc75d-0d04-0410-961f-82ee72b054a4>2012-02-05 05:58:18 +0000
commitbed8b93be659c8b8bb94001842533cdd5cbf460d (patch)
tree725e87b3955717cd08b8ed5276d6dcea3a4a8724 /gcc/tree-vect-patterns.c
parent273845f4863375b30ef155319753e3c2d941688c (diff)
PR tree-optimization/52091
* tree-vectorizer.h (vect_is_simple_use): Add an argument. (vect_is_simple_use_1): Likewise. * tree-vect-loop.c (vectorizable_reduction): Update calls to vect_is_simple_use_1 and vect_is_simple_use. (vectorizable_live_operation): Likewise. * tree-vect-patterns.c (widened_name_p, vect_recog_vector_vector_shift_pattern, check_bool_pattern): Likewise. * tree-vect-stmts.c (process_use, vect_get_vec_def_for_operand, vectorizable_call, vectorizable_conversion, vectorizable_assignment, vectorizable_shift, vectorizable_operation, vectorizable_store, vectorizable_load): Likewise. (vect_is_simple_cond): Add an argument, pass it to vect_is_simple_use_1. (vectorizable_condition): Update calls to vect_is_simple_cond, vect_is_simple_use. (vect_is_simple_use): Add an argument, the statement in which OPERAND is used. Check that if OPERAND's def stmt is a double reduction phi node, the use is a phi node too. (vect_is_simple_use_1): Add an argument, pass it to vect_is_simple_use. * tree-vect-slp.c (vect_get_and_check_slp_defs): Update a call to vect_is_simple_use. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183902 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-patterns.c')
-rw-r--r--gcc/tree-vect-patterns.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index f63b4e593cc..d95502103f7 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -109,7 +109,8 @@ widened_name_p (tree name, gimple use_stmt, tree *half_type, gimple *def_stmt,
stmt_vinfo = vinfo_for_stmt (use_stmt);
loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
- if (!vect_is_simple_use (name, loop_vinfo, NULL, def_stmt, &def, &dt))
+ if (!vect_is_simple_use (name, use_stmt, loop_vinfo, NULL, def_stmt, &def,
+ &dt))
return false;
if (dt != vect_internal_def
@@ -133,8 +134,8 @@ widened_name_p (tree name, gimple use_stmt, tree *half_type, gimple *def_stmt,
|| (TYPE_PRECISION (type) < (TYPE_PRECISION (*half_type) * 2)))
return false;
- if (!vect_is_simple_use (oprnd0, loop_vinfo, NULL, &dummy_gimple, &dummy,
- &dt))
+ if (!vect_is_simple_use (oprnd0, *def_stmt, loop_vinfo,
+ NULL, &dummy_gimple, &dummy, &dt))
return false;
return true;
@@ -1550,7 +1551,8 @@ vect_recog_vector_vector_shift_pattern (VEC (gimple, heap) **stmts,
!= TYPE_PRECISION (TREE_TYPE (oprnd0)))
return NULL;
- if (!vect_is_simple_use (oprnd1, loop_vinfo, NULL, &def_stmt, &def, &dt))
+ if (!vect_is_simple_use (oprnd1, last_stmt, loop_vinfo, NULL, &def_stmt,
+ &def, &dt))
return NULL;
if (dt != vect_internal_def)
@@ -1926,7 +1928,7 @@ check_bool_pattern (tree var, loop_vec_info loop_vinfo)
tree def, rhs1;
enum tree_code rhs_code;
- if (!vect_is_simple_use (var, loop_vinfo, NULL, &def_stmt, &def, &dt))
+ if (!vect_is_simple_use (var, NULL, loop_vinfo, NULL, &def_stmt, &def, &dt))
return false;
if (dt != vect_internal_def)