]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR rtl-optimization/119046: aarch64: Fix PARALLEL mode for vec_perm DUP expansion
authorKyrylo Tkachov <ktkachov@nvidia.com>
Wed, 5 Mar 2025 11:03:52 +0000 (03:03 -0800)
committerKyrylo Tkachov <ktkachov@nvidia.com>
Wed, 5 Mar 2025 15:21:47 +0000 (16:21 +0100)
The PARALLEL created in aarch64_evpc_dup is used to hold the lane number.
It is not appropriate for it to have a vector mode.
Other such uses use VOIDmode.
Do this here as well.
This avoids the risk of generic code treating the PARALLEL as trapping when it
has floating-point mode.

Bootstrapped and tested on aarch64-none-linux-gnu.

Signed-off-by: Kyrylo Tkachov <ktkachov@nvidia.com>
PR rtl-optimization/119046
* config/aarch64/aarch64.cc (aarch64_evpc_dup): Use VOIDmode for
PARALLEL.

gcc/config/aarch64/aarch64.cc

index af3871ce8a1f04f8ecebab926f7b3b2afabb8250..9196b8d906c8921ffc0c86d799b06dc0df1f8f53 100644 (file)
@@ -26301,7 +26301,7 @@ aarch64_evpc_dup (struct expand_vec_perm_d *d)
   in0 = d->op0;
   lane = GEN_INT (elt); /* The pattern corrects for big-endian.  */
 
-  rtx parallel = gen_rtx_PARALLEL (vmode, gen_rtvec (1, lane));
+  rtx parallel = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (1, lane));
   rtx select = gen_rtx_VEC_SELECT (GET_MODE_INNER (vmode), in0, parallel);
   emit_set_insn (out, gen_rtx_VEC_DUPLICATE (vmode, select));
   return true;