(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr106010-9a.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O3 -mavx2 -fvect-cost-model=unlimited -fdump-tree-vect-details" } */
       3  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 6 "vect" } } */
       4  
       5  typedef struct { _Complex double c; double a1; double a2;}
       6    cdf;
       7  typedef struct { _Complex double c; double a1; double a2; double a3; double a4;}
       8    cdf2;
       9  typedef struct { _Complex double c1; _Complex double c2; double a1; double a2; double a3; double a4;}
      10    cdf3;
      11  typedef struct { _Complex double c1; _Complex double c2; double a1; double a2;}
      12    cdf4;
      13  
      14  #define N 100
      15  /* VMAT_ELEMENTWISE.  */
      16  void
      17  __attribute__((noipa))
      18  foo (cdf* a, cdf* __restrict b)
      19  {
      20     for (int i = 0; i < N; ++i)
      21      {
      22        a[i].c = b[i].c;
      23        a[i].a1 = b[i].a1;
      24        a[i].a2 = b[i].a2;
      25      }
      26  }
      27  
      28  /* VMAT_CONTIGUOUS_PERMUTE.  */
      29  void
      30  __attribute__((noipa))
      31  foo1 (cdf2* a, cdf2* __restrict b)
      32  {
      33     for (int i = 0; i < N; ++i)
      34      {
      35        a[i].c = b[i].c;
      36        a[i].a1 = b[i].a1;
      37        a[i].a2 = b[i].a2;
      38        a[i].a3 = b[i].a3;
      39        a[i].a4 = b[i].a4;
      40      }
      41  }
      42  
      43  /* VMAT_CONTIGUOUS.  */
      44  void
      45  __attribute__((noipa))
      46  foo2 (cdf3* a, cdf3* __restrict b)
      47  {
      48     for (int i = 0; i < N; ++i)
      49      {
      50        a[i].c1 = b[i].c1;
      51        a[i].c2 = b[i].c2;
      52        a[i].a1 = b[i].a1;
      53        a[i].a2 = b[i].a2;
      54        a[i].a3 = b[i].a3;
      55        a[i].a4 = b[i].a4;
      56      }
      57  }
      58  
      59  /* VMAT_STRIDED_SLP.  */
      60  void
      61  __attribute__((noipa))
      62  foo3 (cdf4* a, cdf4* __restrict b)
      63  {
      64     for (int i = 0; i < N; ++i)
      65      {
      66        a[i].c1 = b[i].c1;
      67        a[i].c2 = b[i].c2;
      68        a[i].a1 = b[i].a1;
      69        a[i].a2 = b[i].a2;
      70      }
      71  }
      72  
      73  /* VMAT_CONTIGUOUS_REVERSE.  */
      74  void
      75  __attribute__((noipa))
      76  foo4 (_Complex double* a, _Complex double* __restrict b)
      77  {
      78    for (int i = 0; i != N; i++)
      79      a[i] = b[N-i-1];
      80  }
      81  
      82  /* VMAT_CONTIGUOUS_DOWN.  */
      83  void
      84  __attribute__((noipa))
      85  foo5 (_Complex double* a, _Complex double* __restrict b)
      86  {
      87    for (int i = 0; i != N; i++)
      88      a[N-i-1] = b[0];
      89  }