"Kewen.Lin" <li...@linux.ibm.com> writes: > Hi Richard, > >>> Yeah, the comments were confusing, its intent is to check which targets >>> support partial vectors and which usage to be used. >>> >>> How about to update them like: >>> >>> "Return true if loops using partial vectors are supported and usage kind is >>> 1/2". >> >> I wasn't really commenting on the comment so much as the intent. >> It should be possible to run the testsuite with: >> >> --target_board unix/--param=vect-partial-vector-usage=1 >> >> and get the right results. >> >>>> E.g. maybe use check_compile to run gcc with “-Q --help=params” and an >>>> arbitrary output type (probably assembly). Then use “regexp” on the >>>> lines to parse the --param=vect-partial-vector-usage value. At that >>>> point it would be worth caching the result. >>> >>> Now the default value of this parameter is 2, even for those targets which >>> don't have the supports with partial vectors. Since we will get the value >>> 2 on those unsupported targets, it looks like we have to set it manually? >> >> I think that just means we want: >> >> vect_len_load_store >> the len_load_store equivalent of vect_fully_masked, i.e. whether >> the target supports len load/store (regardless of whether the >> --param enables it) >> >> vect_partial_vectors >> (vect_fully_masked || vect_len_load_store) && param != 0 >> >> vect_partial_vectors_usage_1 >> (vect_fully_masked || vect_len_load_store) && param == 1 >> >> vect_partial_vectors_usage_2 >> (vect_fully_masked || vect_len_load_store) && param == 2 >> > > Thanks for the clarification! > > Sorry for the late update, this new version depends on the --help= patch, > I held it for a while. > > Bootstrapped/regtested on powerpc64le-linux-gnu P9, with/without any > explicit usage setting, it also works well with --target_board > unix/--param=vect-partial-vector-usage=1. > > By the way, for the testing on usage 1, it needs the function > check_effective_target_vect_len_load_store to return true for Power9, > this part will be sent for review separately.
Gah, sorry for the slow reply. Thought I'd already reviewed this, but just realised I hadn't. > diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi > index 9f37ac26241..2290af5812d 100644 > --- a/gcc/doc/sourcebuild.texi > +++ b/gcc/doc/sourcebuild.texi > @@ -1689,6 +1689,19 @@ Target supports AND, IOR and XOR reduction on vectors. > > @item vect_fold_extract_last > Target supports the @code{fold_extract_last} optab. > + > +@item vect_len_load_store > +Target supports loops using length-based partial vectors. Probably easiest to talk in terms of internals, so: Target supports the @code{len_load} and @code{len_store} optabs. > +@item vect_partial_vectors_usage_1 > +Target supports loops using partial vectors but only for those loops whose > need > +to iterate can be removed. Here too I think it might be better to talk in terms of existing features and flags, so: Target supports loop vectorization with partial vectors and @code{vect-partial-vector-usage} is set to 1. > +@item vect_partial_vectors_usage_2 > +Target supports loops using partial vectors and for all loops. Similarly here for 2. > + > +@item vect_partial_vectors > +Target supports loops using partial vectors. For this one, probably: Target supports loop vectorization with partial vectors and @code{vect-partial-vector-usage} is nonzero. > diff --git a/gcc/testsuite/gcc.dg/vect/slp-multitypes-11.c > b/gcc/testsuite/gcc.dg/vect/slp-multitypes-11.c > index 5200ed1cd94..d6b0604db78 100644 > --- a/gcc/testsuite/gcc.dg/vect/slp-multitypes-11.c > +++ b/gcc/testsuite/gcc.dg/vect/slp-multitypes-11.c > @@ -49,5 +49,7 @@ int main (void) > } > > /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target > vect_unpack } } } */ > -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" > { target vect_unpack xfail { vect_variable_length && vect_load_lanes } } } } > */ > +/* The epilogues are vectorized using partial vectors. */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" > { target { vect_unpack && {! vect_partial_vectors_usage_1 } } xfail { > vect_variable_length && vect_load_lanes } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" > { target { vect_unpack && { vect_partial_vectors_usage_1 } } xfail { > vect_variable_length && vect_load_lanes } } } } */ No need for the braces around vect_partial_vectors_usage_1 when it's not negated. Same for later tests. > +# Return true if loops using partial vectors are supported but only for loops > +# whose need to iterate can be removed, that is, value of > +# param_vect_partial_vector_usage is set to 1. For these comments, I think it would be good to use the sourcebuild.texi wording, but with: Return true if the target supports … instead of just “Target supports …”. OK with those changes, thanks. Richard