diff options
author | Richard Biener <rguenther@suse.de> | 2018-11-07 15:01:09 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-11-07 15:01:09 +0000 |
commit | 5a951baaf1b789281bf62b852d24a4ab8cf3e714 (patch) | |
tree | 0c036e96b195e6e1d15aa5359bf49a3c7372370d /gcc/tree-vectorizer.h | |
parent | 7d3a67d7b0c01c0370226db7840c9ef6e054b56c (diff) | |
download | gcc-5a951baaf1b789281bf62b852d24a4ab8cf3e714.zip gcc-5a951baaf1b789281bf62b852d24a4ab8cf3e714.tar.gz gcc-5a951baaf1b789281bf62b852d24a4ab8cf3e714.tar.bz2 |
re PR tree-optimization/87914 (gcc fails to vectorize bitreverse code)
2018-11-07 Richard Biener <rguenther@suse.de>
PR tree-optimization/87914
* tree-vect-loop.c (vect_is_simple_reduction): Improve detection
of nested cycles.
(vectorizable_reduction): Handle shifts and rotates by dispatching
to vectorizable_shift.
* tree-vect-stmts.c (vect_get_vec_def_for_operand_1): Handle
in-loop uses of vect_nested_cycle defs. Merge cycle and internal
def cases.
(vectorizable_shift): Export and handle being called as
vect_nested_cycle.
(vect_analyze_stmt): Call vectorizable_shift after
vectorizable_reduction.
* tree-vectorizer.h (vectorizable_shift): Declare.
* lib/target-supports.exp (check_effective_target_vect_var_shift): New.
(check_avx2_available): Likewise.
* g++.dg/vect/pr87914.cc: New testcase.
From-SVN: r265876
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r-- | gcc/tree-vectorizer.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index e1292aa..e66f28b 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -1483,6 +1483,9 @@ extern opt_result vect_analyze_stmt (stmt_vec_info, bool *, slp_tree, extern bool vectorizable_condition (stmt_vec_info, gimple_stmt_iterator *, stmt_vec_info *, tree, int, slp_tree, stmt_vector_for_cost *); +extern bool vectorizable_shift (stmt_vec_info, gimple_stmt_iterator *, + stmt_vec_info *, slp_tree, + stmt_vector_for_cost *); extern void vect_get_load_cost (stmt_vec_info, int, bool, unsigned int *, unsigned int *, stmt_vector_for_cost *, |