On Fri, Jul 25, 2025 at 6:37 PM Andrew Stubbs <a...@baylibre.com> wrote: > > On 23/07/2025 16:23, Richard Biener wrote: > >>> That said, the hook is a bit black/white - whether the target prefers > >>> a gather/scatter over N piecewise operations with equal stride depends > >>> at least on the vector mode. On x86_64 for V2DImode definitely no > >>> gather, for V16SFmode it probably depends (V64QImode gather isn't > >>> supported). > >> > >> I expected this one might come up. What features would you like to see in > >> a hook? Should it be the mode, or the vectype? I see also masked_p that > >> might be relevant to some architecture? > > > > The mode, the (possibly constant) stride and the group size > > How is this updated patch? > > I couldn't figure out how to get the stride, so I've used the "scale", > which matches what various other hooks and instructions get. > > The hook is now called after the call to > vect_use_strided_gather_scatters_p, which partly means that the hook > doesn't get called in cases where gather/scatter would never have been > allowed anyway, but mostly just because the gs_info isn't populated > until after than call.
+DEFHOOK +(prefer_gather_scatter, + "This hook returns TRUE if gather loads or scatter stores are cheaper on\n\ +this target than a sequence of elementwise loads or stores. ", + bool, + (machine_mode mode, int scale, unsigned int group_size), + hook_bool_void_false) hook_bool_void_false looks like a wrong initializer. You probably need to implement the default. I also miss mentioning of SCALE and GROUP_SIZE and MODE in the description and what they are. - && single_element_p && SLP_TREE_LANES (slp_node) == 1 && loop_vinfo && vect_use_strided_gather_scatters_p (stmt_info, loop_vinfo, - masked_p, gs_info, elsvals)) + masked_p, gs_info, elsvals) + && (targetm.vectorize.prefer_gather_scatter (TYPE_MODE (vectype), + gs_info->scale, group_size) + || single_element_p)) I'd have prefered to move the check into vect_use_strided_gather_scatters_p since it logically belongs there. Richard. > > Andrew