File tree Expand file tree Collapse file tree 3 files changed +40
-5
lines changed Expand file tree Collapse file tree 3 files changed +40
-5
lines changed Original file line number Diff line number Diff line change @@ -112,9 +112,22 @@ bool OmpRewriteMutator::Pre(parser::OpenMPAtomicConstruct &x) {
112112
113113 // Add a memory order clause to the atomic directive.
114114 atomicDirectiveDefaultOrderFound_ = true ;
115+ llvm::omp::Clause kind{x.GetKind ()};
115116 switch (*defaultMemOrder) {
116117 case common::OmpMemoryOrderType::Acq_Rel:
117- clauseList->v .emplace_back (parser::OmpClause{parser::OmpClause::AcqRel{}});
118+ // FIXME: Implement 5.0 rules, pending clarification on later spec
119+ // versions.
120+ // [5.0:62:22-26]
121+ if (kind == llvm::omp::Clause::OMPC_read) {
122+ clauseList->v .emplace_back (
123+ parser::OmpClause{parser::OmpClause::Acquire{}});
124+ } else if (kind == llvm::omp::Clause::OMPC_update && x.IsCapture ()) {
125+ clauseList->v .emplace_back (
126+ parser::OmpClause{parser::OmpClause::AcqRel{}});
127+ } else {
128+ clauseList->v .emplace_back (
129+ parser::OmpClause{parser::OmpClause::Release{}});
130+ }
118131 break ;
119132 case common::OmpMemoryOrderType::Relaxed:
120133 clauseList->v .emplace_back (parser::OmpClause{parser::OmpClause::Relaxed{}});
Original file line number Diff line number Diff line change 1+ ! RUN: %flang_fc1 -emit-hlfir %openmp_flags -fopenmp-version=50 %s -o - | FileCheck %s
2+
3+ module m
4+ ! $omp requires atomic_default_mem_order(acq_rel)
5+
6+ contains
7+
8+ ! CHECK: %[[V:[0-9]+]]:2 = hlfir.declare {{.*}} {uniq_name = "_QMmFf00Ev"}
9+ ! CHECK: %[[X:[0-9]+]]:2 = hlfir.declare {{.*}} {uniq_name = "_QMmFf00Ex"}
10+ ! CHECK: omp.atomic.read %[[V]]#0 = %[[X]]#0 memory_order(acquire)
11+ ! CHECK: omp.atomic.write %[[X]]#0 = %{{[0-9]+}} memory_order(release)
12+
13+ subroutine f00 (x , v )
14+ integer :: x, v
15+ ! $omp atomic read
16+ v = x
17+
18+ ! $omp atomic write
19+ x = v
20+ end
21+
22+ end module
Original file line number Diff line number Diff line change @@ -12,7 +12,7 @@ program requires
1212
1313 ! CHECK-LABEL: OpenMPAtomicConstruct
1414 ! CHECK: OmpClause -> Read
15- ! CHECK: OmpClause -> AcqRel
15+ ! CHECK: OmpClause -> Acquire
1616 ! $omp atomic read
1717 i = j
1818
@@ -36,7 +36,7 @@ program requires
3636
3737 ! CHECK-LABEL: OpenMPAtomicConstruct
3838 ! CHECK: OmpClause -> Write
39- ! CHECK: OmpClause -> AcqRel
39+ ! CHECK: OmpClause -> Release
4040 ! $omp atomic write
4141 i = j
4242
@@ -60,7 +60,7 @@ program requires
6060
6161 ! CHECK-LABEL: OpenMPAtomicConstruct
6262 ! CHECK: OmpClause -> Update
63- ! CHECK: OmpClause -> AcqRel
63+ ! CHECK: OmpClause -> Release
6464 ! $omp atomic update
6565 i = i + j
6666
@@ -79,7 +79,7 @@ program requires
7979 i = i + j
8080
8181 ! CHECK-LABEL: OpenMPAtomicConstruct
82- ! CHECK: OmpClause -> AcqRel
82+ ! CHECK: OmpClause -> Release
8383 ! $omp atomic
8484 i = i + j
8585
You can’t perform that action at this time.
0 commit comments