+2019-10-23 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/65930
+ * tree-vect-loop.c (check_reduction_path): Allow conversions
+ that only change the sign.
+ (vectorizable_reduction): Relax latch def stmts we handle further.
+
2019-10-23 Jakub Jelinek <jakub@redhat.com>
PR debug/90231
+2019-10-23 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/65930
+ * gcc.dg/vect/vect-reduc-2char-big-array.c: Adjust.
+ * gcc.dg/vect/vect-reduc-2char.c: Likewise.
+ * gcc.dg/vect/vect-reduc-2short.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-s8b.c: Likewise.
+ * gcc.dg/vect/vect-reduc-pattern-2c.c: Likewise.
+
2019-10-23 Jakub Jelinek <jakub@redhat.com>
* g++.dg/cpp2a/constexpr-dtor3.C: Expect in 'constexpr' expansion of
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
/* char->short->short dot product.
The dot-product pattern should be detected.
- The reduction is currently not vectorized becaus of the signed->unsigned->signed
- casts, since this patch:
-
- 2005-12-26 Kazu Hirata <kazu@codesourcery.com>
-
- PR tree-optimization/25125
When the dot-product is detected, the loop should be vectorized on vect_sdot_qi
targets (targets that support dot-product of signed char).
/* { dg-final { scan-tree-dump-times "vect_recog_dot_prod_pattern: detected" 1 "vect" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
2005-12-26 Kazu Hirata <kazu@codesourcery.com>
PR tree-optimization/25125
+
+ but we still handle the reduction.
*/
for (i = 0; i < N; i++)
}
/* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 1 "vect" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_widen_sum_qi_to_hi } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
if (gimple_assign_rhs2 (use_stmt) == op)
neg = ! neg;
}
- if (*code == ERROR_MARK)
+ if (CONVERT_EXPR_CODE_P (use_code)
+ && tree_nop_conversion_p (TREE_TYPE (gimple_assign_lhs (use_stmt)),
+ TREE_TYPE (gimple_assign_rhs1 (use_stmt))))
+ ;
+ else if (*code == ERROR_MARK)
*code = use_code;
else if (use_code != *code)
{
which is defined by the loop-header-phi. */
gassign *stmt = as_a <gassign *> (stmt_info->stmt);
- switch (get_gimple_rhs_class (gimple_assign_rhs_code (stmt)))
- {
- case GIMPLE_BINARY_RHS:
- case GIMPLE_TERNARY_RHS:
- break;
-
- case GIMPLE_UNARY_RHS:
- case GIMPLE_SINGLE_RHS:
- return false;
-
- default:
- gcc_unreachable ();
- }
enum tree_code code = gimple_assign_rhs_code (stmt);
int op_type = TREE_CODE_LENGTH (code);