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/tree-vect-loop.c | |
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/tree-vect-loop.c')
-rw-r--r-- | gcc/tree-vect-loop.c | 19 |
1 files changed, 5 insertions, 14 deletions
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); |