(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c-c++-common/
depend-mutexinout-2.c
       1  int
       2  main ()
       3  {
       4    int a, b, c = 0;
       5    #pragma omp parallel num_threads(2)
       6    {
       7      #pragma omp barrier
       8      #pragma omp single
       9      {
      10        #pragma omp task depend(out: a)
      11        {
      12  	int i;
      13  	a = 0;
      14  	for (i = 0; i < 524288; ++i)
      15  	  {
      16  	    asm volatile ("" : "+g" (a));
      17  	    a++;
      18  	  }
      19        }
      20        #pragma omp task depend(out: b)
      21        {
      22  	int i;
      23  	b = 0;
      24  	for (i = 0; i < 64; ++i)
      25  	  {
      26  	    asm volatile ("" : "+g" (b));
      27  	    b++;
      28  	  }
      29        }
      30        #pragma omp task depend(in: a) depend(mutexinoutset: c)
      31        {
      32  	int i;
      33  	int d = c;
      34  	for (i = 0; i < 524288 + 64 - a; ++i)
      35  	  {
      36  	    asm volatile ("" : "+g" (d) : "g" (&a) : "memory");
      37  	    d++;
      38  	  }
      39  	asm volatile ("" : "+g" (d), "+g" (c));
      40  	c = d;
      41        }
      42        #pragma omp task depend(in: b) depend(mutexinoutset: c)
      43        {
      44  	int i;
      45  	int d = c;
      46  	for (i = 0; i < 524288 + 64 - b; ++i)
      47  	  {
      48  	    asm volatile ("" : "+g" (d) : "g" (&b) : "memory");
      49  	    d++;
      50  	  }
      51  	asm volatile ("" : "+g" (d), "+g" (c));
      52  	c = d;
      53        }
      54      }
      55    }
      56    if (c != 524288 + 64)
      57      __builtin_abort ();
      58    return 0;
      59  }