diff options
author | Richard Biener <rguenther@suse.de> | 2015-11-27 14:17:28 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-11-27 14:17:28 +0000 |
commit | 72c0f64330a0a5500fe97bf829ce181a28820fdf (patch) | |
tree | 7b174d0e3a941e415681d1d52723e50d8079280a /gcc/tree-vect-data-refs.c | |
parent | 00e5241831c1227615a45b7bcba29c393671cb3f (diff) | |
download | gcc-72c0f64330a0a5500fe97bf829ce181a28820fdf.zip gcc-72c0f64330a0a5500fe97bf829ce181a28820fdf.tar.gz gcc-72c0f64330a0a5500fe97bf829ce181a28820fdf.tar.bz2 |
re PR tree-optimization/68559 (Excessive peeling for gaps)
2015-11-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/68559
* tree-vect-data-refs.c (vect_analyze_group_access_1): Move
peeling for gap checks ...
* tree-vect-stmts.c (vectorizable_load): ... here and relax
for SLP.
* tree-vect-loop.c (vect_analyze_loop_2): Re-set
LOOP_VINFO_PEELING_FOR_GAPS before re-trying without SLP.
* gcc.dg/vect/slp-perm-4.c: Adjust again.
* gcc.dg/vect/pr45752.c: Likewise.
From-SVN: r231015
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 62e61e0..7962e36 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -2166,10 +2166,6 @@ vect_analyze_group_access_1 (struct data_reference *dr) HOST_WIDE_INT dr_step = -1; HOST_WIDE_INT groupsize, last_accessed_element = 1; bool slp_impossible = false; - struct loop *loop = NULL; - - if (loop_vinfo) - loop = LOOP_VINFO_LOOP (loop_vinfo); /* For interleaving, GROUPSIZE is STEP counted in elements, i.e., the size of the interleaving group (including gaps). */ @@ -2227,24 +2223,6 @@ vect_analyze_group_access_1 (struct data_reference *dr) dump_printf (MSG_NOTE, "\n"); } - if (loop_vinfo) - { - if (dump_enabled_p ()) - dump_printf_loc (MSG_NOTE, vect_location, - "Data access with gaps requires scalar " - "epilogue loop\n"); - if (loop->inner) - { - if (dump_enabled_p ()) - dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "Peeling for outer loop is not" - " supported\n"); - return false; - } - - LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo) = true; - } - return true; } @@ -2399,29 +2377,6 @@ vect_analyze_group_access_1 (struct data_reference *dr) if (bb_vinfo) BB_VINFO_GROUPED_STORES (bb_vinfo).safe_push (stmt); } - - /* If there is a gap in the end of the group or the group size cannot - be made a multiple of the vector element count then we access excess - elements in the last iteration and thus need to peel that off. */ - if (loop_vinfo - && (groupsize - last_accessed_element > 0 - || exact_log2 (groupsize) == -1)) - - { - if (dump_enabled_p ()) - dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "Data access with gaps requires scalar " - "epilogue loop\n"); - if (loop->inner) - { - if (dump_enabled_p ()) - dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "Peeling for outer loop is not supported\n"); - return false; - } - - LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo) = true; - } } return true; |