123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /* { dg-do run } */
- /* { dg-additional-options "-ftree-parallelize-loops=2" } */
- /* Variable bound, vector addition, signed loop counter, unsigned bound. */
- #include <stdio.h>
- #include <stdlib.h>
- #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)
- {
- 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;
- }
|