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