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

Reply via email to