Hi Robin,

> 
> First, git-check-commit says:
> ERR: unchanged file mentioned in a ChangeLog (did you mean 
> "gcc/config/riscv/riscv-vector-builtins-bases.cc"?): 
> "gcc/config/riscv/riscv-vector-builtins-shapes.cc"
> ERR: unchanged file mentioned in a ChangeLog (did you mean 
> "gcc/config/riscv/riscv-vector-builtins-bases.h"?): 
> "gcc/config/riscv/riscv-vector-builtins-shapes.h"
> 

In fact the patch was first implemented on a internal branch and cherry picked
then...  I'll clean that.

> > +/* A list of args for vector_type func (vector_type, signed double 
> > demote type,
> > +   signed double demote type) function.  */
> > +static constexpr const rvv_arg_type_info signed_narrow_wwvv_args[]
> > +  = {rvv_arg_type_info (RVV_BASE_vector),
> > +     rvv_arg_type_info (RVV_BASE_double_trunc_signed_vector),
> > +     rvv_arg_type_info (RVV_BASE_double_trunc_signed_vector),
> > +     rvv_arg_type_info_end};
> 
> Nit: I think we use "narrow" only for real narrowing insns while here it 
> just refers to the dest/src relation.  Therefore I'd rather skip it 
> because wwvv already implies that relation.  Similar with signed, we can 
> just use "ss" to be consistent.

I'll fix the names.

> 
> >  (define_insn "@pred_widen_abd_plus<su><mode>"
> > -  [(set (match_operand:VWEXTI_HS 0 "register_operand"      
> > "+&vd,&vd,&vr,&vr")
> > +  [(set (match_operand:VWEXTI_HS 0 "register_operand"    "=&vr")
> >   (if_then_else:VWEXTI_HS
> >     (unspec:<VM>
> > -     [(match_operand:<VM> 1 "vector_mask_operand" "vm,vm,Wc1,Wc1")
> > -      (match_operand 5 "vector_length_operand"    "rK,rK,rK,rK")
> > -      (match_operand 6 "const_int_operand"      "i,i,i,i")
> > -      (match_operand 7 "const_int_operand"      "i,i,i,i")
> > -      (match_operand 8 "const_int_operand"      "i,i,i,i")
> > +     [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1")
> > +      (match_operand 5 "vector_length_operand"    "  rK")
> > +      (match_operand 6 "const_int_operand"  "   i")
> > +      (match_operand 7 "const_int_operand"  "   i")
> > +      (match_operand 8 "const_int_operand"  "   i")
> >        (reg:SI VL_REGNUM)
> >        (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
> >     (unspec:VWEXTI_HS
> > -     [(match_operand:<V_DOUBLE_TRUNC> 3 "register_operand" "vr,vr,vr,vr")
> > -      (match_operand:<V_DOUBLE_TRUNC> 4 "register_operand" "vr,vr,vr,vr")
> > -      (match_dup 0)]
> > +     [(match_operand:<V_DOUBLE_TRUNC> 3 "register_operand" "  vr")
> > +      (match_operand:<V_DOUBLE_TRUNC> 4 "register_operand" "  vr")
> > +      (match_operand:VWEXTI_HS 2 "register_operand"   "   0")]
> >       UNSPEC_VABDA)
> > -   (match_operand:VWEXTI_HS 2 "vector_merge_operand" "vu,0,vu,0")))]
> > +   (match_dup 2)))]
> 
> Can you try using the new overlap constraints Pan Li is implementing 
> here?  That way we could avoid the earlyclobber (but would need four 
> alternatives again).  Then, let's use "vl" instead of "rK" even though 
> I'm not expecting theadvector to gain this insn :)
> 

Okay, though I guess it's two alternatives?  We don't support an undefined
merge operand in vwabda.

> >  
> > -#if defined (__riscv_vector) || defined (__riscv_zvbb) \
> > +#if defined (__riscv_vector) || defined (__riscv_zvabd) \
> > +    || defined (__riscv_zvbb) \
> >      || defined (__riscv_zve32f) || defined (__riscv_zve32x) \
> >      || defined (__riscv_zve64d) || defined (__riscv_zve64f) \
> >      || defined (__riscv_zve64x) \
> > @@ -24,6 +25,7 @@
> >      || !defined (__riscv_intrinsic_zve64d) \
> >      || !defined (__riscv_intrinsic_zve64f) \
> >      || !defined (__riscv_intrinsic_zve64x) \
> > +    || !defined (__riscv_intrinsic_zvabd) \
> >      || !defined (__riscv_intrinsic_zvbb) \
> >      || !defined (__riscv_intrinsic_zvbc) \
> >      || !defined (__riscv_intrinsic_zvfbfmin) \
> > @@ -60,6 +62,7 @@
> >      || __riscv_intrinsic_zve64d != 1 \
> >      || __riscv_intrinsic_zve64f != 1 \
> >      || __riscv_intrinsic_zve64x != 1 \
> > +    || __riscv_intrinsic_zvabd != 1 \
> 
> I'm getting a build error here, I guess we need to define it.  Which 
> obviously leads to the question of how the patches were tested :)
> 

Oops.  I manually tested the intrinsic cases but missed this one.  I'll define
it in riscv_vector.h.

> > +vuint16m1_t
> > +test_vwabdau_vv_u16m1 (vuint16m1_t vd, vuint8mf2_t vs2,
> > +   vuint8mf2_t vs1, size_t vl)
> > +{
> > +  return __riscv_vwabdau_vv_u16m1 (vd, vs2, vs1, vl);
> > +}
> > +
> > +/* { dg-final { scan-assembler-times {\tvabs\.v} 2 } } */
> > +/* { dg-final { scan-assembler-times {\tvabd\.vv} 2 } } */
> > +/* { dg-final { scan-assembler-times {\tvabdu\.vv} 1 } } */
> > +/* { dg-final { scan-assembler-times {\tvwabda\.vv} 1 } } */
> > +/* { dg-final { scan-assembler-times {\tvwabdau\.vv} 1 } } */
> 
> I think a few more tests would be useful, in particular some that test 
> the merge = dest cases.

Okay.  In particular I'll add the tail-undisturbed tests.

> 
> -- 
> Regards
>  Robin

Thanks,
Bohan

Reply via email to