| int |
| main () |
| { |
| int a, b, c = 0; |
| #pragma omp parallel num_threads(2) |
| { |
| #pragma omp barrier |
| #pragma omp single |
| { |
| #pragma omp task depend(out: a) |
| { |
| int i; |
| a = 0; |
| for (i = 0; i < 524288; ++i) |
| { |
| asm volatile ("" : "+g" (a)); |
| a++; |
| } |
| } |
| #pragma omp task depend(out: b) |
| { |
| int i; |
| b = 0; |
| for (i = 0; i < 64; ++i) |
| { |
| asm volatile ("" : "+g" (b)); |
| b++; |
| } |
| } |
| #pragma omp task depend(in: a) depend(mutexinoutset: c) |
| { |
| int i; |
| int d = c; |
| for (i = 0; i < 524288 + 64 - a; ++i) |
| { |
| asm volatile ("" : "+g" (d) : "g" (&a) : "memory"); |
| d++; |
| } |
| asm volatile ("" : "+g" (d), "+g" (c)); |
| c = d; |
| } |
| #pragma omp task depend(in: b) depend(mutexinoutset: c) |
| { |
| int i; |
| int d = c; |
| for (i = 0; i < 524288 + 64 - b; ++i) |
| { |
| asm volatile ("" : "+g" (d) : "g" (&b) : "memory"); |
| d++; |
| } |
| asm volatile ("" : "+g" (d), "+g" (c)); |
| c = d; |
| } |
| } |
| } |
| if (c != 524288 + 64) |
| __builtin_abort (); |
| return 0; |
| } |