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;
+}
+

Reply via email to