(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
tree-prof/
val-profiler-threads-1.c
       1  /* { dg-options "-O0 -pthread -fprofile-update=atomic" } */
       2  /* { dg-require-effective-target profile_update_atomic } */
       3  
       4  #include <pthread.h>
       5  
       6  #define NUM_THREADS	8
       7  #define SIZE 1024
       8  #define ITERATIONS (1000 * 1000)
       9  
      10  char buffer[SIZE];
      11  char buffer2[SIZE];
      12  
      13  void *copy_memory(char *dst, char *src, unsigned size)
      14  {
      15     for (unsigned i = 0; i < ITERATIONS; i++)
      16     {
      17       dst[size % 10] = src[size % 20];
      18     }
      19  }
      20  
      21  void *foo(void *d)
      22  {
      23    copy_memory (buffer, buffer2, SIZE);
      24  }
      25  
      26  int main(int argc, char *argv[])
      27  {
      28     pthread_t threads[NUM_THREADS];
      29     int rc;
      30     long t;
      31     for(t=0;t<NUM_THREADS;t++){
      32       rc = pthread_create(&threads[t], NULL, foo, 0);
      33       if (rc){
      34  	 return 1;
      35         }
      36       }
      37  
      38     void *retval;
      39     for(t=0;t<NUM_THREADS;t++)
      40       pthread_join (threads[t], &retval);
      41  
      42     return buffer[10];
      43  }