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
PR96342-part1-v3.patch
Description: PR96342-part1-v3.patch