diff options
author | Richard Biener <rguenther@suse.de> | 2020-08-26 14:24:01 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-08-26 14:28:49 +0200 |
commit | 71b6257e3a90995e1c1d3d2716a0eec5eef243db (patch) | |
tree | dfc83a6f216f1a57b4032e20c6eb56a3250a2420 /gcc/tree-vect-stmts.c | |
parent | 1f53d8f1d3e7519bd81cc5874e43ed9896cf6180 (diff) | |
download | gcc-71b6257e3a90995e1c1d3d2716a0eec5eef243db.zip gcc-71b6257e3a90995e1c1d3d2716a0eec5eef243db.tar.gz gcc-71b6257e3a90995e1c1d3d2716a0eec5eef243db.tar.bz2 |
tree-optimization/96783 - fix vectorization of negative step SLP
This appropriately uses VMAT_ELEMENTWISE when the vectors cannot be
filled from a single SLP group until we get more explicit support
for negative stride SLP.
2020-08-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/96783
* tree-vect-stmts.c (get_group_load_store_type): Use
VMAT_ELEMENTWISE for negative strides when we cannot
use VMAT_STRIDED_SLP.
* gcc.dg/vect/pr96783-1.c: New testcase.
* gcc.dg/vect/pr96783-2.c: Likewise.
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r-- | gcc/tree-vect-stmts.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 65e30ba..224be01 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -2192,7 +2192,15 @@ get_group_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, *memory_access_type = get_negative_load_store_type (vinfo, stmt_info, vectype, vls_type, 1); else - *memory_access_type = VMAT_STRIDED_SLP; + { + /* Try to use consecutive accesses of DR_GROUP_SIZE elements, + separated by the stride, until we have a complete vector. + Fall back to scalar accesses if that isn't possible. */ + if (multiple_p (nunits, group_size)) + *memory_access_type = VMAT_STRIDED_SLP; + else + *memory_access_type = VMAT_ELEMENTWISE; + } } else { |