(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-cond-11.c
       1  #include "tree-vect.h"
       2  
       3  #define N 1024
       4  typedef int V __attribute__((vector_size (4)));
       5  unsigned int a[N * 2] __attribute__((aligned));
       6  unsigned int b[N * 2] __attribute__((aligned));
       7  V c[N];
       8  
       9  __attribute__((noinline, noclone)) unsigned int
      10  foo (unsigned int *a, unsigned int *b)
      11  {
      12    int i;
      13    unsigned int r = 0;
      14    for (i = 0; i < N; i++)
      15      {
      16        unsigned int x = a[i], y = b[i];
      17        if (x < 32)
      18  	{
      19  	  x = x + 127;
      20  	  y = y * 2;
      21  	}
      22        else
      23  	{
      24  	  x = x - 16;
      25  	  y = y + 1;
      26  	}
      27        a[i] = x;
      28        b[i] = y;
      29        r += x;
      30      }
      31    return r;
      32  }
      33  
      34  __attribute__((noinline, noclone)) unsigned int
      35  bar (unsigned int *a, unsigned int *b)
      36  {
      37    int i;
      38    unsigned int r = 0;
      39    for (i = 0; i < N; i++)
      40      {
      41        unsigned int x = a[i], y = b[i];
      42        if (x < 32)
      43  	{
      44  	  x = x + 127;
      45  	  y = y * 2;
      46  	}
      47        else
      48  	{
      49  	  x = x - 16;
      50  	  y = y + 1;
      51  	}
      52        a[i] = x;
      53        b[i] = y;
      54        c[i] = c[i] + 1;
      55        r += x;
      56      }
      57    return r;
      58  }
      59  
      60  void
      61  baz (unsigned int *a, unsigned int *b,
      62       unsigned int (*fn) (unsigned int *, unsigned int *))
      63  {
      64    int i;
      65    for (i = -64; i < 0; i++)
      66      {
      67        a[i] = 19;
      68        b[i] = 17;
      69      }
      70    for (; i < N; i++)
      71      {
      72        a[i] = i - 512;
      73        b[i] = i;
      74      }
      75    for (; i < N + 64; i++)
      76      {
      77        a[i] = 27;
      78        b[i] = 19;
      79      }
      80    if (fn (a, b) != -512U - (N - 32) * 16U + 32 * 127U)
      81      __builtin_abort ();
      82    for (i = -64; i < 0; i++)
      83      if (a[i] != 19 || b[i] != 17)
      84        __builtin_abort ();
      85    for (; i < N; i++)
      86      if (a[i] != (i - 512U < 32U ? i - 512U + 127 : i - 512U - 16)
      87  	|| b[i] != (i - 512U < 32U ? i * 2U : i + 1U))
      88        __builtin_abort ();
      89    for (; i < N + 64; i++)
      90      if (a[i] != 27 || b[i] != 19)
      91        __builtin_abort ();
      92  }
      93  
      94  int
      95  main ()
      96  {
      97    int i;
      98    check_vect ();
      99    baz (a + 512, b + 512, foo);
     100    baz (a + 512, b + 512, bar);
     101    baz (a + 512 + 1, b + 512 + 1, foo);
     102    baz (a + 512 + 1, b + 512 + 1, bar);
     103    baz (a + 512 + 31, b + 512 + 31, foo);
     104    baz (a + 512 + 31, b + 512 + 31, bar);
     105    baz (a + 512 + 1, b + 512, foo);
     106    baz (a + 512 + 1, b + 512, bar);
     107    baz (a + 512 + 31, b + 512, foo);
     108    baz (a + 512 + 31, b + 512, bar);
     109    baz (a + 512, b + 512 + 1, foo);
     110    baz (a + 512, b + 512 + 1, bar);
     111    baz (a + 512, b + 512 + 31, foo);
     112    baz (a + 512, b + 512 + 31, bar);
     113    return 0;
     114  }
     115