aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-10-23 12:41:49 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-10-23 12:41:49 +0000
commit82e8e335f917b9ce40801838c06f7945cf88da43 (patch)
treeeed4184c1fa462a64d4a722463477af5dab26a10 /gcc
parentd9eabacb0483ac1f730112d551551c258365f02e (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-2char-big-array.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-2char.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-2short.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c8
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2c.c5
-rw-r--r--gcc/tree-vect-loop.c19
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);