Hi Juzhe,

just some nits.

> -  else if (rtx_equal_p (step, constm1_rtx) && poly_int_rtx_p (base, &value)
> +  else if (rtx_equal_p (step, constm1_rtx)
> +        && poly_int_rtx_p (base, &value)

Looks like just a line-break change and the line is not too long?

> -      rtx ops[] = {dest, vid, gen_int_mode (nunits_m1, GET_MODE_INNER 
> (mode))};
> -      insn_code icode = code_for_pred_sub_reverse_scalar (mode);
> -      emit_vlmax_insn (icode, RVV_BINOP, ops);
> +      if (value.is_constant () && IN_RANGE (value.to_constant (), -16, 15))

At some point, we'd want to unify all the [-16, 15] handling.  We already have
simm5_p but that takes an rtx.  Not urgent for now just to keep in mind.

> +     {
> +       rtx dup = gen_const_vector_dup (mode, value);
> +       rtx ops[] = {dest, dup, vid};
> +       insn_code icode = code_for_pred (MINUS, mode);
> +       emit_vlmax_insn (icode, RVV_BINOP, ops);
> +     }
> +      else
> +     {
> +       rtx ops[]
> +         = {dest, vid, gen_int_mode (nunits_m1, GET_MODE_INNER (mode))};
> +       insn_code icode = code_for_pred_sub_reverse_scalar (mode);
> +       emit_vlmax_insn (icode, RVV_BINOP, ops);
> +     }
>        return;
>      }
>    else
> @@ -1416,7 +1428,9 @@ expand_const_vector (rtx target, rtx src)
>    rtx base, step;
>    if (const_vec_series_p (src, &base, &step))
>      {
> -      emit_insn (gen_vec_series (mode, target, base, step));
> +      rtx tmp = gen_reg_rtx (mode);
> +      emit_insn (gen_vec_series (mode, tmp, base, step));
> +      emit_move_insn (target, tmp);

This seems a bit inconsistent from a caller's perspective
as we also do emit_insn (gen_vec_series, ...) without extra move
at another spot.  Can we handle this directly in expand_vec_series?

> +  (V1HF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_16")
>    (V2HF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_16")
>    (V4HF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_16")
>    (V8HF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_16")
> @@ -479,6 +480,7 @@
>    (V512HF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN 
> >= 1024")
>    (V1024HF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN 
> >= 2048")
>    (V2048HF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN 
> >= 4096")
> +  (V1SF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_32")
>    (V2SF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_32")
>    (V4SF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_32")
>    (V8SF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_32")
> @@ -489,6 +491,7 @@
>    (V256SF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN 
> >= 1024")
>    (V512SF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN 
> >= 2048")
>    (V1024SF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN 
> >= 4096")
> +  (V1DF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_64")
>    (V2DF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_64")
>    (V4DF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_64")
>    (V8DF "TARGET_VECTOR_VLS && TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 
> 64")

This hunk seems unrelated to the rest.  I suppose it's just a fixup
for 1-element float vectors for VLS?

Apart from that, looks good to me.

Regards
 Robin

Reply via email to