1 /* { dg-do run } */
2 /* { dg-require-effective-target avx512f } */
3 /* { dg-options "-O3 -mavx512f -mtune=knl" } */
4
5 #include "avx512f-check.h"
6
7 #define N 1024
8 float vf1[N+16], vf2[N];
9 double vd1[N+16], vd2[N];
10 int vi1[N+16], vi2[N], k[N];
11 long long vl1[N+16], vl2[N];
12 long l[N];
13
14 __attribute__((noinline, noclone)) void
f1(void)15 f1 (void)
16 {
17 int i;
18 for (i = 0; i < N; i++)
19 vf2[i] = vf1[k[i]];
20 }
21
22 __attribute__((noinline, noclone)) void
f2(void)23 f2 (void)
24 {
25 int i;
26 for (i = 0; i < N; i++)
27 vi2[i] = vi1[k[i]];
28 }
29
30 __attribute__((noinline, noclone)) void
f3(int x)31 f3 (int x)
32 {
33 int i;
34 for (i = 0; i < N; i++)
35 vf2[i] = vf1[k[i] + x];
36 }
37
38 __attribute__((noinline, noclone)) void
f4(int x)39 f4 (int x)
40 {
41 int i;
42 for (i = 0; i < N; i++)
43 vi2[i] = vi1[k[i] + x];
44 }
45
46 __attribute__((noinline, noclone)) void
f5(void)47 f5 (void)
48 {
49 int i;
50 for (i = 0; i < N; i++)
51 vd2[i] = vd1[k[i]];
52 }
53
54 __attribute__((noinline, noclone)) void
f6(void)55 f6 (void)
56 {
57 int i;
58 for (i = 0; i < N; i++)
59 vl2[i] = vl1[k[i]];
60 }
61
62 __attribute__((noinline, noclone)) void
f7(int x)63 f7 (int x)
64 {
65 int i;
66 for (i = 0; i < N; i++)
67 vd2[i] = vd1[k[i] + x];
68 }
69
70 __attribute__((noinline, noclone)) void
f8(int x)71 f8 (int x)
72 {
73 int i;
74 for (i = 0; i < N; i++)
75 vl2[i] = vl1[k[i] + x];
76 }
77
78 __attribute__((noinline, noclone)) void
f9(void)79 f9 (void)
80 {
81 int i;
82 for (i = 0; i < N; i++)
83 vf2[i] = vf1[l[i]];
84 }
85
86 __attribute__((noinline, noclone)) void
f10(void)87 f10 (void)
88 {
89 int i;
90 for (i = 0; i < N; i++)
91 vi2[i] = vi1[l[i]];
92 }
93
94 __attribute__((noinline, noclone)) void
f11(int x)95 f11 (int x)
96 {
97 int i;
98 for (i = 0; i < N; i++)
99 vf2[i] = vf1[l[i] + x];
100 }
101
102 __attribute__((noinline, noclone)) void
f12(int x)103 f12 (int x)
104 {
105 int i;
106 for (i = 0; i < N; i++)
107 vi2[i] = vi1[l[i] + x];
108 }
109
110 __attribute__((noinline, noclone)) void
f13(void)111 f13 (void)
112 {
113 int i;
114 for (i = 0; i < N; i++)
115 vd2[i] = vd1[l[i]];
116 }
117
118 __attribute__((noinline, noclone)) void
f14(void)119 f14 (void)
120 {
121 int i;
122 for (i = 0; i < N; i++)
123 vl2[i] = vl1[l[i]];
124 }
125
126 __attribute__((noinline, noclone)) void
f15(int x)127 f15 (int x)
128 {
129 int i;
130 for (i = 0; i < N; i++)
131 vd2[i] = vd1[l[i] + x];
132 }
133
134 __attribute__((noinline, noclone)) void
f16(int x)135 f16 (int x)
136 {
137 int i;
138 for (i = 0; i < N; i++)
139 vl2[i] = vl1[l[i] + x];
140 }
141
142 static void
avx512f_test(void)143 avx512f_test (void)
144 {
145 int i;
146
147 for (i = 0; i < N + 16; i++)
148 {
149 asm ("");
150 vf1[i] = 17.0f + i;
151 vd1[i] = 19.0 + i;
152 vi1[i] = 21 + i;
153 vl1[i] = 23L + i;
154 }
155 for (i = 0; i < N; i++)
156 {
157 asm ("");
158 k[i] = (i * 731) & (N - 1);
159 l[i] = (i * 657) & (N - 1);
160 }
161
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 ();
168
169 f3 (12);
170 f4 (14);
171 for (i = 0; i < N; i++)
172 if (vf2[i] != ((i * 731) & (N - 1)) + 17 + 12
173 || vi2[i] != ((i * 731) & (N - 1)) + 21 + 14)
174 abort ();
175
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 ();
182
183 f7 (6);
184 f8 (3);
185 for (i = 0; i < N; i++)
186 if (vd2[i] != ((i * 731) & (N - 1)) + 19 + 6
187 || vl2[i] != ((i * 731) & (N - 1)) + 23 + 3)
188 abort ();
189
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 ();
196
197 f11 (7);
198 f12 (9);
199 for (i = 0; i < N; i++)
200 if (vf2[i] != ((i * 657) & (N - 1)) + 17 + 7
201 || vi2[i] != ((i * 657) & (N - 1)) + 21 + 9)
202 abort ();
203
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 ();
210
211 f15 (2);
212 f16 (12);
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 + 12)
216 abort ();
217 }
218