Richard Biener <rguent...@suse.de> writes:

> On Wed, 3 Nov 2021, Jiufu Guo wrote:
>
>> Richard Biener <rguent...@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.

Thanks Richard,

The final IV would be the index of last iteration, test test cases
are checking if it is just wrap around max/min of the index type.

I updated the patch accordingly.

BR,
Jiufu


--------------------
[PATCH] Update dg-require-effective-target for pr101145 cases

For test cases pr101145*.c, some types are not able to be
vectorized on some targets. This patch updates
dg-require-effective-target according to test cases.

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..24a9da63e88 100644
--- a/gcc/testsuite/gcc.dg/vect/pr101145_1.c
+++ b/gcc/testsuite/gcc.dg/vect/pr101145_1.c
@@ -1,4 +1,4 @@
-/* { dg-require-effective-target vect_int } */
+/* { dg-require-effective-target vect_char_add } */
 /* { dg-additional-options "-O3" } */
 #define TYPE signed char
 #define MIN -128
diff --git a/gcc/testsuite/gcc.dg/vect/pr101145_2.c 
b/gcc/testsuite/gcc.dg/vect/pr101145_2.c
index fa2c6be689a..9091f606066 100644
--- a/gcc/testsuite/gcc.dg/vect/pr101145_2.c
+++ b/gcc/testsuite/gcc.dg/vect/pr101145_2.c
@@ -1,4 +1,4 @@
-/* { dg-require-effective-target vect_int } */
+/* { dg-require-effective-target vect_char_add } */
 /* { dg-additional-options "-O3" } */
 #define TYPE unsigned char
 #define MIN 0
diff --git a/gcc/testsuite/gcc.dg/vect/pr101145_3.c 
b/gcc/testsuite/gcc.dg/vect/pr101145_3.c
index 9f43c82593f..001e5f38a46 100644
--- a/gcc/testsuite/gcc.dg/vect/pr101145_3.c
+++ b/gcc/testsuite/gcc.dg/vect/pr101145_3.c
@@ -1,4 +1,4 @@
-/* { dg-require-effective-target vect_int } */
+/* { dg-require-effective-target vect_long_long } */
 /* { dg-additional-options "-O3" } */
 #define TYPE int *
 #define MIN ((TYPE)0)
-- 
2.17.1

>
>> 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" } } */
>> >> 
>> 

Reply via email to