diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/pr92526.c | 9 | ||||
-rw-r--r-- | gcc/tree-vect-data-refs.c | 16 |
4 files changed, 30 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 859dd71..a4b4580 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2019-11-21 Richard Sandiford <richard.sandiford@arm.com> + PR tree-optimization/92526 + * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Reject + versioning for alignment if the accesses do not have a consistent + mask, rather than asserting that the masks are consistent. + +2019-11-21 Richard Sandiford <richard.sandiford@arm.com> + PR tree-optimization/92595 * tree-vect-stmts.c (get_group_load_store_type): Add a VECTOR_MODE_P check. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0250eeb..1f30ffd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2019-11-21 Richard Sandiford <richard.sandiford@arm.com> + PR tree-optimization/92526 + * gcc.target/aarch64/pr92526.c: New test. + +2019-11-21 Richard Sandiford <richard.sandiford@arm.com> + PR testsuite/92543 * gcc.dg/vect/vect-alias-check-1.c: XFAIL the alias check message if there is no realignment support and no support for unaligned diff --git a/gcc/testsuite/gcc.target/aarch64/pr92526.c b/gcc/testsuite/gcc.target/aarch64/pr92526.c new file mode 100644 index 0000000..61b347c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/pr92526.c @@ -0,0 +1,9 @@ +/* { dg-options "-O3 -mstrict-align" } */ + +void +f (unsigned int *restrict x, unsigned int *restrict y, + unsigned char *restrict z, unsigned int n) +{ + for (unsigned int i = 0; i < n % 4; ++i) + x[i] = x[i] + y[i] + z[i]; +} diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 72a7094..b876d07 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -2266,13 +2266,15 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) mask must be 15 = 0xf. */ mask = size - 1; - /* FORNOW: use the same mask to test all potentially unaligned - references in the loop. The vectorizer currently supports - a single vector size, see the reference to - GET_MODE_NUNITS (TYPE_MODE (vectype)) where the - vectorization factor is computed. */ - gcc_assert (!LOOP_VINFO_PTR_MASK (loop_vinfo) - || LOOP_VINFO_PTR_MASK (loop_vinfo) == mask); + /* FORNOW: use the same mask to test all potentially unaligned + references in the loop. */ + if (LOOP_VINFO_PTR_MASK (loop_vinfo) + && LOOP_VINFO_PTR_MASK (loop_vinfo) != mask) + { + do_versioning = false; + break; + } + LOOP_VINFO_PTR_MASK (loop_vinfo) = mask; LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo).safe_push (stmt_info); } |