On Thu, 25 Mar 2021, Stam Markianos-Wright wrote:

> On 24/03/2021 13:46, Richard Biener wrote:
> > On Wed, 24 Mar 2021, Stam Markianos-Wright wrote:
> > 
> >> Hi all,
> >>
> >> This patch resolves bug:
> >>
> >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96974
> >>
> >> This is achieved by forcing a re-calculation of *stmt_vectype_out if an
> >> incompatible combination of TYPE_VECTOR_SUBPARTS is detected, but with an
> >> extra introduced max_nunits ceiling.
> >>
> >> I am not 100% sure if this is the best way to go about fixing this, because
> >> this is my first look at the vectorizer and I lack knowledge of the wider
> >> context, so do let me know if you see a better way to do this!
> >>
> >> I have added the previously ICE-ing reproducer as a new test.
> >>
> >> This is compiled as "g++ -Ofast -march=armv8.2-a+sve -fdisable-tree-fre4"
> >> for
> >> GCC11 and "g++ -Ofast -march=armv8.2-a+sve" for GCC10.
> >>
> >> (the non-fdisable-tree-fre4 version has gone latent on GCC11)
> >>
> >> Bootstrapped and reg-tested on aarch64-linux-gnu.
> >> Also reg-tested on aarch64-none-elf.
> > 
> > I don't think this is going to work well given uses will expect
> > a vector type that's consistent here.
> > 
> > I think giving up is for the moment the best choice, thus replacing
> > the assert with vectorization failure.
> > 
> > In the end we shouldn't require those nunits vectypes to be
> > separately computed - we compute the vector type of the defs
> > anyway and in case they're invariant the vectorizable_* function
> > either can deal with the type mix or not anyway.
> > 
> 
> Yea good point! I agree and after all we are very close to releases now ;)
> 
> I've attached the patch that just do the graceful vectorization failure and
> add a slightly better test now. Re-tested as previously with no issues ofc.
> 
> gcc-10.patch is what I'd backport to GCC10 (the only difference between that
> and gcc-11.patch is that one compiles with `-fdisable-tree-fre4` and the other
> without it).
> 
> Ok to push this to the GCC11 branch and backport to the GCC10 branch?

OK.

Thanks,
Richard.

> Cheers :D
> Stam
> 
> > That said, the goal should be to simplify things here.
> > 
> > Richard.
> > 
> >>
> >> gcc/ChangeLog:
> >>
> >>          * tree-vect-stmts.c (get_vectype_for_scalar_type): Add new
> >>          parameter to core function and add new function overload.
> >>          (vect_get_vector_types_for_stmt): Add re-calculation logic.
> >>
> >> gcc/testsuite/ChangeLog:
> >>
> >>          * g++.target/aarch64/sve/pr96974.C: New test.
> >>
> > 
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)

Reply via email to