1/* { dg-do run } */ 2/* { dg-require-effective-target avx2 } */ 3/* { dg-options "-O3 -mavx2" } */ 4 5#include "avx2-check.h" 6 7#define N 1024 8float vf1[N+16], vf2[N]; 9double vd1[N+16], vd2[N]; 10int k[N]; 11long l[N]; 12short n[N]; 13 14__attribute__((noinline, noclone)) void 15f1 (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 23f2 (void) 24{ 25 int i; 26 for (i = 0; i < N; i++) 27 n[i] = (int) vf1[k[i]]; 28} 29 30__attribute__((noinline, noclone)) void 31f3 (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 39f4 (int x) 40{ 41 int i; 42 for (i = 0; i < N; i++) 43 n[i] = (int) vf1[k[i] + x]; 44} 45 46__attribute__((noinline, noclone)) void 47f5 (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 55f6 (void) 56{ 57 int i; 58 for (i = 0; i < N; i++) 59 n[i] = (int) vd1[k[i]]; 60} 61 62__attribute__((noinline, noclone)) void 63f7 (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 71f8 (int x) 72{ 73 int i; 74 for (i = 0; i < N; i++) 75 n[i] = (int) vd1[k[i] + x]; 76} 77 78__attribute__((noinline, noclone)) void 79f9 (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 87f10 (void) 88{ 89 int i; 90 for (i = 0; i < N; i++) 91 n[i] = (int) vf1[l[i]]; 92} 93 94__attribute__((noinline, noclone)) void 95f11 (long 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 103f12 (long x) 104{ 105 int i; 106 for (i = 0; i < N; i++) 107 n[i] = (int) vf1[l[i] + x]; 108} 109 110__attribute__((noinline, noclone)) void 111f13 (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 119f14 (void) 120{ 121 int i; 122 for (i = 0; i < N; i++) 123 n[i] = (int) vd1[l[i]]; 124} 125 126__attribute__((noinline, noclone)) void 127f15 (long 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 135f16 (long x) 136{ 137 int i; 138 for (i = 0; i < N; i++) 139 n[i] = (int) vd1[l[i] + x]; 140} 141 142static void 143avx2_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 } 153 for (i = 0; i < N; i++) 154 { 155 asm (""); 156 k[i] = (i * 731) & (N - 1); 157 l[i] = (i * 657) & (N - 1); 158 } 159 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 (); 166 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 (); 173 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 (); 180 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 (); 187 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 (); 194 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 (); 201 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 (); 208 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 (); 215} 216