2018-03-08 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / avx512f-scatter-2.c
blobc59ce234f177820f06be60146910650a3d98b1e5
1 /* { dg-do run } */
2 /* { dg-require-effective-target avx512f } */
3 /* { dg-options "-O3 -mavx512f" } */
5 #define AVX512F
7 #include "avx512f-check.h"
9 #define N 1024
10 float vf1[N], vf2[2*N+16];
11 double vd1[N], vd2[2*N+16];
12 int k[N];
13 long l[N];
14 short n[2*N+16];
16 __attribute__((noinline, noclone)) void
17 f1 (void)
19 int i;
20 for (i = 0; i < N; i++)
21 vf2[k[i]] = vf1[i];
24 __attribute__((noinline, noclone)) void
25 f2 (void)
27 int i;
28 for (i = 0; i < N; i++)
29 n[k[i]] = (int) vf1[i];
32 __attribute__((noinline, noclone)) void
33 f3 (int x)
35 int i;
36 for (i = 0; i < N; i++)
37 vf2[k[i] + x] = vf1[i];
40 __attribute__((noinline, noclone)) void
41 f4 (int x)
43 int i;
44 for (i = 0; i < N; i++)
45 n[k[i] + x] = (int) vf1[i];
48 __attribute__((noinline, noclone)) void
49 f5 (void)
51 int i;
52 for (i = 0; i < N; i++)
53 vd2[k[i]] = vd1[i];
56 __attribute__((noinline, noclone)) void
57 f6 (void)
59 int i;
60 for (i = 0; i < N; i++)
61 n[k[i]] = (int) vd1[i];
64 __attribute__((noinline, noclone)) void
65 f7 (int x)
67 int i;
68 for (i = 0; i < N; i++)
69 vd2[k[i] + x] = vd1[i];
72 __attribute__((noinline, noclone)) void
73 f8 (int x)
75 int i;
76 for (i = 0; i < N; i++)
77 n[k[i] + x] = vd1[i];
80 __attribute__((noinline, noclone)) void
81 f9 (void)
83 int i;
84 for (i = 0; i < N; i++)
85 vf2[l[i]] = vf1[i];
88 __attribute__((noinline, noclone)) void
89 f10 (void)
91 int i;
92 for (i = 0; i < N; i++)
93 n[l[i]] = (int) vf1[i];
96 __attribute__((noinline, noclone)) void
97 f11 (long x)
99 int i;
100 for (i = 0; i < N; i++)
101 vf2[l[i] + x] = vf1[i];
104 __attribute__((noinline, noclone)) void
105 f12 (long x)
107 int i;
108 for (i = 0; i < N; i++)
109 n[l[i] + x] = (int) vf1[i];
112 __attribute__((noinline, noclone)) void
113 f13 (void)
115 int i;
116 for (i = 0; i < N; i++)
117 vd2[l[i]] = vd1[i];
120 __attribute__((noinline, noclone)) void
121 f14 (void)
123 int i;
124 for (i = 0; i < N; i++)
125 n[l[i]] = (int) vd1[i];
128 __attribute__((noinline, noclone)) void
129 f15 (long x)
131 int i;
132 for (i = 0; i < N; i++)
133 vd2[l[i] + x] = vd1[i];
136 __attribute__((noinline, noclone)) void
137 f16 (long x)
139 int i;
140 for (i = 0; i < N; i++)
141 n[l[i] + x] = (int) vd1[i];
144 static void
145 avx512f_test (void)
147 int i;
149 for (i = 0; i < N; i++)
151 asm ("");
152 vf1[i] = 17.0f + i;
153 vd1[i] = 19.0 + i;
155 for (i = 0; i < N; i++)
157 asm ("");
158 k[i] = (i % 2) ? (N / 2 + i) : (N / 2 - i / 2);
159 l[i] = 2 * i + i % 2;
162 f1 ();
163 f2 ();
164 for (i = 0; i < N; i++)
165 if (vf2[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 17
166 || n[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 17)
167 abort ();
169 f3 (12);
170 f4 (14);
171 for (i = 0; i < N; i++)
172 if (vf2[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 12] != i + 17
173 || n[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 14] != i + 17)
174 abort ();
176 f5 ();
177 f6 ();
178 for (i = 0; i < N; i++)
179 if (vd2[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 19
180 || n[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 19)
181 abort ();
183 f7 (7);
184 f8 (9);
185 for (i = 0; i < N; i++)
186 if (vd2[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 7] != i + 19
187 || n[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 9] != i + 19)
188 abort ();
190 f9 ();
191 f10 ();
192 for (i = 0; i < N; i++)
193 if (vf2[2 * i + i % 2] != i + 17
194 || n[2 * i + i % 2] != i + 17)
195 abort ();
197 f11 (2);
198 f12 (4);
199 for (i = 0; i < N; i++)
200 if (vf2[2 * i + i % 2 + 2] != i + 17
201 || n[2 * i + i % 2 + 4] != i + 17)
202 abort ();
204 f13 ();
205 f14 ();
206 for (i = 0; i < N; i++)
207 if (vd2[2 * i + i % 2] != i + 19
208 || n[2 * i + i % 2] != i + 19)
209 abort ();
211 f15 (13);
212 f16 (15);
213 for (i = 0; i < N; i++)
214 if (vd2[2 * i + i % 2 + 13] != i + 19
215 || n[2 * i + i % 2 + 15] != i + 19)
216 abort ();