| ! { dg-do compile } |
| ! { dg-additional-options "-fdump-tree-original" } |
| |
| ! { dg-final { scan-tree-dump-times "#pragma omp atomic relaxed" 4 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp atomic release" 4 "original" } } |
| ! { dg-final { scan-tree-dump-times "v = #pragma omp atomic capture relaxed" 4 "original" } } |
| ! { dg-final { scan-tree-dump-times "v = #pragma omp atomic capture release" 2 "original" } } |
| ! { dg-final { scan-tree-dump-times "v = #pragma omp atomic read acquire" 1 "original" } } |
| |
| ! { dg-final { scan-tree-dump-times "#pragma omp atomic seq_cst" 7 "original" } } |
| ! { dg-final { scan-tree-dump-times "v = #pragma omp atomic read seq_cst" 3 "original" } } |
| ! { dg-final { scan-tree-dump-times "v = #pragma omp atomic capture seq_cst" 6 "original" } } |
| |
| subroutine foo () |
| integer :: x, v |
| !$omp atomic |
| i = i + 2 |
| |
| !$omp atomic relaxed |
| i = i + 2 |
| |
| !$omp atomic seq_cst read |
| v = x |
| !$omp atomic seq_cst, read |
| v = x |
| !$omp atomic seq_cst write |
| x = v |
| !$omp atomic seq_cst ,write |
| x = v |
| !$omp atomic seq_cst update |
| x = x + v |
| !$omp atomic seq_cst , update |
| x = x + v |
| !$omp atomic seq_cst capture |
| x = x + 2 |
| v = x |
| !$omp end atomic |
| !$omp atomic seq_cst, capture |
| x = x + 2 |
| v = x |
| !$omp end atomic |
| !$omp atomic read , seq_cst |
| v = x |
| !$omp atomic write ,seq_cst |
| x = v |
| !$omp atomic update, seq_cst |
| x = x + v |
| !$omp atomic capture, seq_cst |
| x = x + 2 |
| v = x |
| !$omp end atomic |
| end |
| |
| subroutine bar |
| integer :: i, v |
| real :: f |
| !$omp atomic release, hint (0), update |
| i = i + 1 |
| !$omp end atomic |
| !$omp atomic hint(0)seq_cst |
| i = i + 1 |
| !$omp atomic relaxed,update,hint (0) |
| i = i + 1 |
| !$omp atomic release |
| i = i + 1 |
| !$omp atomic relaxed |
| i = i + 1 |
| !$omp atomic relaxed capture |
| i = i + 1 |
| v = i |
| !$omp end atomic |
| !$omp atomic capture,release , hint (1) |
| i = i + 1 |
| v = i |
| !$omp end atomic |
| !$omp atomic hint(0),relaxed capture |
| i = i + 1 |
| v = i |
| !$omp end atomic |
| !$omp atomic read acquire |
| v = i |
| !$omp atomic release,write |
| i = v |
| !$omp atomic hint(1),update,release |
| f = f + 2.0 |
| end |
| |
| subroutine openmp51_foo |
| integer :: x, v |
| !$omp atomic update seq_cst capture |
| x = x + 2 |
| v = x |
| !$omp end atomic |
| !$omp atomic seq_cst, capture, update |
| x = x + 2 |
| v = x |
| !$omp end atomic |
| !$omp atomic capture, seq_cst ,update |
| x = x + 2 |
| v = x |
| !$omp end atomic |
| end |
| |
| subroutine openmp51_bar |
| integer :: i, v |
| real :: f |
| !$omp atomic relaxed capture update |
| i = i + 1 |
| v = i |
| !$omp end atomic |
| !$omp atomic update capture,release , hint (1) |
| i = i + 1 |
| v = i |
| !$omp end atomic |
| !$omp atomic hint(0),update relaxed capture |
| i = i + 1 |
| v = i |
| !$omp end atomic |
| end |