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