aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Lower/Bridge.cpp
diff options
context:
space:
mode:
authorjeanPerier <jperier@nvidia.com>2023-10-25 09:22:23 +0200
committerGitHub <noreply@github.com>2023-10-25 09:22:23 +0200
commitb6b0756ce5c4e2e07d7f6f1f430d3d29afe9a8a8 (patch)
treee04b2b2ab935caa910a31a89167bb45e788306aa /flang/lib/Lower/Bridge.cpp
parent34af57c5c170f80e3ad0dfb469bf7fcc99c2e1af (diff)
downloadllvm-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.cpp11
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