(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
pr103116-1.c
       1  /* { dg-require-effective-target mmap } */
       2  
       3  #include <sys/mman.h>
       4  #include <stdio.h>
       5  
       6  #define COUNT 128
       7  #define MMAP_SIZE 0x20000
       8  #define ADDRESS 0x1122000000
       9  #define TYPE unsigned int
      10  
      11  #ifndef MAP_ANONYMOUS
      12  #define MAP_ANONYMOUS MAP_ANON
      13  #endif
      14  
      15  void __attribute__((noipa))
      16  loop (TYPE *restrict x, TYPE *restrict y)
      17  {
      18    for (int i = 0; i < COUNT; ++i)
      19      {
      20        x[i * 4] = y[i * 2] + 1;
      21        x[i * 4 + 1] = y[i * 2] + 2;
      22        x[i * 4 + 2] = y[i * 2 + 1] + 3;
      23        x[i * 4 + 3] = y[i * 2 + 1] + 4;
      24      }
      25  }
      26  
      27  TYPE x[COUNT * 4];
      28  
      29  int
      30  main (void)
      31  {
      32    void *y;
      33    TYPE *end_y;
      34  
      35    y = mmap ((void *) ADDRESS, MMAP_SIZE, PROT_READ | PROT_WRITE,
      36              MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
      37    if (y == MAP_FAILED)
      38      {
      39        perror ("mmap");
      40        return 1;
      41      }
      42  
      43    end_y = (TYPE *) ((char *) y + MMAP_SIZE);
      44  
      45    loop (x, end_y - COUNT * 2);
      46  
      47    return 0;
      48  }
      49  
      50  /* { dg-final { scan-tree-dump "Data access with gaps requires scalar epilogue loop" "vect" { target { vect_perm && vect_int } } } } */