* gcc.target/i386/pr70021.c: Add -mtune=skylake.
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / avx512f-gather-3.c
blob5e20dd8898a13f44a7734ce20a5bad1daa5aaa62
1 /* { dg-do run } */
2 /* { dg-require-effective-target avx512f } */
3 /* { dg-options "-O3 -mavx512f -ffast-math" } */
5 #include "avx512f-check.h"
7 #define N 1024
8 float f[N];
9 double d[N];
10 int k[N];
11 float *l[N];
12 double *n[N];
13 int **m[N];
14 long q[N];
15 long long **o[N];
16 long long t[N];
17 long long *r[N];
18 int *s[N];
20 __attribute__((noinline, noclone)) float
21 f1 (void)
23 int i;
24 float g = 0.0;
25 for (i = 0; i < N / 2; i++)
26 g += f[k[i]];
27 return g;
30 __attribute__((noinline, noclone)) float
31 f2 (float *p)
33 int i;
34 float g = 0.0;
35 for (i = 0; i < N / 2; i++)
36 g += p[k[i]];
37 return g;
40 __attribute__((noinline, noclone)) float
41 f3 (void)
43 int i;
44 float g = 0.0;
45 for (i = 0; i < N / 2; i++)
46 g += *l[i];
47 return g;
50 __attribute__((noinline, noclone)) int
51 f4 (void)
53 int i;
54 int g = 0;
55 for (i = 0; i < N / 2; i++)
56 g += **m[i];
57 return g;
60 __attribute__((noinline, noclone)) double
61 f5 (void)
63 int i;
64 double g = 0.0;
65 for (i = 0; i < N / 2; i++)
66 g += d[k[i]];
67 return g;
70 __attribute__((noinline, noclone)) double
71 f6 (double *p)
73 int i;
74 double g = 0.0;
75 for (i = 0; i < N / 2; i++)
76 g += p[k[i]];
77 return g;
80 __attribute__((noinline, noclone)) double
81 f7 (void)
83 int i;
84 double g = 0.0;
85 for (i = 0; i < N / 2; i++)
86 g += *n[i];
87 return g;
90 __attribute__((noinline, noclone)) int
91 f8 (void)
93 int i;
94 int g = 0;
95 for (i = 0; i < N / 2; i++)
96 g += **o[i];
97 return g;
100 __attribute__((noinline, noclone)) float
101 f9 (void)
103 int i;
104 float g = 0.0;
105 for (i = 0; i < N / 2; i++)
106 g += f[q[i]];
107 return g;
110 __attribute__((noinline, noclone)) float
111 f10 (float *p)
113 int i;
114 float g = 0.0;
115 for (i = 0; i < N / 2; i++)
116 g += p[q[i]];
117 return g;
120 __attribute__((noinline, noclone)) double
121 f11 (void)
123 int i;
124 double g = 0.0;
125 for (i = 0; i < N / 2; i++)
126 g += d[q[i]];
127 return g;
130 __attribute__((noinline, noclone)) double
131 f12 (double *p)
133 int i;
134 double g = 0.0;
135 for (i = 0; i < N / 2; i++)
136 g += p[q[i]];
137 return g;
140 static void
141 avx512f_test (void)
143 int i;
145 for (i = 0; i < N; i++)
147 asm ("");
148 f[i] = -256.0f + i;
149 d[i] = -258.0 + i;
150 k[i] = (i * 731) & (N - 1);
151 q[i] = (i * 657) & (N - 1);
152 t[i] = (i * 657) & (N - 1);
153 l[i] = &f[(i * 239) & (N - 1)];
154 n[i] = &d[(i * 271) & (N - 1)];
155 r[i] = &t[(i * 323) & (N - 1)];
156 s[i] = &k[(i * 565) & (N - 1)];
157 m[i] = &s[(i * 13) & (N - 1)];
158 o[i] = &r[(i * 19) & (N - 1)];
161 if (f1 () != 136448.0f || f2 (f) != 136448.0f || f3 () != 130304.0)
162 abort ();
163 if (f4 () != 261376 || f5 () != 135424.0 || f6 (d) != 135424.0)
164 abort ();
165 if (f7 () != 129280.0 || f8 () != 259840L || f9 () != 130816.0f)
166 abort ();
167 if (f10 (f) != 130816.0f || f11 () != 129792.0 || f12 (d) != 129792.0)
168 abort ();