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)