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.

Reply via email to