https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121274

--- Comment #5 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
(In reply to Hongtao Liu from comment #4)
> Probably caused by r14-1902-g96c3539f2a3813
> 
> -  /* Special case TImode to V1TImode conversions, via V2DI.  */
> -  if (mode == V1TImode
> +  /* Special case TImode to 128-bit vector conversions via V2DI.  */
> +  if (VECTOR_MODE_P (mode)
> +      && GET_MODE_SIZE (mode) == 16
>        && SUBREG_P (op1)
>        && GET_MODE (SUBREG_REG (op1)) == TImode
>        && TARGET_64BIT && TARGET_SSE
> @@ -709,7 +711,7 @@ ix86_expand_vector_move (machine_mode mode, rtx
> operands[])
>        emit_move_insn (lo, gen_lowpart (DImode, SUBREG_REG (op1)));
>        emit_move_insn (hi, gen_highpart (DImode, SUBREG_REG (op1)));
>        emit_insn (gen_vec_concatv2di (tmp, lo, hi));
> -      emit_move_insn (op0, gen_lowpart (V1TImode, tmp));
> +      emit_move_insn (op0, gen_lowpart (mode, tmp));
>        return;
>      }

We need to add an splitter to convert the blow vec_concat to a simple move 

45(insn 10 9 14 2 (set (subreg:V2DI (reg:V4SI 98 [ <retval> ]) 0)               
46        (vec_concat:V2DI (subreg:DI (reg:TI 101) 0)                           
47            (subreg:DI (reg:TI 101) 8)))  8442 {vec_concatv2di}               
48     (expr_list:REG_DEAD (reg:TI 101)  

into

(set (subreg:V2DI (reg:V4SI 98)
     (subreg:V2DI (reg:TI 101))

Reply via email to