2018-05-17 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / avx512vl-gather-1.c
blobcb70057591269cd4284118ab7401dfc59c620754
1 /* { dg-do run } */
2 /* { dg-require-effective-target avx512vl } */
3 /* { dg-options "-O3 -mavx512vl" } */
5 #include "avx512vl-check.h"
7 #define N 12
8 float vf1[N+4], vf2[N];
9 double vd1[N+4], vd2[N];
10 int vi1[N+4], vi2[N], k[N];
11 long long vl1[N+4], vl2[N];
12 long l[N];
14 __attribute__((noinline, noclone)) void
15 f1 (void)
17 int i;
18 for (i = 0; i < N; i++)
19 vf2[i] = vf1[k[i]];
22 __attribute__((noinline, noclone)) void
23 f2 (void)
25 int i;
26 for (i = 0; i < N; i++)
27 vi2[i] = vi1[k[i]];
30 __attribute__((noinline, noclone)) void
31 f3 (int x)
33 int i;
34 for (i = 0; i < N; i++)
35 vf2[i] = vf1[k[i] + x];
38 __attribute__((noinline, noclone)) void
39 f4 (int x)
41 int i;
42 for (i = 0; i < N; i++)
43 vi2[i] = vi1[k[i] + x];
46 __attribute__((noinline, noclone)) void
47 f5 (void)
49 int i;
50 for (i = 0; i < N; i++)
51 vd2[i] = vd1[k[i]];
54 __attribute__((noinline, noclone)) void
55 f6 (void)
57 int i;
58 for (i = 0; i < N; i++)
59 vl2[i] = vl1[k[i]];
62 __attribute__((noinline, noclone)) void
63 f7 (int x)
65 int i;
66 for (i = 0; i < N; i++)
67 vd2[i] = vd1[k[i] + x];
70 __attribute__((noinline, noclone)) void
71 f8 (int x)
73 int i;
74 for (i = 0; i < N; i++)
75 vl2[i] = vl1[k[i] + x];
78 __attribute__((noinline, noclone)) void
79 f9 (void)
81 int i;
82 for (i = 0; i < N; i++)
83 vf2[i] = vf1[l[i]];
86 __attribute__((noinline, noclone)) void
87 f10 (void)
89 int i;
90 for (i = 0; i < N; i++)
91 vi2[i] = vi1[l[i]];
94 __attribute__((noinline, noclone)) void
95 f11 (int x)
97 int i;
98 for (i = 0; i < N; i++)
99 vf2[i] = vf1[l[i] + x];
102 __attribute__((noinline, noclone)) void
103 f12 (int x)
105 int i;
106 for (i = 0; i < N; i++)
107 vi2[i] = vi1[l[i] + x];
110 __attribute__((noinline, noclone)) void
111 f13 (void)
113 int i;
114 for (i = 0; i < N; i++)
115 vd2[i] = vd1[l[i]];
118 __attribute__((noinline, noclone)) void
119 f14 (void)
121 int i;
122 for (i = 0; i < N; i++)
123 vl2[i] = vl1[l[i]];
126 __attribute__((noinline, noclone)) void
127 f15 (int x)
129 int i;
130 for (i = 0; i < N; i++)
131 vd2[i] = vd1[l[i] + x];
134 __attribute__((noinline, noclone)) void
135 f16 (int x)
137 int i;
138 for (i = 0; i < N; i++)
139 vl2[i] = vl1[l[i] + x];
142 static void
143 avx512vl_test (void)
145 int i;
147 for (i = 0; i < N + 4; i++)
149 asm ("");
150 vf1[i] = 17.0f + i;
151 vd1[i] = 19.0 + i;
152 vi1[i] = 21 + i;
153 vl1[i] = 23L + i;
155 for (i = 0; i < N; i++)
157 asm ("");
158 k[i] = (i * 731) & (N - 1);
159 l[i] = (i * 657) & (N - 1);
162 f1 ();
163 f2 ();
164 for (i = 0; i < N; i++)
165 if (vf2[i] != ((i * 731) & (N - 1)) + 17
166 || vi2[i] != ((i * 731) & (N - 1)) + 21)
167 abort ();
169 f3 (1);
170 f4 (2);
171 for (i = 0; i < N; i++)
172 if (vf2[i] != ((i * 731) & (N - 1)) + 17 + 1
173 || vi2[i] != ((i * 731) & (N - 1)) + 21 + 2)
174 abort ();
176 f5 ();
177 f6 ();
178 for (i = 0; i < N; i++)
179 if (vd2[i] != ((i * 731) & (N - 1)) + 19
180 || vl2[i] != ((i * 731) & (N - 1)) + 23)
181 abort ();
183 f7 (3);
184 f8 (2);
185 for (i = 0; i < N; i++)
186 if (vd2[i] != ((i * 731) & (N - 1)) + 19 + 3
187 || vl2[i] != ((i * 731) & (N - 1)) + 23 + 2)
188 abort ();
190 f9 ();
191 f10 ();
192 for (i = 0; i < N; i++)
193 if (vf2[i] != ((i * 657) & (N - 1)) + 17
194 || vi2[i] != ((i * 657) & (N - 1)) + 21)
195 abort ();
197 f11 (4);
198 f12 (1);
199 for (i = 0; i < N; i++)
200 if (vf2[i] != ((i * 657) & (N - 1)) + 17 + 4
201 || vi2[i] != ((i * 657) & (N - 1)) + 21 + 1)
202 abort ();
204 f13 ();
205 f14 ();
206 for (i = 0; i < N; i++)
207 if (vd2[i] != ((i * 657) & (N - 1)) + 19
208 || vl2[i] != ((i * 657) & (N - 1)) + 23)
209 abort ();
211 f15 (2);
212 f16 (4);
213 for (i = 0; i < N; i++)
214 if (vd2[i] != ((i * 657) & (N - 1)) + 19 + 2
215 || vl2[i] != ((i * 657) & (N - 1)) + 23 + 4)
216 abort ();