From: Tom de Vries Date: Tue, 30 Jun 2015 11:00:32 +0000 (+0000) Subject: Add parloops-exit-first-loop-alt-{5,6,7}.c X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8a36714a1b9855a1a0d99fe162947258c7ecd674;p=gcc.git Add parloops-exit-first-loop-alt-{5,6,7}.c 2015-06-30 Tom de Vries * gcc.dg/parloops-exit-first-loop-alt-5.c: New test. * gcc.dg/parloops-exit-first-loop-alt-6.c: New test. * gcc.dg/parloops-exit-first-loop-alt-7.c: New test. * gcc.dg/parloops-exit-first-loop-alt.c: Update comment. * testsuite/libgomp.c/parloops-exit-first-loop-alt-5.c: New test. * testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c: New test. * testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c: New test. * testsuite/libgomp.c/parloops-exit-first-loop-alt.c: Update comment. From-SVN: r225172 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b006b4c021b..8716cd3b9f6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2015-06-30 Tom de Vries + + * gcc.dg/parloops-exit-first-loop-alt-5.c: New test. + * gcc.dg/parloops-exit-first-loop-alt-6.c: New test. + * gcc.dg/parloops-exit-first-loop-alt-7.c: New test. + * gcc.dg/parloops-exit-first-loop-alt.c: Update comment. + 2015-06-30 Marek Polacek * gcc.dg/fold-ior-2.c: New test. diff --git a/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-5.c b/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-5.c new file mode 100644 index 00000000000..3f799cf234d --- /dev/null +++ b/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-5.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target pthread } */ +/* { dg-options "-O2 -ftree-parallelize-loops=2 -fdump-tree-parloops" } */ + +/* Variable bound, vector addition, unsigned loop counter, unsigned bound. */ + +void +f (unsigned int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b, + unsigned int *__restrict__ c) +{ + unsigned int i; + + for (i = 0; i < n; ++i) + c[i] = a[i] + b[i]; +} + +/* Three times a store: + - one in f._loopfn.0 + - one in the parallel + - one in the low iteration count loop + Crucially, none for a peeled off last iteration following the parallel. */ +/* { dg-final { scan-tree-dump-times "(?n)^ \\*_\[0-9\]*" 3 "parloops" } } */ diff --git a/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-6.c b/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-6.c new file mode 100644 index 00000000000..ee19a55849a --- /dev/null +++ b/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-6.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target pthread } */ +/* { dg-options "-O2 -ftree-parallelize-loops=2 -fdump-tree-parloops" } */ + +/* Variable bound, vector addition, unsigned loop counter, signed bound. */ + +void +f (int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b, + unsigned int *__restrict__ c) +{ + unsigned int i; + + for (i = 0; i < n; ++i) + c[i] = a[i] + b[i]; +} + +/* Three times a store: + - one in f._loopfn.0 + - one in the parallel + - one in the low iteration count loop + Crucially, none for a peeled off last iteration following the parallel. */ +/* { dg-final { scan-tree-dump-times "(?n)^ \\*_\[0-9\]*" 3 "parloops" } } */ diff --git a/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-7.c b/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-7.c new file mode 100644 index 00000000000..c3373425281 --- /dev/null +++ b/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-7.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target pthread } */ +/* { dg-options "-O2 -ftree-parallelize-loops=2 -fdump-tree-parloops" } */ + +/* Variable bound, vector addition, signed loop counter, signed bound. */ + +void +f (int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b, + unsigned int *__restrict__ c) +{ + int i; + + for (i = 0; i < n; ++i) + c[i] = a[i] + b[i]; +} + +/* Three times a store: + - one in f._loopfn.0 + - one in the parallel + - one in the low iteration count loop + Crucially, none for a peeled off last iteration following the parallel. */ +/* { dg-final { scan-tree-dump-times "(?n)^ \\*_\[0-9\]*" 3 "parloops" } } */ diff --git a/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt.c b/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt.c index e088fa110b3..0b6916507f4 100644 --- a/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt.c +++ b/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt.c @@ -2,7 +2,7 @@ /* { dg-require-effective-target pthread } */ /* { dg-options "-O2 -ftree-parallelize-loops=2 -fdump-tree-parloops" } */ -/* Variable bound, vector addition. */ +/* Variable bound, vector addition, signed loop counter, unsigned bound. */ void f (unsigned int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b, diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 2c539b821ac..a5c51f5639d 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,10 @@ +2015-06-30 Tom de Vries + + * testsuite/libgomp.c/parloops-exit-first-loop-alt-5.c: New test. + * testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c: New test. + * testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c: New test. + * testsuite/libgomp.c/parloops-exit-first-loop-alt.c: Update comment. + 2015-06-30 Tom de Vries PR tree-optimization/66652 diff --git a/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-5.c b/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-5.c new file mode 100644 index 00000000000..d8d49b41aa5 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-5.c @@ -0,0 +1,75 @@ +/* { dg-do run } */ +/* { dg-additional-options "-ftree-parallelize-loops=2" } */ + +/* Variable bound, vector addition, unsigned loop counter, unsigned bound. */ + +#include +#include + +#define N 1000 + +unsigned int a[N]; +unsigned int b[N]; +unsigned int c[N]; + +void __attribute__((noclone,noinline)) +f (unsigned int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b, + unsigned int *__restrict__ c) +{ + unsigned int i; + + for (i = 0; i < n; ++i) + c[i] = a[i] + b[i]; +} + +static void __attribute__((noclone,noinline)) +init (void) +{ + int i, j; + + /* Complexify loop to inhibit parloops. */ + for (j = 0; j < 100; ++j) + for (i = 0; i < 10; i++) + { + int k = i + (10 * j); + a[k] = k; + b[k] = (k * 3) % 7; + c[k] = k * 2; + } +} + +int +main (void) +{ + int i; + + init (); + + f (N, a, b, c); + + for (i = 0; i < N; i++) + { + unsigned int actual = c[i]; + unsigned int expected = i + ((i * 3) % 7); + if (actual != expected) + abort (); + } + + /* Test low iteration count case. */ + + init (); + + f (10, a, b, c); + + for (i = 0; i < N; i++) + { + unsigned int actual = c[i]; + unsigned int expected = (i < 10 + ? i + ((i * 3) % 7) + : i * 2); + if (actual != expected) + abort (); + } + + return 0; +} diff --git a/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c b/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c new file mode 100644 index 00000000000..99c61c0c967 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c @@ -0,0 +1,75 @@ +/* { dg-do run } */ +/* { dg-additional-options "-ftree-parallelize-loops=2" } */ + +/* Variable bound, vector addition, unsigned loop counter, signed bound. */ + +#include +#include + +#define N 1000 + +unsigned int a[N]; +unsigned int b[N]; +unsigned int c[N]; + +void __attribute__((noclone,noinline)) +f (int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b, + unsigned int *__restrict__ c) +{ + unsigned int i; + + for (i = 0; i < n; ++i) + c[i] = a[i] + b[i]; +} + +static void __attribute__((noclone,noinline)) +init (void) +{ + int i, j; + + /* Complexify loop to inhibit parloops. */ + for (j = 0; j < 100; ++j) + for (i = 0; i < 10; i++) + { + int k = i + (10 * j); + a[k] = k; + b[k] = (k * 3) % 7; + c[k] = k * 2; + } +} + +int +main (void) +{ + int i; + + init (); + + f (N, a, b, c); + + for (i = 0; i < N; i++) + { + unsigned int actual = c[i]; + unsigned int expected = i + ((i * 3) % 7); + if (actual != expected) + abort (); + } + + /* Test low iteration count case. */ + + init (); + + f (10, a, b, c); + + for (i = 0; i < N; i++) + { + unsigned int actual = c[i]; + unsigned int expected = (i < 10 + ? i + ((i * 3) % 7) + : i * 2); + if (actual != expected) + abort (); + } + + return 0; +} diff --git a/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c b/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c new file mode 100644 index 00000000000..1f6e5e42ea4 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c @@ -0,0 +1,75 @@ +/* { dg-do run } */ +/* { dg-additional-options "-ftree-parallelize-loops=2" } */ + +/* Variable bound, vector addition, signed loop counter, signed bound. */ + +#include +#include + +#define N 1000 + +unsigned int a[N]; +unsigned int b[N]; +unsigned int c[N]; + +void __attribute__((noclone,noinline)) +f (int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b, + unsigned int *__restrict__ c) +{ + int i; + + for (i = 0; i < n; ++i) + c[i] = a[i] + b[i]; +} + +static void __attribute__((noclone,noinline)) +init (void) +{ + int i, j; + + /* Complexify loop to inhibit parloops. */ + for (j = 0; j < 100; ++j) + for (i = 0; i < 10; i++) + { + int k = i + (10 * j); + a[k] = k; + b[k] = (k * 3) % 7; + c[k] = k * 2; + } +} + +int +main (void) +{ + int i; + + init (); + + f (N, a, b, c); + + for (i = 0; i < N; i++) + { + unsigned int actual = c[i]; + unsigned int expected = i + ((i * 3) % 7); + if (actual != expected) + abort (); + } + + /* Test low iteration count case. */ + + init (); + + f (10, a, b, c); + + for (i = 0; i < N; i++) + { + unsigned int actual = c[i]; + unsigned int expected = (i < 10 + ? i + ((i * 3) % 7) + : i * 2); + if (actual != expected) + abort (); + } + + return 0; +} diff --git a/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt.c b/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt.c index 07468a9ab9e..d67a4f67ece 100644 --- a/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt.c +++ b/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt.c @@ -1,7 +1,7 @@ /* { dg-do run } */ /* { dg-additional-options "-ftree-parallelize-loops=2" } */ -/* Variable bound, vector addition. */ +/* Variable bound, vector addition, signed loop counter, unsigned bound. */ #include #include