https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118267
Bug ID: 118267 Summary: Suboptimal code for bool bitfield tests Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: law at gcc dot gnu.org Target Milestone: --- This is extracted from bz99918 where someone added a testcase that likely is unrelated to Martin's and where we don't know if that additional testcase is a regression or not. Another simple example: #include <cstdint> struct SomeClass { bool cfg1 : 1; bool cfg2 : 1; bool cfg3 : 1; bool check() const noexcept { return cfg1 || cfg2 || cfg3; } }; bool check(const SomeClass& rt) { return rt.check(); } Emits: check(SomeClass const&): movzx edx, BYTE PTR [rdi] mov eax, edx and eax, 1 jne .L1 mov eax, edx shr al and eax, 1 je .L4 .L1: ret .L4: mov eax, edx shr al, 2 and eax, 1 ret While it should: check(SomeClass const&): test byte ptr [rdi], 7 setne al ret