(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
slp-37.c
       1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include <stdarg.h>
       4  #include "tree-vect.h"
       5  
       6  #define N 128 
       7  
       8  typedef struct {
       9     int a;
      10     int b;
      11     void *c;
      12  } s1;
      13  
      14  int
      15  foo1 (s1 *arr)
      16  {
      17    int i;
      18    s1 *ptr = arr;
      19  
      20    /* Vectorized as a strided SLP pair of accesses to <a, b> and a single
      21       strided access to c.  */
      22    for (i = 0; i < N; i++)
      23      {
      24        ptr->a = 6;
      25        ptr->b = 7;
      26        ptr->c = 0;
      27        ptr++; 
      28      } 
      29     
      30    /* check results:  */
      31    for (i = 0; i < N; i++)
      32      { 
      33         if (arr[i].a != 6 
      34             || arr[i].b != 7
      35             || arr[i].c != 0)
      36           abort();
      37      }
      38  }
      39  
      40  int main (void)
      41  {
      42    int i;
      43    s1 arr1[N];
      44    
      45    check_vect ();
      46  
      47    for (i = 0; i < N; i++)
      48      { 
      49        arr1[i].a = i;
      50        arr1[i].b = i * 2;
      51        arr1[i].c = (void *)arr1;
      52        asm volatile ("" ::: "memory");
      53      } 
      54  
      55  
      56    foo1 (arr1);
      57  
      58    return 0;
      59  }
      60  
      61  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_hw_misalign } } } */
      62  /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_hw_misalign } } } */