[Bug tree-optimization/71775] New: Redundant move instruction for sign extension
wmhkebe at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Jul 6 05:26:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71775
Bug ID: 71775
Summary: Redundant move instruction for sign extension
Product: gcc
Version: 6.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: wmhkebe at gmail dot com
Target Milestone: ---
Created attachment 38838
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38838&action=edit
preprocessed file for the test program
Compiling the following program with g++ -O3 -S:
#include <cstdint>
unsigned long long f(std::uint64_t x) {
std::uint64_t ans = 0;
for (; x != 0; x &= (x - 1)) {
ans ^= __builtin_ctzll(x);
}
return ans;
}
yields the following assembly code:
.text
.align 4,0x90
.globl __Z1fy
__Z1fy:
LFB0:
xorl %eax, %eax
testq %rdi, %rdi
je L4
.align 4,0x90
L3:
bsfq %rdi, %rdx
movslq %edx, %rdx
xorq %rdx, %rax
leaq -1(%rdi), %rdx
andq %rdx, %rdi
jne L3
ret
L4:
ret
Note that the movslq instruction inside the loop is redundant. Clang is able to
generate code without this move. Benchmark shows, this represents a 5%-10%
difference in the running time of this function.
Version info:
Using built-in specs.
COLLECT_GCC=gcc-6
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc6/6.1.0/libexec/gcc/x86_64-apple-darwin15.5.0/6.1.0/lto-wrapper
Target: x86_64-apple-darwin15.5.0
Configured with: ../configure --build=x86_64-apple-darwin15.5.0
--prefix=/usr/local/Cellar/gcc6/6.1.0
--libdir=/usr/local/Cellar/gcc6/6.1.0/lib/gcc/6
--enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-6
--with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr
--with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl014
--with-system-zlib --enable-libstdcxx-time=yes --enable-stage1-checking
--enable-checking=release --enable-lto --with-build-config=bootstrap-debug
--disable-werror --with-pkgversion='Homebrew gcc6 6.1.0'
--with-bugurl=https://github.com/Homebrew/homebrew-versions/issues
--enable-plugin --disable-nls --enable-multilib
--with-native-system-header-dir=/usr/include
--with-sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
Thread model: posix
gcc version 6.1.0 (Homebrew gcc6 6.1.0)
More information about the Gcc-bugs
mailing list