1! { dg-additional-options "-fdump-tree-original" }
2
3module relaxed
4  !$omp requires atomic_default_mem_order(relaxed)
5end module relaxed
6
7module seq
8  !$omp requires atomic_default_mem_order(seq_cst)
9end module seq
10
11module acq
12  !$omp requires atomic_default_mem_order(acq_rel)
13end module acq
14
15subroutine sub1
16  !$omp atomic  ! <= relaxed
17  i1 = i1 + 5
18end subroutine
19
20subroutine sub2
21  !$omp atomic seq_cst
22  i2 = i2 + 5
23end subroutine
24
25subroutine sub3
26  use relaxed
27  !$omp atomic
28  i3 = i3 + 5
29end subroutine
30
31subroutine sub4
32  use relaxed
33  !$omp atomic seq_cst
34  i4 = i4 + 5
35end subroutine
36
37subroutine sub5
38  use seq
39  !$omp atomic
40  i5 = i5 + 5
41contains
42  subroutine bar
43    block
44      !$omp atomic
45      i5b = i5b + 5
46    end block
47  end
48end subroutine
49
50subroutine sub6
51  use seq
52  !$omp atomic seq_cst
53  i6 = i6 + 5
54end subroutine
55
56subroutine sub7
57  use acq
58  !$omp atomic
59  i7 = i7 + 5
60contains
61  subroutine foobar
62    block
63      !$omp atomic
64      i7b = i7b + 5
65    end block
66  end
67end subroutine
68
69subroutine sub8
70  use acq
71  !$omp atomic seq_cst
72  i8 = i8 + 5
73end subroutine
74
75! { dg-final { scan-tree-dump-times "#pragma omp atomic relaxed\[\n\r]\[^\n\r]*&i1 =" 1 "original" } }
76! { dg-final { scan-tree-dump-times "#pragma omp atomic seq_cst\[\n\r]\[^\n\r]*&i2 =" 1 "original" } }
77! { dg-final { scan-tree-dump-times "#pragma omp atomic relaxed\[\n\r]\[^\n\r]*&i3 =" 1 "original" } }
78! { dg-final { scan-tree-dump-times "#pragma omp atomic seq_cst\[\n\r]\[^\n\r]*&i4 =" 1 "original" } }
79! { dg-final { scan-tree-dump-times "#pragma omp atomic seq_cst\[\n\r]\[^\n\r]*&i5 =" 1 "original" } }
80! { dg-final { scan-tree-dump-times "#pragma omp atomic seq_cst\[\n\r]\[^\n\r]*&i5 =" 1 "original" } }
81! { dg-final { scan-tree-dump-times "#pragma omp atomic seq_cst\[\n\r]\[^\n\r]*&i5b =" 1 "original" } }
82! { dg-final { scan-tree-dump-times "#pragma omp atomic seq_cst\[\n\r]\[^\n\r]*&i6 =" 1 "original" } }
83! { dg-final { scan-tree-dump-times "#pragma omp atomic release\[\n\r]\[^\n\r]*&i7 =" 1 "original" } }
84! { dg-final { scan-tree-dump-times "#pragma omp atomic release\[\n\r]\[^\n\r]*&i7b =" 1 "original" } }
85! { dg-final { scan-tree-dump-times "#pragma omp atomic seq_cst\[\n\r]\[^\n\r]*&i8 =" 1 "original" } }
86