https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120721
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Note, in this particular case it just seems like a backend bug, before that
commit it just emits weirdo
(insn 11 10 12 2 (set (reg:V2DI 109 [ _9 ])
(subreg:V2DI (reg/f:DI 65 ap) 0)) "scopex.ii":30:21 1294
{*aarch64_simd_movv2di}
(expr_list:REG_DEAD (reg:CC 66 cc)
(nil)))
(insn 12 11 14 2 (set (reg:V2DI 109 [ _9 ])
(vec_merge:V2DI (vec_duplicate:V2DI (reg/f:DI 110 [ _7 ]))
(reg:V2DI 109 [ _9 ])
(const_int 2 [0x2]))) "scopex.ii":30:21 1823
{aarch64_simd_vec_setv2di}
(expr_list:REG_DEAD (reg/f:DI 110 [ _7 ])
(nil)))
which then combine fixes up to
(note 11 10 12 2 NOTE_INSN_DELETED)
(insn 12 11 14 2 (set (reg:V2DI 109 [ _9 ])
(vec_concat:V2DI (reg/f:DI 65 ap)
(reg/f:DI 110 [ _7 ]))) "scopex.ii":30:21 2980
{*aarch64_combine_internaldi}
(expr_list:REG_DEAD (reg/f:DI 110 [ _7 ])
(nil)))
Better would be to emit that right away, or emit first some insn that inserts
the DImode value into one of the elements of the vector or duplicates it.