Commit 82e8e335 by Richard Biener Committed by Richard Biener

re PR tree-optimization/65930 (Reduction with sign-change not handled)

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.

	* 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.

From-SVN: r277322
parent d9eabacb
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
......
......@@ -62,4 +62,4 @@ int main (void)
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" } } */
......@@ -46,4 +46,4 @@ int main (void)
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" } } */
......@@ -45,4 +45,4 @@ int main (void)
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" } } */
......@@ -12,12 +12,6 @@ signed char Y[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
/* 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).
......@@ -60,5 +54,5 @@ int main (void)
/* { 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" } } */
......@@ -21,6 +21,8 @@ foo ()
2005-12-26 Kazu Hirata <kazu@codesourcery.com>
PR tree-optimization/25125
but we still handle the reduction.
*/
for (i = 0; i < N; i++)
......@@ -43,5 +45,4 @@ main (void)
}
/* { 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" } } */
......@@ -2695,7 +2695,11 @@ pop:
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)
{
......@@ -5692,19 +5696,6 @@ vectorizable_reduction (stmt_vec_info stmt_info, slp_tree slp_node,
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);
......
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