https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91188
Bug ID: 91188 Summary: strict_low_part operations do not work Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: ubizjak at gmail dot com Target Milestone: --- Following test case: --cut here-- struct S1 { unsigned char val; unsigned char pad1; unsigned short pad2; }; struct S1 __attribute__((noinline)) test_andb (struct S1 a, unsigned char b) { a.val &= b; return a; } --cut here-- compiles on x86_64 with -O2 to: test_andb: movl %edi, %eax # 2 [c=4 l=2] *movsi_internal/0 andl %edi, %esi # 21 [c=4 l=2] *andsi_1/0 movb %sil, %al # 9 [c=4 l=3] *movstrictqi_1/0 ret # 24 [c=0 l=1] simple_return_internal Expected code: test_andb: movl %edi, %eax andb %sil, %al ret