// David Li struct A{ int b1: 3; int b2: 3; int b3: 2; int b4: 17; }a; void foo() { a.b1 = 2; a.b2 = 3; a.b4 = 8; }
This requires one LOAD + one OR + one STORE, but the generate code looks like: foo: .LFB2: movzbl a(%rip), %eax andl $-64, %eax orl $26, %eax movb %al, a(%rip) movl a(%rip), %eax andl $-33554177, %eax orb $8, %ah movl %eax, a(%rip) ret -- Summary: Missing bit field coalscing optimization Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: xinliangli at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35363