(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
builtin-prefetch-5.c
       1  /* Test that __builtin_prefetch does no harm.
       2  
       3     Use addresses that are unlikely to be word-aligned.  Some targets
       4     have alignment requirements for prefetch addresses, so make sure the
       5     compiler takes care of that.  This fails if it aborts, anything else
       6     is OK.  */
       7  
       8  struct S {
       9    short a;
      10    short b;
      11    char c[8];
      12  } s;
      13  
      14  char arr[100];
      15  char *ptr = arr;
      16  int idx = 3;
      17  
      18  void
      19  arg_ptr (char *p)
      20  {
      21    __builtin_prefetch (p, 0, 0);
      22  }
      23  
      24  void
      25  arg_idx (char *p, int i)
      26  {
      27    __builtin_prefetch (&p[i], 0, 0);
      28  }
      29  
      30  void
      31  glob_ptr (void)
      32  {
      33    __builtin_prefetch (ptr, 0, 0);
      34  }
      35  
      36  void
      37  glob_idx (void)
      38  {
      39    __builtin_prefetch (&ptr[idx], 0, 0);
      40  }
      41  
      42  int
      43  main ()
      44  {
      45    __builtin_prefetch (&s.b, 0, 0);
      46    __builtin_prefetch (&s.c[1], 0, 0);
      47  
      48    arg_ptr (&s.c[1]);
      49    arg_ptr (ptr+3);
      50    arg_idx (ptr, 3);
      51    arg_idx (ptr+1, 2);
      52    idx = 3;
      53    glob_ptr ();
      54    glob_idx ();
      55    ptr++;
      56    idx = 2;
      57    glob_ptr ();
      58    glob_idx ();
      59    exit (0);
      60  }