[flang-commits] [flang] 82e91b9 - [flang][OpenMP] Move handling of OpenMP symbol flags to OpenMP.cpp (#75523)
via flang-commits
flang-commits at lists.llvm.org
Fri Dec 15 07:33:02 PST 2023
Author: Krzysztof Parzyszek
Date: 2023-12-15T09:32:57-06:00
New Revision: 82e91b91ca0ceab5ee977295540643ce67153f89
URL: https://github.com/llvm/llvm-project/commit/82e91b91ca0ceab5ee977295540643ce67153f89
DIFF: https://github.com/llvm/llvm-project/commit/82e91b91ca0ceab5ee977295540643ce67153f89.diff
LOG: [flang][OpenMP] Move handling of OpenMP symbol flags to OpenMP.cpp (#75523)
The function `instantiateVariable` in Bridge.cpp has the following code:
```
if (var.getSymbol().test(
Fortran::semantics::Symbol::Flag::OmpThreadprivate))
Fortran::lower::genThreadprivateOp(*this, var);
if (var.getSymbol().test(
Fortran::semantics::Symbol::Flag::OmpDeclareTarget))
Fortran::lower::genDeclareTargetIntGlobal(*this, var);
```
Implement `handleOpenMPSymbolProperties` in OpenMP.cpp, move the above
code there, and have `instantiateVariable` call this function instead.
This would further separate OpenMP-related details into OpenMP.cpp.
Added:
Modified:
flang/include/flang/Lower/OpenMP.h
flang/lib/Lower/Bridge.cpp
flang/lib/Lower/OpenMP.cpp
Removed:
################################################################################
diff --git a/flang/include/flang/Lower/OpenMP.h b/flang/include/flang/Lower/OpenMP.h
index b65fc4134c6e13..6e772c43d8c46e 100644
--- a/flang/include/flang/Lower/OpenMP.h
+++ b/flang/include/flang/Lower/OpenMP.h
@@ -58,6 +58,13 @@ void genOpenMPConstruct(AbstractConverter &, Fortran::lower::SymMap &,
const parser::OpenMPConstruct &);
void genOpenMPDeclarativeConstruct(AbstractConverter &, pft::Evaluation &,
const parser::OpenMPDeclarativeConstruct &);
+/// Symbols in OpenMP code can have flags (e.g. threadprivate directive)
+/// that require additional handling when lowering the corresponding
+/// variable. Perform such handling according to the flags on the symbol.
+/// The variable \p var is required to have a `Symbol`.
+void genOpenMPSymbolProperties(AbstractConverter &converter,
+ const pft::Variable &var);
+
int64_t getCollapseValue(const Fortran::parser::OmpClauseList &clauseList);
void genThreadprivateOp(AbstractConverter &, const pft::Variable &);
void genDeclareTargetIntGlobal(AbstractConverter &, const pft::Variable &);
diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp
index f3cb5158a9de3f..61393d2c9d64c4 100644
--- a/flang/lib/Lower/Bridge.cpp
+++ b/flang/lib/Lower/Bridge.cpp
@@ -4201,15 +4201,8 @@ class FirConverter : public Fortran::lower::AbstractConverter {
void instantiateVar(const Fortran::lower::pft::Variable &var,
Fortran::lower::AggregateStoreMap &storeMap) {
Fortran::lower::instantiateVariable(*this, var, localSymbols, storeMap);
- if (var.hasSymbol()) {
- if (var.getSymbol().test(
- Fortran::semantics::Symbol::Flag::OmpThreadprivate))
- Fortran::lower::genThreadprivateOp(*this, var);
-
- if (var.getSymbol().test(
- Fortran::semantics::Symbol::Flag::OmpDeclareTarget))
- Fortran::lower::genDeclareTargetIntGlobal(*this, var);
- }
+ if (var.hasSymbol())
+ genOpenMPSymbolProperties(*this, var);
}
/// Where applicable, save the exception state and halting and rounding
diff --git a/flang/lib/Lower/OpenMP.cpp b/flang/lib/Lower/OpenMP.cpp
index 2d5f75d9d31c5a..fc8f03107fadf2 100644
--- a/flang/lib/Lower/OpenMP.cpp
+++ b/flang/lib/Lower/OpenMP.cpp
@@ -3542,6 +3542,19 @@ void Fortran::lower::genOpenMPDeclarativeConstruct(
converter.genEval(e);
}
+void Fortran::lower::genOpenMPSymbolProperties(
+ Fortran::lower::AbstractConverter &converter,
+ const Fortran::lower::pft::Variable &var) {
+ assert(var.hasSymbol() && "Expecting Symbol");
+ const Fortran::semantics::Symbol &sym = var.getSymbol();
+
+ if (sym.test(Fortran::semantics::Symbol::Flag::OmpThreadprivate))
+ Fortran::lower::genThreadprivateOp(converter, var);
+
+ if (sym.test(Fortran::semantics::Symbol::Flag::OmpDeclareTarget))
+ Fortran::lower::genDeclareTargetIntGlobal(converter, var);
+}
+
int64_t Fortran::lower::getCollapseValue(
const Fortran::parser::OmpClauseList &clauseList) {
for (const Fortran::parser::OmpClause &clause : clauseList.v) {
More information about the flang-commits
mailing list