[Bug c++/83171] New: std::bitset::count not inlining __popcountdi2
lectem at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Nov 26 21:43:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83171
Bug ID: 83171
Summary: std::bitset::count not inlining __popcountdi2
Product: gcc
Version: 7.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: lectem at gmail dot com
Target Milestone: ---
Even if the size of the std::bitset is smaller than a long long, the compiler
still emits a call to __popcountdi2 to count the number of bits set to 1.
This is unnecessary for example if the size of the bitset is 8. I believe the
issue lies with the fact that __popcountdi2 is not inlined/optimized, even when
using -O3.
Clang (-O2, using libstdc++) and MSVC(/O2, Visual 2017) seem to handle this
correctly.
Here is a link to the compiler explorer test :
https://godbolt.org/g/QTWgdb
The code used in the test :
//------------------------------------------
#include <bitset>
#include <stdint.h>
size_t foo(uint32_t value)
{
std::bitset<8> bset = value;
return bset.count();
}
//------------------------------------------
gcc -v
Target: x86_64-linux-gnu
Configured with: ../gcc-7.2.0/configure --prefix /root/staging
--build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
--disable-multilib --disable-bootstrap --disable-multiarch --with-arch-32=i586
--enable-clocale=gnu --enable-languages=c,c++,go,fortran --enable-ld=yes
--enable-gold=yes --enable-libstdcxx-debug --enable-libstdcxx-time=yes
--enable-linker-build-id --enable-lto --enable-plugins --enable-threads=posix
--with-pkgversion=GCC-Explorer-Build
Thread model: posix
gcc version 7.2.0 (GCC-Explorer-Build)
More information about the Gcc-bugs
mailing list