67d56b2720
This patch fixes various issues with vec_duplicate in the MVE patterns. Currently there are two patterns named *mve_mov<mode>. The second of these is really a vector duplicate rather than a move, so I've renamed it accordingly. As it stands, there are several issues with this pattern: 1. The MVE_types iterator has an entry for TImode, but vec_duplicate:TI is invalid. 2. The mode of the operand to vec_duplicate is SImode, but it should vary according to the vector mode iterator. 3. The second alternative of this pattern is bogus: it allows matching symbol_refs (the cause of the PR) and const_ints (which means that it matches (vec_duplicate (const_int ...)) which is non-canonical: such rtxes should be const_vectors instead and handled by the main vector move pattern). This patch fixes all of these issues, and removes the redundant *mve_vec_duplicate<mode> pattern. gcc/ChangeLog: PR target/99647 * config/arm/iterators.md (MVE_vecs): New. (V_elem): Also handle V2DF. * config/arm/mve.md (*mve_mov<mode>): Rename to ... (*mve_vdup<mode>): ... this. Remove second alternative since vec_duplicate of const_int is not canonical RTL, and we don't want to match symbol_refs. (*mve_vec_duplicate<mode>): Delete (pattern is redundant). gcc/testsuite/ChangeLog: PR target/99647 * gcc.c-torture/compile/pr99647.c: New test. |
||
---|---|---|
.. | ||
aarch-common-protos.h | ||
aarch-common.c | ||
aarch-cost-tables.h | ||
aout.h | ||
arm926ejs.md | ||
arm1020e.md | ||
arm1026ejs.md | ||
arm1136jfs.md | ||
arm_acle_builtins.def | ||
arm_acle.h | ||
arm_bf16.h | ||
arm_cde_builtins.def | ||
arm_cde.h | ||
arm_cmse.h | ||
arm_fp16.h | ||
arm_mve_builtins.def | ||
arm_mve_types.h | ||
arm_mve.h | ||
arm_neon_builtins.def | ||
arm_neon.h | ||
arm_vfp_builtins.def | ||
arm-builtins.c | ||
arm-builtins.h | ||
arm-c.c | ||
arm-cpus.in | ||
arm-d.c | ||
arm-fixed.md | ||
arm-flags.h | ||
arm-generic.md | ||
arm-ldmstm.ml | ||
arm-modes.def | ||
arm-opts.h | ||
arm-protos.h | ||
arm-simd-builtin-types.def | ||
arm-tables.opt | ||
arm-tune.md | ||
arm.c | ||
arm.h | ||
arm.md | ||
arm.opt | ||
bpabi.h | ||
common.md | ||
constraints.md | ||
cortex-a5.md | ||
cortex-a7.md | ||
cortex-a8-neon.md | ||
cortex-a8.md | ||
cortex-a9-neon.md | ||
cortex-a9.md | ||
cortex-a15-neon.md | ||
cortex-a15.md | ||
cortex-a17-neon.md | ||
cortex-a17.md | ||
cortex-a53.md | ||
cortex-a57.md | ||
cortex-m4-fpu.md | ||
cortex-m4.md | ||
cortex-m7.md | ||
cortex-r4.md | ||
cortex-r4f.md | ||
crypto.def | ||
crypto.md | ||
driver-arm.c | ||
elf.h | ||
exynos-m1.md | ||
fa526.md | ||
fa606te.md | ||
fa626te.md | ||
fa726te.md | ||
fmp626.md | ||
freebsd.h | ||
fuchsia-elf.h | ||
iterators.md | ||
iwmmxt2.md | ||
iwmmxt.md | ||
ldmstm.md | ||
ldrdstrd.md | ||
linux-eabi.h | ||
linux-elf.h | ||
linux-gas.h | ||
marvell-f-iwmmxt.md | ||
marvell-pj4.md | ||
mmintrin.h | ||
mve.md | ||
neon.md | ||
netbsd-eabi.h | ||
netbsd-elf.h | ||
parsecpu.awk | ||
predicates.md | ||
README-interworking | ||
rtems.h | ||
semi.h | ||
symbian.h | ||
sync.md | ||
t-aprofile | ||
t-arm | ||
t-arm-elf | ||
t-bpabi | ||
t-fuchsia | ||
t-linux-androideabi | ||
t-linux-eabi | ||
t-multilib | ||
t-phoenix | ||
t-rmprofile | ||
t-rtems | ||
t-symbian | ||
t-vxworks | ||
thumb1.md | ||
thumb2.md | ||
types.md | ||
uclinux-eabi.h | ||
uclinux-elf.h | ||
uclinuxfdpiceabi.h | ||
unknown-elf.h | ||
unspecs.md | ||
vec-common.md | ||
vfp11.md | ||
vfp.md | ||
vxworks.h | ||
vxworks.opt | ||
x-arm | ||
xgene1.md |