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

            Bug ID: 77895
           Summary: Unaligned movdqa generated by GCC 6.2.0 with -O3
           Product: gcc
           Version: 6.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jack.d.whitham at gmail dot com
  Target Milestone: ---

Created attachment 39766
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=39766&action=edit
Test case to reproduce bug

A strange custom implementation of "memcpy" from a data compression library is
badly vectorized by GCC 6.2.0 when using "-O3", or alternatively "-O1
-fvect-cost-model -ftree-loop-vectorize". The vectorizer seems to assume that
the "src" address is word-aligned, but there is no reason to assume so (it's an
"unsigned char*"). The program segfaults at the "movdqa" instruction.

Bug can be reproduced with GCC 6.2.0 on Debian "sid" AMD64:

$ gcc-6 -v
Using built-in specs.
COLLECT_GCC=gcc-6
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 6.2.0-5'
--with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs
--enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-6 --program-prefix=x86_64-linux-gnu- --enable-shared
--enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/
--enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=new --enable-gnu-unique-object
--disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib
--disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo
--with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-amd64/jre --enable-java-home
--with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-amd64
--with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-amd64
--with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
--enable-objc-gc --enable-multiarch --with-arch-32=i686 --with-abi=m64
--with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=x86_64-linux-gnu
Thread model: posix
gcc version 6.2.0 20160927 (Debian 6.2.0-5)
$ gcc-6 -O3 example.c -o example
$ ./example
Segmentation fault

This bug is also in GCC 5.4.1 and GCC 4.9.4, but apparently not in GCC 4.8.
This bug occurs with x86 code as well as AMD64.

Please accept my apologies for guessing about the component and if this issue
is already known. I searched for duplicates and found a number of
similar-sounding bugs, but all were marked as "resolved" in earlier versions of
GCC.

Reply via email to