Hi,

I have revised the patch based on your suggestions. I use multiple_p instead of 
!multiple_p if the eq situation is OK to make it easier to understand.

> >> >     if (n->simdclone->inbranch)
> >> >       this_badness += 2048;
> >> >     int target_badness = targetm.simd_clone.usable (n); @@ -3988,19
> >> > +3988,19 @@ vectorizable_simd_clone_call (vec_info *vinfo,
> >> > +stmt_vec_info
> >> stmt_info,
> >> >     arginfo[i].vectype = get_vectype_for_scalar_type (vinfo, arg_type,
> >> >
> slp_node);
> >> >     if (arginfo[i].vectype == NULL
> >> > -       || (simd_clone_subparts (arginfo[i].vectype)
> >> > -           > bestn->simdclone->simdlen))
> >> > +       || (known_gt (simd_clone_subparts (arginfo[i].vectype),
> >> > +                     bestn->simdclone->simdlen)))
> >>
> >> Here too I think we want constant_multiple_p:
> >>
> >>           || !constant_multiple_p (bestn->simdclone->simdlen,
> >>                                    simd_clone_subparts
> >> (arginfo[i].vectype))
> >>
> >
> > Use multiple_p here since the multiple is not needed.
>
> True, but in the case of vectorisation, we need to generate a constant number
> of copies at compile time.  If we don't enforce a constant multiple, we might
> end up trying to use an Advanced SIMD routine when vectorising for SVE.
>
> The reason we don't have a two-argument version of constant_multiple_p is
> that so far nothing has needed it (at least AFAIK).  There's no conceptual
> problem with adding it though.  I'm happy to do that if it would help.
>

Two-argument versions of constant_multiple_p are added in the v3-patch. Could 
you please check if the added versions are OK ?

Bootstrap and tested on both aarch64 and x86 Linux platform, no new regression 
witnessed.

Any suggestions?

Thanks,
Yang Yang

Attachment: PR96342-part1-v3.patch
Description: PR96342-part1-v3.patch

Reply via email to