diff options
author | Richard Biener <rguenther@suse.de> | 2018-11-09 10:53:31 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-11-09 10:53:31 +0000 |
commit | 1dd6990226fd92adf1e3c12a96c5776ec8efcb60 (patch) | |
tree | 0aac21b4707fd7fd0474d87f2cfc0233c4385409 /gcc/tree-vect-loop.c | |
parent | 43b01cc12de676d5a3871f7f813c740fc32b5a1a (diff) | |
download | gcc-1dd6990226fd92adf1e3c12a96c5776ec8efcb60.zip gcc-1dd6990226fd92adf1e3c12a96c5776ec8efcb60.tar.gz gcc-1dd6990226fd92adf1e3c12a96c5776ec8efcb60.tar.bz2 |
re PR tree-optimization/87621 (outer loop auto-vectorization fails for exponentiation code)
2018-11-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/87621
* tree-vect-loop.c (vectorizable_reduction): Handle reduction
op with only phi inputs.
* tree-ssa-loop-ch.c: Include tree-ssa-sccvn.h.
(ch_base::copy_headers): Run CSE on copied loop headers.
(pass_ch_vect::process_loop_p): Simplify.
* g++.dg/vect/pr87621.cc: New testcase.
From-SVN: r265959
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r-- | gcc/tree-vect-loop.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 5ce203b..7338ca5 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -6075,6 +6075,10 @@ vectorizable_reduction (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, vectype_in = get_vectype_for_scalar_type (TREE_TYPE (op)); break; } + /* For a nested cycle we might end up with an operation like + phi_result * phi_result. */ + if (!vectype_in) + vectype_in = STMT_VINFO_VECTYPE (stmt_info); gcc_assert (vectype_in); if (slp_node) |