[Bug target/91188] strict_low_part operations do not work
ubizjak at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Jul 17 11:39:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91188
--- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> ---
The patched gcc compiles to:
test_andb:
movl %edi, %eax # 2 [c=4 l=2] *movsi_internal/0
andb %sil, %al # 9 [c=4 l=3] *andqi_1_slp
ret # 23 [c=0 l=1] simple_return_internal
The patch also handles memory:
--cut here--
struct S1
{
unsigned char val;
unsigned char pad1;
unsigned short pad2;
};
unsigned char m;
struct S1
__attribute__((noinline))
test_andb (struct S1 a)
{
a.val &= m;
return a;
}
--cut here--
gcc -O2:
test_andb:
movl %edi, %eax # 2 [c=4 l=2] *movsi_internal/0
andb m(%rip), %al # 7 [c=8 l=6] *andqi_1_slp
ret # 20 [c=0 l=1] simple_return_internal
and immediate operands:
--cut here--
struct S1
{
unsigned char val;
unsigned char pad1;
unsigned short pad2;
};
struct S1
__attribute__((noinline))
test_andb (struct S1 a)
{
a.val &= 0x2a;
return a;
}
--cut here--
gcc -O2:
test_andb:
movl %edi, %eax # 2 [c=4 l=2] *movsi_internal/0
andb $42, %al # 7 [c=4 l=2] *andqi_1_slp
ret # 20 [c=0 l=1] simple_return_internal
More information about the Gcc-bugs
mailing list