PR tree-optimization/69168
* tree-vect-loop.c (vect_analyze_loop_2): Reset both main and
pattern stmt SLP type.
* tree-vect-slp.c (vect_detect_hybrid_slp_stmts): Patterns may
end up unused so cope with that case.
* gcc.dg/torture/pr69168.c: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232261
138bc75d-0d04-0410-961f-
82ee72b054a4
2016-01-12 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/69168
+ * tree-vect-loop.c (vect_analyze_loop_2): Reset both main and
+ pattern stmt SLP type.
+ * tree-vect-slp.c (vect_detect_hybrid_slp_stmts): Patterns may
+ end up unused so cope with that case.
+
+2016-01-12 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/69157
* tree-vect-stmts.c (vectorizable_mask_load_store): Check
stmts def type only during analyze phase.
2016-01-12 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/69168
+ * gcc.dg/torture/pr69168.c: New testcase.
+
+2016-01-12 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/69157
* gcc.dg/torture/pr69157.c: New testcase.
--- /dev/null
+/* { dg-do compile } */
+
+long a, b, e;
+short *c;
+int *d;
+void fn1()
+{
+ int i;
+ for (; e; e--)
+ {
+ i = 2;
+ for (; i; i--)
+ a = b = *d++ / (1 << 9);
+ b = b ? 8 : a;
+ *c++ = *c++ = b;
+ }
+}
!gsi_end_p (si); gsi_next (&si))
{
stmt_vec_info stmt_info = vinfo_for_stmt (gsi_stmt (si));
+ STMT_SLP_TYPE (stmt_info) = loop_vect;
if (STMT_VINFO_IN_PATTERN_P (stmt_info))
{
- gcc_assert (STMT_SLP_TYPE (stmt_info) == loop_vect);
stmt_info = vinfo_for_stmt (STMT_VINFO_RELATED_STMT (stmt_info));
+ STMT_SLP_TYPE (stmt_info) = loop_vect;
for (gimple_stmt_iterator pi
= gsi_start (STMT_VINFO_PATTERN_DEF_SEQ (stmt_info));
!gsi_end_p (pi); gsi_next (&pi))
STMT_SLP_TYPE (vinfo_for_stmt (pstmt)) = loop_vect;
}
}
- STMT_SLP_TYPE (stmt_info) = loop_vect;
}
}
/* Free optimized alias test DDRS. */
{
/* Check if a pure SLP stmt has uses in non-SLP stmts. */
gcc_checking_assert (PURE_SLP_STMT (stmt_vinfo));
- /* We always get the pattern stmt here, but for immediate
- uses we have to use the LHS of the original stmt. */
- gcc_checking_assert (!STMT_VINFO_IN_PATTERN_P (stmt_vinfo));
- if (STMT_VINFO_RELATED_STMT (stmt_vinfo))
+ /* If we get a pattern stmt here we have to use the LHS of the
+ original stmt for immediate uses. */
+ if (! STMT_VINFO_IN_PATTERN_P (stmt_vinfo)
+ && STMT_VINFO_RELATED_STMT (stmt_vinfo))
stmt = STMT_VINFO_RELATED_STMT (stmt_vinfo);
if (TREE_CODE (gimple_op (stmt, 0)) == SSA_NAME)
FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, gimple_op (stmt, 0))