[PATCH] Check number of iterations for test cases pr101145

Jiufu Guo guojiufu@linux.ibm.com
Thu Nov 4 02:25:24 GMT 2021


Richard Biener <rguenther@suse.de> writes:

> On Wed, 3 Nov 2021, Jiufu Guo wrote:
>
>> Richard Biener <rguenther@suse.de> writes:
>> 
>> > On Mon, 1 Nov 2021, Jiufu Guo wrote:
>> >
>> >> PR101145 is supporting if the number of iterations can be calculated
>> >> for the 'until wrap' condition.  Current test cases are checking if
>> >> the loop can be vectorized, if a loop can be vectorized then the number
>> >> of interations is known.  While it would be better to check the loop's
>> >> number of iterations directly.  This patch updates the test cases
>> >> accordingly.
>> >> 
>> >> Bootstrap and regtest pass on ppc,ppc64le and x86_64.
>> >> Is this ok for trunk?
>> >
>> > Not sure - the motivation was to make the loop vectorizable so
>> > a vectorized check is strictly more powerful.  What's the problem
>> > with the existing test?
>> 
>> Thanks, Richard!
>> 
>> The problem of current tests is that some targets do not support
>> vectorization on some types, like "vector(8) unsigned char" on
>> Solaris/SPARC, "vector long long" on Power7:
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102946
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102069
>> 
>> On those targets, the "number of iterations" was calculated for
>> the loops in the test cases, while the loops are not vectorized.
>
> I see, but can you add appropriate target selectors for the
> vectorization then and keep those scans?  I'm not sure why you
> return the final IV value from the functions rather than
> testing correct data in a[], that will complicate selecting the
> targets that can vectorize things.  There is vect_char_add and
> vect_long_long you could require in addition to vect_int.

Hi Richard,

Thanks a lot for your sugguestion! vect_char_add and vect_long_long
would help these cases. I would update accordingly.
One small concern: these cases may not be tested on some platform.

BR,
Jiufu

>
>> The functionality of the patch in PR101145 is to enhance
>> number_of_iterations_cond to calculate the "# of iterations" for
>> the condition like 'while (i-- < n) or (i++ > n)'.
>> When I add cases pr101145*.c, vectorization is used test.  At that
>> time, I also think checking vectorization would be more strict,
>> since the goal of computing '# of iterations' is to enable other
>> optimizations, like 'vectorization'.
>> 
>> While, I'm wondering it may be better to check the "# of iterations"
>> directly, because the number of iterations is still useful even
>> loops are not vectorized.
>> 
>> BR,
>> Jiufu
>> 
>> >
>> > Richard.
>> >
>> >> BR,
>> >> Jiufu
>> >> 
>> >> gcc/testsuite/ChangeLog:
>> >> 
>> >> 	* gcc.dg/vect/pr101145_1.c: Update case.
>> >> 	* gcc.dg/vect/pr101145_2.c: Update case.
>> >> 	* gcc.dg/vect/pr101145_3.c: Update case.
>> >> 
>> >> ---
>> >>  gcc/testsuite/gcc.dg/vect/pr101145_1.c | 2 +-
>> >>  gcc/testsuite/gcc.dg/vect/pr101145_2.c | 2 +-
>> >>  gcc/testsuite/gcc.dg/vect/pr101145_3.c | 2 +-
>> >>  3 files changed, 3 insertions(+), 3 deletions(-)
>> >> 
>> >> diff --git a/gcc/testsuite/gcc.dg/vect/pr101145_1.c b/gcc/testsuite/gcc.dg/vect/pr101145_1.c
>> >> index 9332b2c4257..13a89fa6863 100644
>> >> --- a/gcc/testsuite/gcc.dg/vect/pr101145_1.c
>> >> +++ b/gcc/testsuite/gcc.dg/vect/pr101145_1.c
>> >> @@ -10,4 +10,4 @@
>> >>  
>> >>  #include "pr101145.inc"
>> >>  
>> >> -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
>> >> +/* { dg-final { scan-tree-dump-times "Symbolic number of iterations is" 2 "vect" } } */
>> >> diff --git a/gcc/testsuite/gcc.dg/vect/pr101145_2.c b/gcc/testsuite/gcc.dg/vect/pr101145_2.c
>> >> index fa2c6be689a..5265491b98d 100644
>> >> --- a/gcc/testsuite/gcc.dg/vect/pr101145_2.c
>> >> +++ b/gcc/testsuite/gcc.dg/vect/pr101145_2.c
>> >> @@ -10,4 +10,4 @@
>> >>  
>> >>  #include "pr101145.inc"
>> >>  
>> >> -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
>> >> +/* { dg-final { scan-tree-dump-times "Symbolic number of iterations is" 2 "vect" } } */
>> >> diff --git a/gcc/testsuite/gcc.dg/vect/pr101145_3.c b/gcc/testsuite/gcc.dg/vect/pr101145_3.c
>> >> index 9f43c82593f..ffda26cf0bc 100644
>> >> --- a/gcc/testsuite/gcc.dg/vect/pr101145_3.c
>> >> +++ b/gcc/testsuite/gcc.dg/vect/pr101145_3.c
>> >> @@ -10,4 +10,4 @@
>> >>  
>> >>  #include "pr101145.inc"
>> >>  
>> >> -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
>> >> +/* { dg-final { scan-tree-dump-times "Symbolic number of iterations is" 2 "vect" } } */
>> >> 
>> 


More information about the Gcc-patches mailing list