With the 2013-09-21 version of trunk, attached test case results in bus error when simultaneously enabling both -mno-unaligned-access and -ftree-vectorize. The error is caused by unaligned vector load via two vldr instructions:
vldr d16, [r3, #-16] vldr d17, [r3, #-8] Cause for this error is, even when -mno-unaligned-access is enabled, backend will inform vectorizer that it supports misaligned accesses via TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT. Attached patch fixes this. Is this OK for trunk? Thanks, Kugan +2014-02-03 Yury Gribov <tetra2...@gmail.com> + Kugan Vivekanandarajah <kug...@linaro.org> + + * config/arm/arm.c (arm_vector_alignment_reachable): Check + unaligned_access. + * config/arm/arm.c (arm_builtin_support_vector_misalignment): Likewise. + +2014-02-03 Yury Gribov <tetra2...@gmail.com> + Kugan Vivekanandarajah <kug...@linaro.org> + + * gcc.target/arm/vect-noalign.c: New file. +
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 39d23cc..d7e74de 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -29521,7 +29521,7 @@ arm_vector_alignment_reachable (const_tree type, bool is_packed) { /* Vectors which aren't in packed structures will not be less aligned than the natural alignment of their element type, so this is safe. */ - if (TARGET_NEON && !BYTES_BIG_ENDIAN) + if (TARGET_NEON && !BYTES_BIG_ENDIAN && unaligned_access) return !is_packed; return default_builtin_vector_alignment_reachable (type, is_packed); @@ -29532,7 +29532,7 @@ arm_builtin_support_vector_misalignment (enum machine_mode mode, const_tree type, int misalignment, bool is_packed) { - if (TARGET_NEON && !BYTES_BIG_ENDIAN) + if (TARGET_NEON && !BYTES_BIG_ENDIAN && unaligned_access) { HOST_WIDE_INT align = TYPE_ALIGN_UNIT (type); diff --git a/gcc/testsuite/gcc.target/arm/vect-noalign.c b/gcc/testsuite/gcc.target/arm/vect-noalign.c index e69de29..a934233 100644 --- a/gcc/testsuite/gcc.target/arm/vect-noalign.c +++ b/gcc/testsuite/gcc.target/arm/vect-noalign.c @@ -0,0 +1,20 @@ +/* { dg-do run } */ +/* { dg-require-effective-target arm_neon_hw } */ +/* { dg-options "-mfpu=neon -ffast-math -ftree-vectorize -fno-common -O2 -mno-unaligned-access" } */ + + +/* Test for-mno-unaligned-access and -ftree-vectorize and results bus error. */ +#define N 128 + +char ia[N]; +char ib[N+1]; + +int main() { + int i; + for(i = 0; i < N; ++i) { + ia[i] = ib[i + 1]; + } + + return 0; +} +