(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-alias-check-8.c
       1  #define N 200
       2  #define DIST 32
       3  
       4  typedef signed char sc;
       5  typedef unsigned char uc;
       6  typedef signed short ss;
       7  typedef unsigned short us;
       8  typedef int si;
       9  typedef unsigned int ui;
      10  typedef signed long long sll;
      11  typedef unsigned long long ull;
      12  
      13  #define FOR_EACH_TYPE(M) \
      14    M (sc) M (uc) \
      15    M (ss) M (us) \
      16    M (si) M (ui) \
      17    M (sll) M (ull) \
      18    M (float) M (double)
      19  
      20  #define TEST_VALUE(I) ((I) * 5 / 2)
      21  
      22  #define ADD_TEST(TYPE)				\
      23    TYPE a_##TYPE[N * 2];				\
      24    void __attribute__((noinline, noclone))	\
      25    test_##TYPE (int x, int y)			\
      26    {						\
      27      for (int i = 0; i < N; ++i)			\
      28        a_##TYPE[i + x] += a_##TYPE[i + y];	\
      29    }
      30  
      31  #define DO_TEST(TYPE)						\
      32    for (int i = 0; i < DIST * 2; ++i)				\
      33      {								\
      34        for (int j = 0; j < N + DIST * 2; ++j)			\
      35  	a_##TYPE[j] = TEST_VALUE (j);				\
      36        test_##TYPE (i, DIST);					\
      37        for (int j = 0; j < N + DIST * 2; ++j)			\
      38  	{							\
      39  	  TYPE expected;					\
      40  	  if (j < i || j >= i + N)				\
      41  	    expected = TEST_VALUE (j);				\
      42  	  else if (i <= DIST)					\
      43  	    expected = ((TYPE) TEST_VALUE (j)			\
      44  			+ (TYPE) TEST_VALUE (j - i + DIST));	\
      45  	  else							\
      46  	    expected = ((TYPE) TEST_VALUE (j)			\
      47  			+ a_##TYPE[j - i + DIST]);		\
      48  	  if (expected != a_##TYPE[j])				\
      49  	    __builtin_abort ();					\
      50  	}							\
      51      }
      52  
      53  FOR_EACH_TYPE (ADD_TEST)
      54  
      55  int
      56  main (void)
      57  {
      58    FOR_EACH_TYPE (DO_TEST)
      59    return 0;
      60  }
      61  
      62  /* { dg-final { scan-tree-dump {flags: *WAR\n} "vect" { target vect_int } } } */
      63  /* { dg-final { scan-tree-dump "using an index-based WAR/WAW test" "vect" } } */
      64  /* { dg-final { scan-tree-dump-not "using an address-based" "vect" } } */