[Bug target/100572] New: arm: Assemble failures with MVE vcreateq intrinsic
acoplan at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed May 12 19:51:00 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100572
Bug ID: 100572
Summary: arm: Assemble failures with MVE vcreateq intrinsic
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: acoplan at gcc dot gnu.org
Target Milestone: ---
GCC's output fails to assemble for the following:
$ cat test.c
#include <arm_mve.h>
uint64x2_t v;
void f(void) { v = vcreateq_u64(0, 0); }
$ ./arm-eabi-gcc -c test.c -march=armv8.1-m.main+mve -mfloat-abi=hard -O
/tmp/ccXeZkHP.s: Assembler messages:
/tmp/ccXeZkHP.s:31: Error: General purpose registers may not be the same --
`vmov q3[2],q3[0],r2,r2'
/tmp/ccXeZkHP.s:32: Error: General purpose registers may not be the same --
`vmov q3[3],q3[1],r3,r3'
The code generated for f here is:
f:
movs r2, #0
movs r3, #0
vmov q3[2], q3[0], r2, r2
vmov q3[3], q3[1], r3, r3
ldr r3, .L2
vstrw.32 q3, [r3]
bx lr
The problem also occurs for other types when used with vcreateq, e.g. for:
#include <arm_mve.h>
uint32x4_t v;
void f(void) { v = vcreateq_u32(0, 0); }
Here is a preprocessed testcase (not for the testsuite, but for testing with a
cc1):
__simd128_uint64_t v;
void f(void) { v = __builtin_mve_vcreateq_uv2di(0, 0); }
More information about the Gcc-bugs
mailing list