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

            Bug ID: 86947
           Summary: Erroneous code generated with O2 and O3 for PPC
           Product: gcc
           Version: 8.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vinay.kumar at blackfigtech dot com
  Target Milestone: ---

Created attachment 44534
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44534&action=edit
Testcase to reproduce the bug.

$powerpc-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=/data/home/toolchain/ppc/prefix/bin/powerpc-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/data/home/toolchain/ppc/prefix/bin/../libexec/gcc/powerpc-linux-gnu/8.1.0/lto-wrapper
Target: powerpc-linux-gnu
Configured with: /data/home/toolchain/ppc/build/../src/gcc-8.1.0/configure
--target=powerpc-linux-gnu --prefix=/data/home/toolchain/ppc/build/../prefix
--disable-nls --enable-languages=c,c++ --enable-targets=all --disable-multilib
--disable-libsanitizer --enable-threads --enable-tls --enable-__cxa_atexit
--enable-secureplt --with-gmp=/data/home/toolchain/gmp-mpfr-mpc/prefix
--with-mpfr=/data/home/toolchain/gmp-mpfr-mpc/prefix
--with-mpc=/data/home/toolchain/gmp-mpfr-mpc/prefix
--prefix=/data/home/toolchain/ppc/build/../prefix
Thread model: posix
gcc version 8.1.0 (GCC)

The testcase was compiled using following command and options:-
$powerpc-linux-gnu-gcc -m64 -O2 test.c -S

Please note the following chunk of code in the assembly file:-
There is a comparison of the registers R7 and R31.
However, the register R31 is not being initialized and optimized away 
and generating wrong code.
========================================================
.L4:
        addis 9,2,.LC2@toc@ha
        ld 9,.LC2@toc@l(9)
        lfd 12,0(9)nd 
        fcmpu 7,12,31
        bng 7,.L20
        stfd 31,112(1)
========================================================

We have investigated this issue and observed that its not observed with
O1 and Os optimization levels. Its only been the issue with O2 & O3.
The generated code was correct on disabling the optimization flags
"fno-tree-pre" and "fno-gcse" for O2 flags. It was also investigated on 
the earlier GCC source code and observed that issue is present atleast
until gcc-4.3.3 sources.

Thanks,
Vinay Kumar

Reply via email to