aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop-manip.c
diff options
context:
space:
mode:
authorIra Rosen <ira.rosen@linaro.org>2011-07-19 06:25:07 +0000
committerIra Rosen <irar@gcc.gnu.org>2011-07-19 06:25:07 +0000
commit338f655dae09fc11f3fa4bc693360d93d9e72bb6 (patch)
tree6cccd3872aa1d8d4da3bfbfd294117ba827a2837 /gcc/tree-vect-loop-manip.c
parent24d71c2b563c0dd873523118edae4878275fdf2e (diff)
downloadgcc-338f655dae09fc11f3fa4bc693360d93d9e72bb6.zip
gcc-338f655dae09fc11f3fa4bc693360d93d9e72bb6.tar.gz
gcc-338f655dae09fc11f3fa4bc693360d93d9e72bb6.tar.bz2
re PR tree-optimization/49771 (wrong code with -ftree-vectorize)
PR tree-optimization/49771 * tree-vect-loop-manip.c (vect_vfa_segment_size): In case of zero step, set segment length to the size of the data-ref's type. From-SVN: r176434
Diffstat (limited to 'gcc/tree-vect-loop-manip.c')
-rw-r--r--gcc/tree-vect-loop-manip.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index b8d6780..6039c16 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -2356,9 +2356,14 @@ static tree
vect_vfa_segment_size (struct data_reference *dr, tree length_factor)
{
tree segment_length;
- segment_length = size_binop (MULT_EXPR,
- fold_convert (sizetype, DR_STEP (dr)),
- fold_convert (sizetype, length_factor));
+
+ if (!compare_tree_int (DR_STEP (dr), 0))
+ segment_length = TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (dr)));
+ else
+ segment_length = size_binop (MULT_EXPR,
+ fold_convert (sizetype, DR_STEP (dr)),
+ fold_convert (sizetype, length_factor));
+
if (vect_supportable_dr_alignment (dr, false)
== dr_explicit_realign_optimized)
{