(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
slp-24-big-array.c
       1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include <stdarg.h>
       4  #include "tree-vect.h"
       5  
       6  #define N 64
       7  
       8  typedef struct {
       9     unsigned char a;
      10     unsigned char b;
      11     unsigned char c;
      12     unsigned char d;
      13  } s;
      14  
      15  unsigned char ub[N*2];
      16  unsigned char uc[N];
      17  
      18  unsigned char check_diff = 2;
      19  
      20  void
      21  main1 (unsigned char x, unsigned char max_result, unsigned char min_result, s *arr)
      22  {
      23    int i;
      24    unsigned char udiff = 2;
      25    unsigned char umax = x;
      26    unsigned char umin = x;
      27    unsigned char ua1[N*2];
      28    s *pIn = arr;
      29    s out[N];
      30  
      31    for (i = 0; i < N; i++) {
      32      udiff += (unsigned char) (ub[i] - uc[i]);
      33  
      34      ua1[2*i+1] = ub[2*i+1];
      35      ua1[2*i] = ub[2*i];
      36  
      37      out[i].d = pIn->d - 1;
      38      out[i].b = pIn->b - 4;
      39      out[i].c = pIn->c - 8;
      40      out[i].a = pIn->a - 3;
      41  
      42      pIn++;
      43    }
      44  
      45    for (i = 0; i < N; i++) {
      46      if (ua1[2*i] != ub[2*i]
      47          || ua1[2*i+1] != ub[2*i+1]
      48          || out[i].a != arr[i].a - 3
      49          || out[i].b != arr[i].b - 4
      50          || out[i].c != arr[i].c - 8
      51          || out[i].d != arr[i].d - 1)
      52        abort ();
      53    }
      54  
      55    /* check results:  */
      56    if (udiff != check_diff)
      57      abort ();
      58  }
      59  
      60  int main (void)
      61  {
      62    int i;
      63    s arr[N];
      64  
      65    check_diff = 2;
      66    ub[0] = uc[0] = 1;
      67    for (i = 1; i < N; i++) {
      68      ub[i] = (i%5 == 0)?i*3:i;
      69      uc[i] = i;
      70      check_diff += (unsigned char) (ub[i] - uc[i]);
      71      asm volatile ("" ::: "memory");
      72    }
      73    for (; i < 2*N; i++) {
      74      ub[i] = 0;
      75      asm volatile ("" ::: "memory");
      76    }
      77  
      78    for (i = 0; i < N; i++)
      79      {
      80        arr[i].a = i + 9;
      81        arr[i].b = i * 2 + 10;
      82        arr[i].c = 17;
      83        arr[i].d = i+34;
      84        asm volatile ("" ::: "memory");
      85      }
      86    check_vect ();
      87  
      88    main1 (100, 100, 1, arr);
      89    main1 (0, 15, 0, arr);
      90    return 0;
      91  }
      92  
      93  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && ilp32 } } } } */
      94  /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { xfail { vect_no_align && ilp32 } } } } */