https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114741
Bug ID: 114741
Summary: [14 regression] aarch64 sve: unnecessary fmov for
scalar int bit operations
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: nsz at gcc dot gnu.org
Target Milestone: ---
void foo(unsigned i, unsigned *p)
{
*p = i & 1;
}
with gcc -march=armv8-a+sve -O2 compiles to
foo:
fmov s31, w0
and z31.s, z31.s, #1
str s31, [x1]
ret
instead of
foo:
and w0, w0, 1
str w0, [x1]
ret
it is wrong with -mcpu=generic but good e.g. with -mcpu=neoverse-v1