(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512f-gather-1.c
       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
      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
      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
      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
      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
      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
      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
      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
      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
      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
      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
      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
     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
     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
     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
     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
     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
     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  }