[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#772436: aarch64 optimization bug



Package: gcc-4.9
Version: 4.9.1-19
Severity: normal

I have a minimal reproducable test case in a git repo here:

    https://github.com/erikd/gcc-aarch64-optimization-bug
    
which contails a test program which passes when run with
optimization flags "-O1" and fails with "-O1 -fschedule-insns".

Cloning that repo under aarch64 and doing:

    CC=gcc-4.9 make clean check
    
compiles and runs the program with both sets of optimization
flags and displays success or failure. It does not hwoever
fail on aarch64 with gcc-4.8 or with gcc-snapshot, nor does
it fail with any version of GCC on any other architecture.

There is a usefule comment from Måns Rullgård on G+:
    
    https://plus.google.com/u/0/+ErikdeCastroLopo/posts/F2BPxT7g1Gx
    
    OK, it's a gcc bug. For some unfathomable reason, it chooses to
    calculate "mask = ~0u >> (32 - numBits)" in a vector register by
    means of left-shifting by -(32 - numBits). It then subtracts 
    (bitPos & 7) from the negated value and uses this as the shift 
    amount of a regular shift instruction in "mask <<= shift" which
    is obviously nonsense.

    This behaviour (and the bug) was introduced in rev 202020 (git
    5674183), and reverting this commit makes things work again.

    I believe the -fschedule-insns flag is a red herring. It probably 
    merely stirs up the code in a way that makes the real bug trigger.

Older discussion about this problem here:

    https://plus.google.com/u/0/+ThomasRuecker/posts/e9uxoUyk3Bk

-- System Information:
Debian Release: 8.0
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: arm64 (aarch64)

Kernel: Linux 3.16.0-4-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to en_AU.UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: unable to detect

Versions of packages gcc-4.9 depends on:
ii  binutils        2.24.90.20141201-1
ii  cpp-4.9         4.9.2-5
ii  gcc-4.9-base    4.9.2-5
ii  libc6           2.19-13
ii  libcloog-isl4   0.18.2-1+b2
ii  libgcc-4.9-dev  4.9.2-5
ii  libgmp10        2:6.0.0+dfsg-6
ii  libisl10        0.12.2-2+b2
ii  libmpc3         1.0.2-1+b2
ii  libmpfr4        3.1.2-1+b2
ii  zlib1g          1:1.2.8.dfsg-2+b1

Versions of packages gcc-4.9 recommends:
ii  libc6-dev  2.19-13

Versions of packages gcc-4.9 suggests:
pn  gcc-4.9-doc      <none>
pn  gcc-4.9-locales  <none>
pn  libasan1-dbg     <none>
pn  libatomic1-dbg   <none>
pn  libcilkrts5-dbg  <none>
pn  libgcc1-dbg      <none>
pn  libgomp1-dbg     <none>
pn  libitm1-dbg      <none>
pn  liblsan0-dbg     <none>
pn  libquadmath-dbg  <none>
pn  libtsan0-dbg     <none>
pn  libubsan0-dbg    <none>

-- no debconf information


Reply to: