1/* { dg-do run } */ 2/* { dg-require-effective-target avx512f } */ 3/* { dg-options "-O3 -mavx512f -ffast-math" } */ 4 5#include "avx512f-check.h" 6 7#define N 1024 8float f[N]; 9double d[N]; 10int k[N]; 11float *l[N]; 12double *n[N]; 13int **m[N]; 14long q[N]; 15long long **o[N]; 16long long t[N]; 17long long *r[N]; 18int *s[N]; 19 20__attribute__((noinline, noclone)) float 21f1 (void) 22{ 23 int i; 24 float g = 0.0; 25 for (i = 0; i < N / 2; i++) 26 g += f[k[i]]; 27 return g; 28} 29 30__attribute__((noinline, noclone)) float 31f2 (float *p) 32{ 33 int i; 34 float g = 0.0; 35 for (i = 0; i < N / 2; i++) 36 g += p[k[i]]; 37 return g; 38} 39 40__attribute__((noinline, noclone)) float 41f3 (void) 42{ 43 int i; 44 float g = 0.0; 45 for (i = 0; i < N / 2; i++) 46 g += *l[i]; 47 return g; 48} 49 50__attribute__((noinline, noclone)) int 51f4 (void) 52{ 53 int i; 54 int g = 0; 55 for (i = 0; i < N / 2; i++) 56 g += **m[i]; 57 return g; 58} 59 60__attribute__((noinline, noclone)) double 61f5 (void) 62{ 63 int i; 64 double g = 0.0; 65 for (i = 0; i < N / 2; i++) 66 g += d[k[i]]; 67 return g; 68} 69 70__attribute__((noinline, noclone)) double 71f6 (double *p) 72{ 73 int i; 74 double g = 0.0; 75 for (i = 0; i < N / 2; i++) 76 g += p[k[i]]; 77 return g; 78} 79 80__attribute__((noinline, noclone)) double 81f7 (void) 82{ 83 int i; 84 double g = 0.0; 85 for (i = 0; i < N / 2; i++) 86 g += *n[i]; 87 return g; 88} 89 90__attribute__((noinline, noclone)) int 91f8 (void) 92{ 93 int i; 94 int g = 0; 95 for (i = 0; i < N / 2; i++) 96 g += **o[i]; 97 return g; 98} 99 100__attribute__((noinline, noclone)) float 101f9 (void) 102{ 103 int i; 104 float g = 0.0; 105 for (i = 0; i < N / 2; i++) 106 g += f[q[i]]; 107 return g; 108} 109 110__attribute__((noinline, noclone)) float 111f10 (float *p) 112{ 113 int i; 114 float g = 0.0; 115 for (i = 0; i < N / 2; i++) 116 g += p[q[i]]; 117 return g; 118} 119 120__attribute__((noinline, noclone)) double 121f11 (void) 122{ 123 int i; 124 double g = 0.0; 125 for (i = 0; i < N / 2; i++) 126 g += d[q[i]]; 127 return g; 128} 129 130__attribute__((noinline, noclone)) double 131f12 (double *p) 132{ 133 int i; 134 double g = 0.0; 135 for (i = 0; i < N / 2; i++) 136 g += p[q[i]]; 137 return g; 138} 139 140static void 141avx512f_test (void) 142{ 143 int i; 144 145 for (i = 0; i < N; i++) 146 { 147 asm (""); 148 f[i] = -256.0f + i; 149 d[i] = -258.0 + i; 150 k[i] = (i * 731) & (N - 1); 151 q[i] = (i * 657) & (N - 1); 152 t[i] = (i * 657) & (N - 1); 153 l[i] = &f[(i * 239) & (N - 1)]; 154 n[i] = &d[(i * 271) & (N - 1)]; 155 r[i] = &t[(i * 323) & (N - 1)]; 156 s[i] = &k[(i * 565) & (N - 1)]; 157 m[i] = &s[(i * 13) & (N - 1)]; 158 o[i] = &r[(i * 19) & (N - 1)]; 159 } 160 161 if (f1 () != 136448.0f || f2 (f) != 136448.0f || f3 () != 130304.0) 162 abort (); 163 if (f4 () != 261376 || f5 () != 135424.0 || f6 (d) != 135424.0) 164 abort (); 165 if (f7 () != 129280.0 || f8 () != 259840L || f9 () != 130816.0f) 166 abort (); 167 if (f10 (f) != 130816.0f || f11 () != 129792.0 || f12 (d) != 129792.0) 168 abort (); 169} 170