libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / pr103116-1.c
blob280ec57eb4b9c2559c2b7b11932aa6ac3fbfb7e9
1 /* { dg-require-effective-target mmap } */
3 #include <sys/mman.h>
4 #include <stdio.h>
6 #define COUNT 128
7 #define MMAP_SIZE 0x20000
8 #define ADDRESS 0x1122000000
9 #define TYPE unsigned int
11 #ifndef MAP_ANONYMOUS
12 #define MAP_ANONYMOUS MAP_ANON
13 #endif
15 void __attribute__((noipa))
16 loop (TYPE *restrict x, TYPE *restrict y)
18 for (int i = 0; i < COUNT; ++i)
20 x[i * 4] = y[i * 2] + 1;
21 x[i * 4 + 1] = y[i * 2] + 2;
22 x[i * 4 + 2] = y[i * 2 + 1] + 3;
23 x[i * 4 + 3] = y[i * 2 + 1] + 4;
27 TYPE x[COUNT * 4];
29 int
30 main (void)
32 void *y;
33 TYPE *end_y;
35 y = mmap ((void *) ADDRESS, MMAP_SIZE, PROT_READ | PROT_WRITE,
36 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
37 if (y == MAP_FAILED)
39 perror ("mmap");
40 return 1;
43 end_y = (TYPE *) ((char *) y + MMAP_SIZE);
45 loop (x, end_y - COUNT * 2);
47 return 0;
50 /* When the target can compose a vector from its half we do not require
51 a scalar epilogue, but there's no effective target for this. */
52 /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target { vect_perm && vect_int } } } } */