This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/66917] [4.9/5/6 regression] ARM: NEON: memcpy compiles to vst1 with incorrect alignment due to SRA


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66917

--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
Suggested fix:

Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c        (revision 226348)
+++ gcc/config/arm/arm.c        (working copy)
@@ -27217,7 +27217,8 @@ arm_builtin_support_vector_misalignment
 {
   if (TARGET_NEON && !BYTES_BIG_ENDIAN && unaligned_access)
     {
-      HOST_WIDE_INT align = TYPE_ALIGN_UNIT (type);
+      HOST_WIDE_INT align
+       = GET_MODE_ALIGNMENT (TYPE_MODE (type)) / BITS_PER_UNIT;

       if (is_packed)
         return align == 1;

which produces

        push    {r4}
        add     r3, r0, #8
        add     r4, r1, #8
        vld1.64 {d17}, [r1]
        vld1.64 {d16}, [r4]
        ldr     r4, [sp], #4
        vld1.64 {d19}, [r3]
        veor    d16, d16, d19
        vld1.64 {d18}, [r0]
        veor    d17, d17, d18
        vst1.64 {d17}, [r2]!
        vst1.64 {d16}, [r2]
        bx      lr


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]