(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
tree-ssa/
ivopts-lower_base.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -fdump-tree-ivopts-details" } */
       3  #include <string.h>
       4  #include <stdlib.h>
       5  
       6  #define MAX_NUM	(256)
       7  
       8  void
       9  sort_pointers (size_t n, void **pointers, void **work)
      10  {
      11    typedef unsigned char digit_t;
      12    unsigned int count[MAX_NUM];
      13    int big_endian_p;
      14    size_t i;
      15    size_t j;
      16  
      17    if ((sizeof (void *) / sizeof (digit_t)) % 2 != 0)
      18      abort ();
      19  
      20    for (i = 0, j = 0; i < sizeof (size_t); ++i)
      21      {
      22        j *= MAX_NUM;
      23        j += i;
      24      }
      25  
      26    big_endian_p = (((char *)&j)[0] == 0);
      27    for (i = 0; i < sizeof (void *) / sizeof (digit_t); ++i)
      28      {
      29        digit_t *digit;
      30        digit_t *bias;
      31        digit_t *top;
      32        unsigned int *countp;
      33        void **pointerp;
      34  
      35        if (big_endian_p)
      36  	j = sizeof (void *) / sizeof (digit_t) - i;
      37        else
      38  	j = i;
      39  
      40        memset (count, 0, MAX_NUM * sizeof (unsigned int));
      41        bias = ((digit_t *) pointers) + j;
      42        top = ((digit_t *) (pointers + n)) + j;
      43        for (digit = bias;
      44  	   digit < top;
      45  	   digit += sizeof (void *) / sizeof (digit_t))
      46  	++count[*digit];
      47  
      48        for (countp = count + 1; countp < count + MAX_NUM; ++countp)
      49  	*countp += countp[-1];
      50  
      51        for (pointerp = pointers + n - 1; pointerp >= pointers; --pointerp)
      52  	work[--count[((digit_t *) pointerp)[j]]] = *pointerp;
      53  
      54        pointerp = pointers;
      55        pointers = work;
      56        work = pointerp;
      57      }
      58  }
      59  
      60  /* { dg-final { scan-tree-dump-not "base \[^\\n\]*&MEM\\\[" "ivopts" } }  */