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'