diff options
author | jeanPerier <jperier@nvidia.com> | 2023-10-25 09:22:23 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-25 09:22:23 +0200 |
commit | b6b0756ce5c4e2e07d7f6f1f430d3d29afe9a8a8 (patch) | |
tree | e04b2b2ab935caa910a31a89167bb45e788306aa /flang/lib/Lower/Bridge.cpp | |
parent | 34af57c5c170f80e3ad0dfb469bf7fcc99c2e1af (diff) | |
download | llvm-b6b0756ce5c4e2e07d7f6f1f430d3d29afe9a8a8.zip llvm-b6b0756ce5c4e2e07d7f6f1f430d3d29afe9a8a8.tar.gz llvm-b6b0756ce5c4e2e07d7f6f1f430d3d29afe9a8a8.tar.bz2 |
[flang] Allow lowering of sub-expressions to be overridden (#69944)
OpenACC/OpenMP atomic lowering needs a finer control over expression
lowering. This patch allows mapping evaluate::Expr<T> to mlir::Value so
that any subsequent expression lowering will use these values when an
operand is a mapped Expr<T>.
This is an alternative to
https://github.com/llvm/llvm-project/pull/69866 From which I took the
test and some of the logic to extract the non-atomic sub-expression.
---------
Co-authored-by: Nimish Mishra <neelam.nimish@gmail.com>
Diffstat (limited to 'flang/lib/Lower/Bridge.cpp')
-rw-r--r-- | flang/lib/Lower/Bridge.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp index ff31625..761cedb 100644 --- a/flang/lib/Lower/Bridge.cpp +++ b/flang/lib/Lower/Bridge.cpp @@ -513,6 +513,15 @@ public: addSymbol(sym, exval, /*forced=*/true); } + void + overrideExprValues(const Fortran::lower::ExprToValueMap *map) override final { + exprValueOverrides = map; + } + + const Fortran::lower::ExprToValueMap *getExprOverrides() override final { + return exprValueOverrides; + } + bool lookupLabelSet(Fortran::lower::SymbolRef sym, Fortran::lower::pft::LabelSet &labelSet) override final { Fortran::lower::pft::FunctionLikeUnit &owningProc = @@ -4903,6 +4912,8 @@ private: /// Whether an OpenMP target region or declare target function/subroutine /// intended for device offloading has been detected bool ompDeviceCodeFound = false; + + const Fortran::lower::ExprToValueMap *exprValueOverrides{nullptr}; }; } // namespace |