https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67153
Bug ID: 67153 Summary: integer optimizations 53% slower than std::bitset<> Product: gcc Version: 5.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ncm at cantrip dot org Target Milestone: --- Created attachment 36146 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36146&action=edit The std::bitset<> version I have attached two small, semantically equivalent C++14 programs. One uses std::bitset<26> for its operations; the other uses raw unsigned int. The one that uses unsigned int runs 53% slower than the bitset<> version, as compiled with g++-5.1 and running on a 2013-era Haswell i7-4770. While this represents, perhaps, a stunning triumph in the optimization of inline member and lambda functions operating on structs, it may represent an equally intensely embarrassing, even mystifying, failure for optimization of the underlying raw integer operations. For both, build and test was with $ g++-5 -O3 -march=native -mtune=native -g3 -Wall $PROG.cc $ time ./a.out | wc -l 2818 Times on a 3.2GHz Haswell are consistently 0.25s for the unsigned int version, 0.16s for the std::bitset<26> version. These programs are archived at <https://github.com/ncm/nytm-spelling-bee/>. The runtimes of the two versions are identical as built and run on my 2009 Westmere 2.4GHz i5-M520, and about the same as the integer version on Haswell.