(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
pr97428.c
       1  /* { dg-do compile } */
       2  /* { dg-require-effective-target vect_double } */
       3  
       4  typedef struct { double re, im; } dcmlx_t;
       5  typedef struct { double re[4], im[4]; } dcmlx4_t;
       6  
       7  void foo_i2(dcmlx4_t dst[], const dcmlx_t src[], int n)
       8  {
       9    for (int i = 0; i < n; ++i) {
      10      dcmlx_t s00 = src[i*4+0];
      11      dcmlx_t s01 = src[i*4+1];
      12      dcmlx_t s02 = src[i*4+2];
      13      dcmlx_t s03 = src[i*4+3];
      14  
      15      dcmlx_t s10 = src[i*4+0+n];
      16      dcmlx_t s11 = src[i*4+1+n];
      17      dcmlx_t s12 = src[i*4+2+n];
      18      dcmlx_t s13 = src[i*4+3+n];
      19  
      20      dst[i*2+0].re[0] = s00.re;
      21      dst[i*2+0].re[1] = s01.re;
      22      dst[i*2+0].re[2] = s02.re;
      23      dst[i*2+0].re[3] = s03.re;
      24      dst[i*2+0].im[0] = s00.im;
      25      dst[i*2+0].im[1] = s01.im;
      26      dst[i*2+0].im[2] = s02.im;
      27      dst[i*2+0].im[3] = s03.im;
      28  
      29      dst[i*2+1].re[0] = s10.re;
      30      dst[i*2+1].re[1] = s11.re;
      31      dst[i*2+1].re[2] = s12.re;
      32      dst[i*2+1].re[3] = s13.re;
      33      dst[i*2+1].im[0] = s10.im;
      34      dst[i*2+1].im[1] = s11.im;
      35      dst[i*2+1].im[2] = s12.im;
      36      dst[i*2+1].im[3] = s13.im;
      37    }
      38  }
      39  
      40  /* The first step to produce optimal code is to appropriately detect the
      41     load and store groups.  */
      42  /* { dg-final { scan-tree-dump "Detected interleaving load of size 8" "vect" } } */
      43  /* { dg-final { scan-tree-dump "Detected interleaving store of size 16" "vect" } } */
      44  /* We're not able to peel & apply re-aligning to make accesses well-aligned for !vect_hw_misalign,
      45     but we could by peeling the stores for alignment and applying re-aligning loads.  */
      46  /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { xfail { ! vect_hw_misalign } } } } */
      47  /* { dg-final { scan-tree-dump-not "gap of 6 elements" "vect" } } */