aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-patterns.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-vect-patterns.cc')
-rw-r--r--gcc/tree-vect-patterns.cc19
1 files changed, 10 insertions, 9 deletions
diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc
index 74a9a19..becee62 100644
--- a/gcc/tree-vect-patterns.cc
+++ b/gcc/tree-vect-patterns.cc
@@ -1022,13 +1022,11 @@ vect_reassociating_reduction_p (vec_info *vinfo,
if (loop && nested_in_vect_loop_p (loop, stmt_info))
return false;
- if (STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def)
- {
- if (needs_fold_left_reduction_p (TREE_TYPE (gimple_assign_lhs (assign)),
- code))
- return false;
- }
- else if (REDUC_GROUP_FIRST_ELEMENT (stmt_info) == NULL)
+ if (!vect_is_reduction (stmt_info))
+ return false;
+
+ if (needs_fold_left_reduction_p (TREE_TYPE (gimple_assign_lhs (assign)),
+ code))
return false;
*op0_out = gimple_assign_rhs1 (assign);
@@ -4087,10 +4085,13 @@ vect_recog_vector_vector_shift_pattern (vec_info *vinfo,
!= TYPE_PRECISION (TREE_TYPE (oprnd0)))
return NULL;
- stmt_vec_info def_vinfo = vect_get_internal_def (vinfo, oprnd1);
- if (!def_vinfo)
+ stmt_vec_info def_vinfo = vinfo->lookup_def (oprnd1);
+ if (!def_vinfo || STMT_VINFO_DEF_TYPE (def_vinfo) == vect_external_def)
return NULL;
+ def_vinfo = vect_stmt_to_vectorize (def_vinfo);
+ gcc_assert (def_vinfo);
+
*type_out = get_vectype_for_scalar_type (vinfo, TREE_TYPE (oprnd0));
if (*type_out == NULL_TREE)
return NULL;