diff options
author | Richard Guenther <rguenther@suse.de> | 2010-11-03 13:30:48 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-11-03 13:30:48 +0000 |
commit | 8b8bba2dd98b692b749bf023abf02c245ecd2515 (patch) | |
tree | d5ae6e84c8ada69121a074407f2d9138cbf36ace /gcc/tree-vect-data-refs.c | |
parent | 623238466cd55becfd63ba1c739180febca29c5e (diff) | |
download | gcc-8b8bba2dd98b692b749bf023abf02c245ecd2515.zip gcc-8b8bba2dd98b692b749bf023abf02c245ecd2515.tar.gz gcc-8b8bba2dd98b692b749bf023abf02c245ecd2515.tar.bz2 |
re PR tree-optimization/46190 (ICE in vect_enhance_data_refs_alignment when building fma3d)
2010-11-03 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46190
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment):
Properly compute peel iterations.
* gfortran.dg/pr46190.f90: New testcase.
From-SVN: r166244
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index b4da517..ce872cf 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -1518,7 +1518,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) mis = DR_MISALIGNMENT (dr) / GET_MODE_SIZE (TYPE_MODE ( TREE_TYPE (DR_REF (dr)))); npeel_tmp = (negative - ? (mis - nelements) : (nelements - mis)) & (vf - 1); + ? (mis - nelements) : (nelements - mis)) + & (nelements - 1); /* For multiple types, it is possible that the bigger type access will have more than one peeling option. E.g., a loop with two @@ -1722,7 +1723,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) count. */ mis = DR_MISALIGNMENT (dr0); mis /= GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (DR_REF (dr0)))); - npeel = (negative ? mis - nelements : nelements - mis) & (vf - 1); + npeel = ((negative ? mis - nelements : nelements - mis) + & (nelements - 1)); } /* For interleaved data access every iteration accesses all the |