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

            Bug ID: 85586
           Summary: Optimizer produces different result on -O2 and -O3
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: teodor_spaeren at riseup dot net
  Target Milestone: ---

Created attachment 44046
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44046&action=edit
The preproccessed code

The problem here is that the 9.0 versions of GCC produces different results on
-O2 and -O3 optimization levels.


Running the program with a 9.0 version of gcc returns this:

O3: fe fe ff ff fe ff ff fd fd ff fd fd ff fe fe ff fd fd ff fd fe ff fc fd ff
fa fa ff fc fc ff fd ff ff fd ff ff fe fd ff fd e2 ff f3 aa ff cb 66 ec c1 50
ff de 83 ff fd d9 ff fe f5 
O2: fe fe ff fe fe ff fd fd fd fd fd fd fe fe fe fd fd fd ff fd fe fe fc fd fa
fa fa fc fc fc ff fd ff ff fd ff ff fe fd ff fd e2 ff f3 aa f1 cb 66 ec c1 50
ff de 83 ff fd d9 ff fe f5 
DF:          ??       ??       ??       ??       ??                ??       ?? 
     ??                                                    ??                   

running it on a 7.3.1 version of gcc returns this:

O3: fe fe ff fe fe ff fd fd fd fd fd fd fe fe fe fd fd fd ff fd fe fe fc fd fa
fa fa fc fc fc ff fd ff ff fd ff ff fe fd ff fd e2 ff f3 aa f1 cb 66 ec c1 50
ff de 83 ff fd d9 ff fe f5 
O2: fe fe ff fe fe ff fd fd fd fd fd fd fe fe fe fd fd fd ff fd fe fe fc fd fa
fa fa fc fc fc ff fd ff ff fd ff ff fe fd ff fd e2 ff f3 aa f1 cb 66 ec c1 50
ff de 83 ff fd d9 ff fe f5 
DF:                                                                             


As you can see the function returns two different results based on what
optimization level is used.

Commenting out line 33 and 58 resolves this, so it might be related to to a
double write. Adding -fno-tree-vectorize to the options makes the output be the
same.

Here is the full output from compiling it:

hermes@dever> ~/madsci/gcc-latest/bin/gcc -v -save-temps -O3 -Wall -Wextra -o
testcase-O3 testcase.c                                                         
                                                       ~/kode/misc/lol/testcase
Using built-in specs.
COLLECT_GCC=/home/rhermes/madsci/gcc-latest/bin/gcc
COLLECT_LTO_WRAPPER=/home/rhermes/madsci/gcc-latest/libexec/gcc/x86_64-pc-linux-gnu/9.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc/configure --prefix=/home/rhermes/madsci/gcc-latest
--enable-languages=c,c++,fortran --enable-threads=posix --enable-default-ssp
--enable-checking=release --enable-shared --enable-linker-hash-style=gnu
--enable-gnu-unique-object --with-isl --enable-libmpx --enable-linker-build-id
--enable-lto --enable-__cxa_atexit --disable-libunwind-exceptions
--enable-clocale=gnu --disable-libstdcxx-pch --enable-default-pie
--enable-gnu-indirect-function --disable-werror --enable-plugin
--enable-install-libiberty
Thread model: posix
gcc version 9.0.0 20180428 (experimental) (GCC) 
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O3' '-Wall' '-Wextra' '-o'
'testcase-O3' '-mtune=generic' '-march=x86-64'
 /home/rhermes/madsci/gcc-latest/libexec/gcc/x86_64-pc-linux-gnu/9.0.0/cc1 -E
-quiet -v testcase.c -mtune=generic -march=x86-64 -Wall -Wextra -O3
-fpch-preprocess -o testcase.i
ignoring nonexistent directory
"/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/../../../../x86_64-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/include
 /usr/local/include
 /home/rhermes/madsci/gcc-latest/include

/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/include-fixed
 /usr/include
End of search list.
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O3' '-Wall' '-Wextra' '-o'
'testcase-O3' '-mtune=generic' '-march=x86-64'
 /home/rhermes/madsci/gcc-latest/libexec/gcc/x86_64-pc-linux-gnu/9.0.0/cc1
-fpreprocessed testcase.i -quiet -dumpbase testcase.c -mtune=generic
-march=x86-64 -auxbase testcase -O3 -Wall -Wextra -version -o testcase.s
GNU C17 (GCC) version 9.0.0 20180428 (experimental) (x86_64-pc-linux-gnu)
        compiled by GNU C version 9.0.0 20180428 (experimental), GMP version
6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.18-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C17 (GCC) version 9.0.0 20180428 (experimental) (x86_64-pc-linux-gnu)
        compiled by GNU C version 9.0.0 20180428 (experimental), GMP version
6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.18-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 32786d944114cff1f3c130ef77b2ba68
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O3' '-Wall' '-Wextra' '-o'
'testcase-O3' '-mtune=generic' '-march=x86-64'
 as -v --64 -o testcase.o testcase.s
GNU assembler version 2.30 (x86_64-pc-linux-gnu) using BFD version (GNU
Binutils) 2.30
COMPILER_PATH=/home/rhermes/madsci/gcc-latest/libexec/gcc/x86_64-pc-linux-gnu/9.0.0/:/home/rhermes/madsci/gcc-latest/libexec/gcc/x86_64-pc-linux-gnu/9.0.0/:/home/rhermes/madsci/gcc-latest/libexec/gcc/x86_64-pc-linux-gnu/:/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/:/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/
LIBRARY_PATH=/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/:/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O3' '-Wall' '-Wextra' '-o'
'testcase-O3' '-mtune=generic' '-march=x86-64'
 /home/rhermes/madsci/gcc-latest/libexec/gcc/x86_64-pc-linux-gnu/9.0.0/collect2
-plugin
/home/rhermes/madsci/gcc-latest/libexec/gcc/x86_64-pc-linux-gnu/9.0.0/liblto_plugin.so
-plugin-opt=/home/rhermes/madsci/gcc-latest/libexec/gcc/x86_64-pc-linux-gnu/9.0.0/lto-wrapper
-plugin-opt=-fresolution=testcase.res -plugin-opt=-pass-through=-lgcc
-plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc
-plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id
--eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie
-o testcase-O3 /lib/../lib64/Scrt1.o /lib/../lib64/crti.o
/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/crtbeginS.o
-L/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0
-L/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/../../../../lib64
-L/lib/../lib64 -L/usr/lib/../lib64
-L/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/../../..
testcase.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed
-lgcc_s --no-as-needed
/home/rhermes/madsci/gcc-latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/crtendS.o
/lib/../lib64/crtn.o
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O3' '-Wall' '-Wextra' '-o'
'testcase-O3' '-mtune=generic' '-march=x86-64'

Reply via email to