|
11 | 11 | //===----------------------------------------------------------------------===//
|
12 | 12 |
|
13 | 13 | #include "flang/Lower/OpenACC.h"
|
| 14 | +#include "DirectivesCommon.h" |
14 | 15 | #include "flang/Common/idioms.h"
|
15 | 16 | #include "flang/Lower/Bridge.h"
|
16 | 17 | #include "flang/Lower/ConvertType.h"
|
@@ -3096,6 +3097,34 @@ void Fortran::lower::finalizeOpenACCRoutineAttachment(
|
3096 | 3097 | accRoutineInfos.clear();
|
3097 | 3098 | }
|
3098 | 3099 |
|
| 3100 | +static void |
| 3101 | +genACC(Fortran::lower::AbstractConverter &converter, |
| 3102 | + Fortran::lower::pft::Evaluation &eval, |
| 3103 | + const Fortran::parser::OpenACCAtomicConstruct &atomicConstruct) { |
| 3104 | + std::visit( |
| 3105 | + Fortran::common::visitors{ |
| 3106 | + [&](const Fortran::parser::AccAtomicRead &atomicRead) { |
| 3107 | + Fortran::lower::genOmpAccAtomicRead<Fortran::parser::AccAtomicRead, |
| 3108 | + void>(converter, atomicRead); |
| 3109 | + }, |
| 3110 | + [&](const Fortran::parser::AccAtomicWrite &atomicWrite) { |
| 3111 | + Fortran::lower::genOmpAccAtomicWrite< |
| 3112 | + Fortran::parser::AccAtomicWrite, void>(converter, atomicWrite); |
| 3113 | + }, |
| 3114 | + [&](const Fortran::parser::AccAtomicUpdate &atomicUpdate) { |
| 3115 | + Fortran::lower::genOmpAccAtomicUpdate< |
| 3116 | + Fortran::parser::AccAtomicUpdate, void>(converter, |
| 3117 | + atomicUpdate); |
| 3118 | + }, |
| 3119 | + [&](const Fortran::parser::AccAtomicCapture &atomicCapture) { |
| 3120 | + Fortran::lower::genOmpAccAtomicCapture< |
| 3121 | + Fortran::parser::AccAtomicCapture, void>(converter, |
| 3122 | + atomicCapture); |
| 3123 | + }, |
| 3124 | + }, |
| 3125 | + atomicConstruct.u); |
| 3126 | +} |
| 3127 | + |
3099 | 3128 | static void
|
3100 | 3129 | genACC(Fortran::lower::AbstractConverter &converter,
|
3101 | 3130 | Fortran::semantics::SemanticsContext &semanticsContext,
|
@@ -3160,8 +3189,7 @@ void Fortran::lower::genOpenACCConstruct(
|
3160 | 3189 | genACC(converter, waitConstruct);
|
3161 | 3190 | },
|
3162 | 3191 | [&](const Fortran::parser::OpenACCAtomicConstruct &atomicConstruct) {
|
3163 |
| - TODO(converter.genLocation(atomicConstruct.source), |
3164 |
| - "OpenACC Atomic construct not lowered yet!"); |
| 3192 | + genACC(converter, eval, atomicConstruct); |
3165 | 3193 | },
|
3166 | 3194 | },
|
3167 | 3195 | accConstruct.u);
|
|
0 commit comments