aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-data-refs.c
diff options
context:
space:
mode:
authorYuri Rumyantsev <ysrumyan@gmail.com>2015-07-17 09:08:31 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2015-07-17 09:08:31 +0000
commita6c51a129328343ba445f1cc663f455c173cdc97 (patch)
treeb6e8894ec7114571f4f2b95603cc0465c3c8ef79 /gcc/tree-vect-data-refs.c
parent54b710be6484a9decdeac33125e41f384489ed3c (diff)
downloadgcc-a6c51a129328343ba445f1cc663f455c173cdc97.zip
gcc-a6c51a129328343ba445f1cc663f455c173cdc97.tar.gz
gcc-a6c51a129328343ba445f1cc663f455c173cdc97.tar.bz2
tree-vect-loop-manip.c (rename_variables_in_bb): Add argument to allow renaming of PHI arguments on edges incoming from outer...
gcc/ * tree-vect-loop-manip.c (rename_variables_in_bb): Add argument to allow renaming of PHI arguments on edges incoming from outer loop header, add corresponding check before start PHI iterator. (slpeel_tree_duplicate_loop_to_edge_cfg): Introduce new bool variable DUPLICATE_OUTER_LOOP and set it to true for outer loops with true force_vectorize. Set-up dominator for outer loop too. Pass DUPLICATE_OUTER_LOOP as argument to rename_variables_in_bb. (slpeel_can_duplicate_loop_p): Allow duplicate of outer loop if it was marked with force_vectorize and has restricted cfg. (slpeel_tree_peel_loop_to_edge): Do not rename exit PHI uses in inner loop. * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Do not do peeling for outer loops. gcc/testsuite/ * gcc.dg/vect/vect-outer-simd-2.c: New test. From-SVN: r225923
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r--gcc/tree-vect-data-refs.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index 603faca..c98cee4 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -1516,7 +1516,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
/* Check if we can possibly peel the loop. */
if (!vect_can_advance_ivs_p (loop_vinfo)
- || !slpeel_can_duplicate_loop_p (loop, single_exit (loop)))
+ || !slpeel_can_duplicate_loop_p (loop, single_exit (loop))
+ || loop->inner)
do_peeling = false;
if (do_peeling