diff options
author | Richard Biener <rguenther@suse.de> | 2019-10-23 12:41:49 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-10-23 12:41:49 +0000 |
commit | 82e8e335f917b9ce40801838c06f7945cf88da43 (patch) | |
tree | eed4184c1fa462a64d4a722463477af5dab26a10 /gcc | |
parent | d9eabacb0483ac1f730112d551551c258365f02e (diff) | |
download | gcc-82e8e335f917b9ce40801838c06f7945cf88da43.zip gcc-82e8e335f917b9ce40801838c06f7945cf88da43.tar.gz gcc-82e8e335f917b9ce40801838c06f7945cf88da43.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-reduc-2char-big-array.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-reduc-2char.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-reduc-2short.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2c.c | 5 | ||||
-rw-r--r-- | gcc/tree-vect-loop.c | 19 |
8 files changed, 28 insertions, 26 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 23a7d18..508207d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 790ffe4..a9c4413 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +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 diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-2char-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-2char-big-array.c index e246ae7..c40f862 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-2char-big-array.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-2char-big-array.c @@ -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" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-2char.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-2char.c index 5f0551e..dd30455 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-2char.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-2char.c @@ -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" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-2short.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-2short.c index 02c2bee..1a2d8d0 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-2short.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-2short.c @@ -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" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c index b036ad5..c0ee5dc 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c @@ -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" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2c.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2c.c index 8190622..71df574 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2c.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2c.c @@ -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" } } */ diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index e22d2dd..b66f211 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -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); |