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

            Bug ID: 89694
           Summary: Redundant code with optimization
           Product: gcc
           Version: 7.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lavr at ncbi dot nlm.nih.gov
  Target Milestone: ---

When I use the -O6 optimization, I noticed that GCC 7.4.0 interjects some
redundant code, like marked below:

mulP:
        .seh_endprologue
        movq    %rcx, %r10
        movq    %rdx, %r11
        movl    %ecx, %eax
        shrq    $32, %r10
        shrq    $32, %r11
        movl    %edx, %edx                 // REDUNDANT
        movq    %r10, %r8
        xorl    %ecx, %ecx
        imulq   %r11, %r8
        imulq   %rdx, %r10
        imulq   %rax, %r11
        addq    %r11, %r10
        setc    %cl
        leaq    59(%r10), %r11
        jc      .L6
        testq   %rcx, %rcx
        jne     .L6
        cmpq    $-60, %r10
        cmovbe  %r10, %r11
.L6:
        movq    %r8, %r10
        salq    $32, %r8
        xorl    %ecx, %ecx
        shrq    $32, %r10
        imulq   $59, %r10, %r9
        addq    %r8, %r9
        setc    %cl
        leaq    59(%r9), %r8
        jc      .L11
        testq   %rcx, %rcx
        jne     .L11
        cmpq    $-60, %r9
        cmovbe  %r9, %r8
.L11:
        xorl    %r9d, %r9d
        addq    %r11, %r8
        setc    %r9b
        movq    %r8, %rcx
        imulq   %rax, %rdx
        testq   %r9, %r9
        jne     .L29
        jne     .L29                       // REDUNDANT
        cmpq    $-60, %r8
        ja      .L33
.L16:
        movq    %rcx, %r9
        salq    $32, %rcx
        shrq    $32, %r9
        imulq   $59, %r9, %r8
        addq    %rcx, %r8
        setc    %cl
        movq    %r8, %rax
        movzbl  %cl, %ecx
        testq   %rcx, %rcx
        jne     .L30
        jne     .L30                       // REDUNDANT
        cmpq    $-60, %r8
        jbe     .L17

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/7.4.0/lto-wrapper.exe
Target: x86_64-pc-cygwin
Configured with:
/cygdrive/i/szsz/tmpp/gcc/gcc-7.4.0-1.x86_64/src/gcc-7.4.0/configure
--srcdir=/cygdrive/i/szsz/tmpp/gcc/gcc-7.4.0-1.x86_64/src/gcc-7.4.0
--prefix=/usr --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc
--docdir=/usr/share/doc/gcc --htmldir=/usr/share/doc/gcc/html -C
--build=x86_64-pc-cygwin --host=x86_64-pc-cygwin --target=x86_64-pc-cygwin
--without-libiconv-prefix --without-libintl-prefix --libexecdir=/usr/lib
--enable-shared --enable-shared-libgcc --enable-static
--enable-version-specific-runtime-libs --enable-bootstrap --enable-__cxa_atexit
--with-dwarf2 --with-tune=generic
--enable-languages=ada,c,c++,fortran,lto,objc,obj-c++ --enable-graphite
--enable-threads=posix --enable-libatomic --enable-libcilkrts --enable-libgomp
--enable-libitm --enable-libquadmath --enable-libquadmath-support
--disable-libssp --enable-libada --disable-symvers --with-gnu-ld --with-gnu-as
--with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix
--without-libintl-prefix --with-system-zlib --enable-linker-build-id
--with-default-libstdcxx-abi=gcc4-compatible --enable-libstdcxx-filesystem-ts
Thread model: posix
gcc version 7.4.0 (GCC)

Reply via email to