Skip to content

Commit 82e91b9

Browse files
authored
[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.
1 parent 306bd23 commit 82e91b9

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

flang/include/flang/Lower/OpenMP.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ void genOpenMPConstruct(AbstractConverter &, Fortran::lower::SymMap &,
5858
const parser::OpenMPConstruct &);
5959
void genOpenMPDeclarativeConstruct(AbstractConverter &, pft::Evaluation &,
6060
const parser::OpenMPDeclarativeConstruct &);
61+
/// Symbols in OpenMP code can have flags (e.g. threadprivate directive)
62+
/// that require additional handling when lowering the corresponding
63+
/// variable. Perform such handling according to the flags on the symbol.
64+
/// The variable \p var is required to have a `Symbol`.
65+
void genOpenMPSymbolProperties(AbstractConverter &converter,
66+
const pft::Variable &var);
67+
6168
int64_t getCollapseValue(const Fortran::parser::OmpClauseList &clauseList);
6269
void genThreadprivateOp(AbstractConverter &, const pft::Variable &);
6370
void genDeclareTargetIntGlobal(AbstractConverter &, const pft::Variable &);

flang/lib/Lower/Bridge.cpp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4201,15 +4201,8 @@ class FirConverter : public Fortran::lower::AbstractConverter {
42014201
void instantiateVar(const Fortran::lower::pft::Variable &var,
42024202
Fortran::lower::AggregateStoreMap &storeMap) {
42034203
Fortran::lower::instantiateVariable(*this, var, localSymbols, storeMap);
4204-
if (var.hasSymbol()) {
4205-
if (var.getSymbol().test(
4206-
Fortran::semantics::Symbol::Flag::OmpThreadprivate))
4207-
Fortran::lower::genThreadprivateOp(*this, var);
4208-
4209-
if (var.getSymbol().test(
4210-
Fortran::semantics::Symbol::Flag::OmpDeclareTarget))
4211-
Fortran::lower::genDeclareTargetIntGlobal(*this, var);
4212-
}
4204+
if (var.hasSymbol())
4205+
genOpenMPSymbolProperties(*this, var);
42134206
}
42144207

42154208
/// Where applicable, save the exception state and halting and rounding

flang/lib/Lower/OpenMP.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3542,6 +3542,19 @@ void Fortran::lower::genOpenMPDeclarativeConstruct(
35423542
converter.genEval(e);
35433543
}
35443544

3545+
void Fortran::lower::genOpenMPSymbolProperties(
3546+
Fortran::lower::AbstractConverter &converter,
3547+
const Fortran::lower::pft::Variable &var) {
3548+
assert(var.hasSymbol() && "Expecting Symbol");
3549+
const Fortran::semantics::Symbol &sym = var.getSymbol();
3550+
3551+
if (sym.test(Fortran::semantics::Symbol::Flag::OmpThreadprivate))
3552+
Fortran::lower::genThreadprivateOp(converter, var);
3553+
3554+
if (sym.test(Fortran::semantics::Symbol::Flag::OmpDeclareTarget))
3555+
Fortran::lower::genDeclareTargetIntGlobal(converter, var);
3556+
}
3557+
35453558
int64_t Fortran::lower::getCollapseValue(
35463559
const Fortran::parser::OmpClauseList &clauseList) {
35473560
for (const Fortran::parser::OmpClause &clause : clauseList.v) {

0 commit comments

Comments
 (0)