2018-03-08 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / avx512f-scatter-1.c
blob575f3bfa70c65b00c8a21a85070073262bffe915
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 vi1[N], vi2[2*N+16], k[N];
13 long vl1[N], vl2[2*N+16], l[N];
15 __attribute__((noinline, noclone)) void
16 f1 (void)
18 int i;
19 for (i = 0; i < N; i++)
20 vf2[k[i]] = vf1[i];
23 __attribute__((noinline, noclone)) void
24 f2 (void)
26 int i;
27 for (i = 0; i < N; i++)
28 vi2[k[i]] = vi1[i];
31 __attribute__((noinline, noclone)) void
32 f3 (int x)
34 int i;
35 for (i = 0; i < N; i++)
36 vf2[k[i] + x] = vf1[i];
39 __attribute__((noinline, noclone)) void
40 f4 (int x)
42 int i;
43 for (i = 0; i < N; i++)
44 vi2[k[i] + x] = vi1[i];
47 __attribute__((noinline, noclone)) void
48 f5 (void)
50 int i;
51 for (i = 0; i < N; i++)
52 vd2[k[i]] = vd1[i];
55 __attribute__((noinline, noclone)) void
56 f6 (void)
58 int i;
59 for (i = 0; i < N; i++)
60 vl2[k[i]] = vl1[i];
63 __attribute__((noinline, noclone)) void
64 f7 (int x)
66 int i;
67 for (i = 0; i < N; i++)
68 vd2[k[i] + x] = vd1[i];
71 __attribute__((noinline, noclone)) void
72 f8 (int x)
74 int i;
75 for (i = 0; i < N; i++)
76 vl2[k[i] + x] = vl1[i];
79 __attribute__((noinline, noclone)) void
80 f9 (void)
82 int i;
83 for (i = 0; i < N; i++)
84 vf2[l[i]] = vf1[i];
87 __attribute__((noinline, noclone)) void
88 f10 (void)
90 int i;
91 for (i = 0; i < N; i++)
92 vi2[l[i]] = vi1[i];
95 __attribute__((noinline, noclone)) void
96 f11 (long x)
98 int i;
99 for (i = 0; i < N; i++)
100 vf2[l[i] + x] = vf1[i];
103 __attribute__((noinline, noclone)) void
104 f12 (long x)
106 int i;
107 for (i = 0; i < N; i++)
108 vi2[l[i] + x] = vi1[i];
111 __attribute__((noinline, noclone)) void
112 f13 (void)
114 int i;
115 for (i = 0; i < N; i++)
116 vd2[l[i]] = vd1[i];
119 __attribute__((noinline, noclone)) void
120 f14 (void)
122 int i;
123 for (i = 0; i < N; i++)
124 vl2[l[i]] = vl1[i];
127 __attribute__((noinline, noclone)) void
128 f15 (long x)
130 int i;
131 for (i = 0; i < N; i++)
132 vd2[l[i] + x] = vd1[i];
135 __attribute__((noinline, noclone)) void
136 f16 (long x)
138 int i;
139 for (i = 0; i < N; i++)
140 vl2[l[i] + x] = vl1[i];
143 static void
144 avx512f_test (void)
146 int i;
148 for (i = 0; i < N; i++)
150 asm ("");
151 vf1[i] = 17.0f + i;
152 vd1[i] = 19.0 + i;
153 vi1[i] = 21 + i;
154 vl1[i] = 23L + i;
156 for (i = 0; i < N; i++)
158 asm ("");
159 k[i] = (i % 2) ? (N / 2 + i) : (N / 2 - i / 2);
160 l[i] = 2 * i + i % 2;
163 f1 ();
164 f2 ();
165 for (i = 0; i < N; i++)
166 if (vf2[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 17
167 || vi2[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 21)
168 abort ();
170 f3 (12);
171 f4 (14);
172 for (i = 0; i < N; i++)
173 if (vf2[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 12] != i + 17
174 || vi2[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 14] != i + 21)
175 abort ();
177 f5 ();
178 f6 ();
179 for (i = 0; i < N; i++)
180 if (vd2[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 19
181 || vl2[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 23)
182 abort ();
184 f7 (7);
185 f8 (9);
186 for (i = 0; i < N; i++)
187 if (vd2[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 7] != i + 19
188 || vl2[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 9] != i + 23)
189 abort ();
191 f9 ();
192 f10 ();
193 for (i = 0; i < N; i++)
194 if (vf2[2 * i + i % 2] != i + 17
195 || vi2[2 * i + i % 2] != i + 21)
196 abort ();
198 f11 (2);
199 f12 (4);
200 for (i = 0; i < N; i++)
201 if (vf2[2 * i + i % 2 + 2] != i + 17
202 || vi2[2 * i + i % 2 + 4] != i + 21)
203 abort ();
205 f13 ();
206 f14 ();
207 for (i = 0; i < N; i++)
208 if (vd2[2 * i + i % 2] != i + 19
209 || vl2[2 * i + i % 2] != i + 23)
210 abort ();
212 f15 (13);
213 f16 (15);
214 for (i = 0; i < N; i++)
215 if (vd2[2 * i + i % 2 + 13] != i + 19
216 || vl2[2 * i + i % 2 + 15] != i + 23)
217 abort ();