On Wed, 18 Sep 2024, Jennifer Schmitz wrote:

> 
> 
> > On 6 Sep 2024, at 16:20, Jakub Jelinek <ja...@redhat.com> wrote:
> > 
> > External email: Use caution opening links or attachments
> > 
> > 
> > On Fri, Sep 06, 2024 at 02:10:19PM +0000, Kyrylo Tkachov wrote:
> >>> This is certainly wrong.
> >>> PROP_gimple_any is set already at the end of gimplification, so certainly
> >>> doesn't include any other early gimple passes.
> >>> And, not all statements are folded during gimplification, e.g. in OpenMP
> >>> regions folding is postponed until the omp lowering pass and folded only
> >>> there (at which point PROP_gimple_any is already set).
> >>> 
> >>> What exactly are you trying to ensure this optimization goes before?
> >>> For non-VL vectors I guess vector lowering, but that is done far later
> >>> and we already have a different predicate for that.
> >>> For VL vectors, what transforms that if user write % ?
> >> 
> >> There’s currently no way to write this in a generic VLA way. The SVE 
> >> intrinsics for this would be opaque to GIMPLE and the generic vector 
> >> extension doesn’t support VLA for now.
> >> The problem is the fold-minus-1.c test case that wants to see the fold 
> >> happen early on, and I think that makes sense from a canonicalization POV 
> >> but when the vectorizer has expanded a vector mod later on we don’t want 
> >> to put it back together.
> >> I agree gimple_any doesn’t look like the right thing. Is there a better 
> >> check to use?
> > 
> > If it never works with SVE or RISC-V VL vectors, then match.pd shouldn't do
> > it unless it works.  Testcase can be always adjusted or limited to targets
> > which do support that.
> > Or, do it for VECTOR_INTEGER_TYPE_P only
> > if ((optimize_vectors_before_lowering_p ()
> >     && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
> >    || target_supports_op_p (type, TRUNC_MOD_EXPR, optab_vector))
> > i.e. do it before vector lowering for vectors which can be lowered,
> > and when the optabs works.
> > Anyway, I think it would be useful to check whether it actually results
> > in better generated code on targets which support TRUNC_DIV_EXPR
> > and MULT_EXPR on vectors but not TRUNC_MOD_EXPR (if there are any).
> Hi Jakub,
> Thanks, your suggestion works well: The test case from the bug report no 
> longer ICEs and fold-minus-1.c also passes.
> I bootstrapped and regtested the updated patch on aarch64-linux-gnu and 
> x86_64-linux-gnu, no regression.

OK.

Thanks,
Richard.

> Best, Jennifer
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to