(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
sabd_1.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O3 -fwrapv" } */
       3  /* Make sure vectorized absolute difference behaves same as scalar version.  */
       4  
       5  #define N 16
       6  signed char a[] = {-100, -100, -100, -100,-100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100 };
       7  signed char b[] = { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };
       8  
       9  signed char out[N];
      10  
      11  __attribute__ ((noinline,noipa))
      12  void
      13  foo (void)
      14  {
      15    for (int i = 0; i < N; i++)
      16      {
      17        signed char diff = b[i] - a[i];
      18        out[i] = diff > 0 ? diff : -diff;
      19      }
      20  }
      21  
      22  signed char out2[N];
      23  
      24  __attribute__ ((noinline,noipa))
      25  void
      26  foo_scalar (void)
      27  {
      28    for (int i = 0; i < N; i++)
      29      {
      30        asm volatile ("");
      31        signed char diff = b[i] - a[i];
      32        out2[i] = diff > 0 ? diff : -diff;
      33      }
      34  }
      35  
      36  int
      37  main (void)
      38  {
      39    foo ();
      40    foo_scalar ();
      41    for (int i = 0; i < N; i++)
      42      if (out[i] != out2[i])
      43        __builtin_abort ();
      44  
      45    return 0;
      46  }
      47