re PR tree-optimization/37027 (SLP loop vectorization missing support for reductions)
PR tree-optimization/37027 * tree-vectorizer.h (struct _loop_vec_info): Add new field reductions and macro to access it. (vectorizable_reduction): Add argument. (vect_get_slp_defs): Likewise. * tree-vect-loop.c (vect_analyze_scalar_cycles_1): Collect reduction statements for possible use in SLP. (new_loop_vec_info): Initialize LOOP_VINFO_REDUCTIONS. (destroy_loop_vec_info): Free LOOP_VINFO_REDUCTIONS. (vect_create_epilog_for_reduction): Handle SLP. Modify documentation, add new argument. (vectorizable_reduction): Likewise. * tree-vect-stmts.c (vect_get_vec_defs): Update call to vect_get_slp_defs. (vectorizable_type_demotion, vectorizable_type_promotion, vectorizable_store): Likewise. (vect_analyze_stmt): Update call to vectorizable_reduction. (vect_transform_stmt): Likewise. * tree-vect-slp.c (vect_get_and_check_slp_defs): Handle reduction. (vect_build_slp_tree): Fix indentation. Check that there are no loads from different interleaving chains in same node. (vect_slp_rearrange_stmts): New function. (vect_supported_load_permutation_p): Allow load permutations for reductions. Call vect_slp_rearrange_stmts() to rearrange statements inside SLP nodes if necessary. (vect_analyze_slp_instance): Handle reductions. (vect_analyze_slp): Try to build SLP instances originating from groups of reductions. (vect_detect_hybrid_slp_stmts): Skip reduction statements. (vect_get_constant_vectors): Create initial vectors for reductions according to reduction code. Add new argument. (vect_get_slp_defs): Add new argument, pass it to vect_get_constant_vectors. (vect_schedule_slp_instance): Remove SLP tree root statements. From-SVN: r158506
Showing
- gcc/ChangeLog 37 additions, 0 deletionsgcc/ChangeLog
- gcc/testsuite/ChangeLog 11 additions, 0 deletionsgcc/testsuite/ChangeLog
- gcc/testsuite/gcc.dg/vect/pr37027.c 37 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/pr37027.c
- gcc/testsuite/gcc.dg/vect/slp-reduc-1.c 49 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/slp-reduc-1.c
- gcc/testsuite/gcc.dg/vect/slp-reduc-2.c 44 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/slp-reduc-2.c
- gcc/testsuite/gcc.dg/vect/slp-reduc-3.c 62 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/slp-reduc-3.c
- gcc/testsuite/gcc.dg/vect/slp-reduc-4.c 60 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/slp-reduc-4.c
- gcc/testsuite/gcc.dg/vect/slp-reduc-5.c 49 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/slp-reduc-5.c
- gcc/testsuite/gcc.dg/vect/slp-reduc-6.c 50 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/slp-reduc-6.c
- gcc/testsuite/lib/target-supports.exp 19 additions, 0 deletionsgcc/testsuite/lib/target-supports.exp
- gcc/tree-vect-loop.c 598 additions, 380 deletionsgcc/tree-vect-loop.c
- gcc/tree-vect-patterns.c 9 additions, 1 deletiongcc/tree-vect-patterns.c
- gcc/tree-vect-slp.c 325 additions, 74 deletionsgcc/tree-vect-slp.c
- gcc/tree-vect-stmts.c 6 additions, 7 deletionsgcc/tree-vect-stmts.c
- gcc/tree-vectorizer.h 7 additions, 2 deletionsgcc/tree-vectorizer.h
Loading
Please register or sign in to comment