diff options
author | Ira Rosen <ira.rosen@linaro.org> | 2011-07-19 06:25:07 +0000 |
---|---|---|
committer | Ira Rosen <irar@gcc.gnu.org> | 2011-07-19 06:25:07 +0000 |
commit | 338f655dae09fc11f3fa4bc693360d93d9e72bb6 (patch) | |
tree | 6cccd3872aa1d8d4da3bfbfd294117ba827a2837 /gcc/tree-vect-loop-manip.c | |
parent | 24d71c2b563c0dd873523118edae4878275fdf2e (diff) | |
download | gcc-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.c | 11 |
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) { |