1! { dg-do compile }
2! { dg-additional-options "-fdump-tree-original" }
3
4! { dg-final { scan-tree-dump-times "#pragma omp atomic relaxed" 4 "original" } }
5! { dg-final { scan-tree-dump-times "#pragma omp atomic release" 4 "original" } }
6! { dg-final { scan-tree-dump-times "v = #pragma omp atomic capture relaxed" 2 "original" } }
7! { dg-final { scan-tree-dump-times "v = #pragma omp atomic capture release" 1 "original" } }
8! { dg-final { scan-tree-dump-times "v = #pragma omp atomic read acquire" 1 "original" } }
9
10! { dg-final { scan-tree-dump-times "#pragma omp atomic seq_cst" 7 "original" } }
11! { dg-final { scan-tree-dump-times "v = #pragma omp atomic read seq_cst" 3 "original" } }
12! { dg-final { scan-tree-dump-times "v = #pragma omp atomic capture seq_cst" 3 "original" } }
13
14
15subroutine foo ()
16  integer :: x, v
17  !$omp atomic
18  i = i + 2
19
20  !$omp atomic relaxed
21  i = i + 2
22
23  !$omp atomic seq_cst read
24  v = x
25  !$omp atomic seq_cst, read
26  v = x
27  !$omp atomic seq_cst write
28  x = v
29  !$omp atomic seq_cst ,write
30  x = v
31  !$omp atomic seq_cst update
32  x = x + v
33  !$omp atomic seq_cst , update
34  x = x + v
35  !$omp atomic seq_cst capture
36  x = x + 2
37  v = x
38  !$omp end atomic
39  !$omp atomic seq_cst, capture
40  x = x + 2
41  v = x
42  !$omp end atomic
43  !$omp atomic read , seq_cst
44  v = x
45  !$omp atomic write ,seq_cst
46  x = v
47  !$omp atomic update, seq_cst
48  x = x + v
49  !$omp atomic capture, seq_cst
50  x = x + 2
51  v = x
52  !$omp end atomic
53end
54
55subroutine bar
56  integer :: i, v
57  real :: f
58  !$omp atomic release, hint (0), update
59  i = i + 1
60  !$omp end atomic
61  !$omp atomic hint(0)seq_cst
62  i = i + 1
63  !$omp atomic relaxed,update,hint (0)
64  i = i + 1
65  !$omp atomic release
66  i = i + 1
67  !$omp atomic relaxed
68  i = i + 1
69  !$omp atomic relaxed capture
70  i = i + 1
71  v = i
72  !$omp end atomic
73  !$omp atomic capture,release , hint (1)
74  i = i + 1
75  v = i
76  !$omp end atomic
77  !$omp atomic hint(0),relaxed capture
78  i = i + 1
79  v = i
80  !$omp end atomic
81  !$omp atomic read acquire
82  v = i
83  !$omp atomic release,write
84  i = v
85  !$omp atomic hint(1),update,release
86  f = f + 2.0
87end
88