https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103124
--- Comment #3 from HaoChen Gui <guihaoc at gcc dot gnu.org> --- My solution is to split the move (from TI to V1TI) into one vsx_concat_v2di and one V2DI to V1TI move. Thus, TI register 122 can be decomposed. (insn 12 11 17 2 (set (reg:V1TI 121 [ b ]) (subreg:V1TI (reg:TI 122 [ a ]) 0)) "test2.c":4:5 1167 {vsx_movv1ti_64bit} (expr_list:REG_DEAD (reg:TI 122 [ a ]) (nil))) //after split pass (insn 23 11 24 2 (set (reg:V2DI 125) (vec_concat:V2DI (subreg:DI (reg:TI 122 [ a ]) 0) (subreg:DI (reg:TI 122 [ a ]) 8))) "test2.c":4:5 -1 (nil)) (insn 24 23 17 2 (set (reg:V1TI 121 [ b ]) (subreg:V1TI (reg:V2DI 125) 0)) "test2.c":4:5 -1 (nil)) //after subreg pass (insn 23 11 24 2 (set (reg:V2DI 125) (vec_concat:V2DI (reg:DI 126 [ a ]) (reg:DI 127 [ a+8 ]))) "test2.c":4:5 1346 {vsx_concat_v2di} (nil)) (insn 24 23 17 2 (set (reg:V1TI 121 [ b ]) (subreg:V1TI (reg:V2DI 125) 0)) "test2.c":4:5 1167 {vsx_movv1ti_64bit} (nil))