2014-04-15 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / avx2-gather-1.c
blob7ed567dc491761f0d3629b355dc85c2f95c613d6
1 /* { dg-do run } */
2 /* { dg-require-effective-target avx2 } */
3 /* { dg-options "-O3 -mavx2" } */
5 #include "avx2-check.h"
7 #define N 1024
8 float vf1[N+16], vf2[N];
9 double vd1[N+16], vd2[N];
10 int k[N];
11 long l[N];
12 short n[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 n[i] = (int) vf1[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 n[i] = (int) vf1[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 n[i] = (int) vd1[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 n[i] = (int) vd1[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 n[i] = (int) vf1[l[i]];
94 __attribute__((noinline, noclone)) void
95 f11 (long 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 (long x)
105 int i;
106 for (i = 0; i < N; i++)
107 n[i] = (int) vf1[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 n[i] = (int) vd1[l[i]];
126 __attribute__((noinline, noclone)) void
127 f15 (long 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 (long x)
137 int i;
138 for (i = 0; i < N; i++)
139 n[i] = (int) vd1[l[i] + x];
142 static void
143 avx2_test (void)
145 int i;
147 for (i = 0; i < N + 16; i++)
149 asm ("");
150 vf1[i] = 17.0f + i;
151 vd1[i] = 19.0 + i;
153 for (i = 0; i < N; i++)
155 asm ("");
156 k[i] = (i * 731) & (N - 1);
157 l[i] = (i * 657) & (N - 1);
160 f1 ();
161 f2 ();
162 for (i = 0; i < N; i++)
163 if (vf2[i] != ((i * 731) & (N - 1)) + 17
164 || n[i] != ((i * 731) & (N - 1)) + 17)
165 abort ();
167 f3 (12);
168 f4 (14);
169 for (i = 0; i < N; i++)
170 if (vf2[i] != ((i * 731) & (N - 1)) + 17 + 12
171 || n[i] != ((i * 731) & (N - 1)) + 17 + 14)
172 abort ();
174 f5 ();
175 f6 ();
176 for (i = 0; i < N; i++)
177 if (vd2[i] != ((i * 731) & (N - 1)) + 19
178 || n[i] != ((i * 731) & (N - 1)) + 19)
179 abort ();
181 f7 (7);
182 f8 (9);
183 for (i = 0; i < N; i++)
184 if (vd2[i] != ((i * 731) & (N - 1)) + 19 + 7
185 || n[i] != ((i * 731) & (N - 1)) + 19 + 9)
186 abort ();
188 f9 ();
189 f10 ();
190 for (i = 0; i < N; i++)
191 if (vf2[i] != ((i * 657) & (N - 1)) + 17
192 || n[i] != ((i * 657) & (N - 1)) + 17)
193 abort ();
195 f11 (2);
196 f12 (4);
197 for (i = 0; i < N; i++)
198 if (vf2[i] != ((i * 657) & (N - 1)) + 17 + 2
199 || n[i] != ((i * 657) & (N - 1)) + 17 + 4)
200 abort ();
202 f13 ();
203 f14 ();
204 for (i = 0; i < N; i++)
205 if (vd2[i] != ((i * 657) & (N - 1)) + 19
206 || n[i] != ((i * 657) & (N - 1)) + 19)
207 abort ();
209 f15 (13);
210 f16 (15);
211 for (i = 0; i < N; i++)
212 if (vd2[i] != ((i * 657) & (N - 1)) + 19 + 13
213 || n[i] != ((i * 657) & (N - 1)) + 19 + 15)
214 abort ();