[Bug middle-end/68360] GCC bitfield processing code is very inefficient
roman.perepelitsa at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Nov 18 11:21:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68360
Roman Perepelitsa <roman.perepelitsa at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |roman.perepelitsa at gmail dot com
--- Comment #3 from Roman Perepelitsa <roman.perepelitsa at gmail dot com> ---
Here's another example where GCC generates suboptimal code for bitfield
initialization on x64: https://godbolt.org/g/WeqAr5.
#include <stdint.h>
struct S {
S(uint32_t a, uint32_t b);
uint32_t a : 2;
uint32_t b : 30;
};
S::S(uint32_t a, uint32_t b) : a(a), b(b) {}
Here's the code generated for the constructor when compiled with -O2.
Clang 3.9:
andl $3, %esi
leal (%rsi,%rdx,4), %eax
movl %eax, (%rdi)
retq
GCC 7.0:
movl %esi, %eax
movzbl (%rdi), %esi
andl $3, %eax
andl $-4, %esi
orl %eax, %esi
leal 0(,%rdx,4), %eax
movb %sil, (%rdi)
movl (%rdi), %edx
andl $3, %edx
orl %eax, %edx
movl %edx, (%rdi)
ret
More information about the Gcc-bugs
mailing list