llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-flang-fir-hlfir Author: Krzysztof Parzyszek (kparzysz) <details> <summary>Changes</summary> This will unify the interface a bit more. --- Patch is 30.48 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/90090.diff 1 Files Affected: - (modified) flang/lib/Lower/OpenMP/OpenMP.cpp (+105-66) ``````````diff diff --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp index f454f5a45a5150..47935e6cf8efcf 100644 --- a/flang/lib/Lower/OpenMP/OpenMP.cpp +++ b/flang/lib/Lower/OpenMP/OpenMP.cpp @@ -548,11 +548,12 @@ struct OpWithBodyGenInfo { mlir::Operation *)>; OpWithBodyGenInfo(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, mlir::Location loc, Fortran::lower::pft::Evaluation &eval, llvm::omp::Directive dir) - : converter(converter), semaCtx(semaCtx), loc(loc), eval(eval), dir(dir) { - } + : converter(converter), symTable(symTable), semaCtx(semaCtx), loc(loc), + eval(eval), dir(dir) {} OpWithBodyGenInfo &setGenNested(bool value) { genNested = value; @@ -589,6 +590,8 @@ struct OpWithBodyGenInfo { /// [inout] converter to use for the clauses. Fortran::lower::AbstractConverter &converter; + /// [in] Symbol table + Fortran::lower::SymMap &symTable; /// [in] Semantics context Fortran::semantics::SemanticsContext &semaCtx; /// [in] location in source code. @@ -764,6 +767,7 @@ static void createBodyOfOp(mlir::Operation &op, OpWithBodyGenInfo &info) { static void genBodyOfTargetDataOp( Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::omp::TargetDataOp &dataOp, llvm::ArrayRef<mlir::Type> useDeviceTypes, @@ -830,6 +834,7 @@ static void genBodyOfTargetDataOp( // all the symbols present in mapSymbols as block arguments to this block. static void genBodyOfTargetOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::omp::TargetOp &targetOp, @@ -1267,6 +1272,7 @@ static void genWsloopClauses( static mlir::omp::BarrierOp genBarrierOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, mlir::Location loc) { return converter.getFirOpBuilder().create<mlir::omp::BarrierOp>(loc); @@ -1274,6 +1280,7 @@ genBarrierOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::CriticalOp genCriticalOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::Location loc, const List<Clause> &clauses, @@ -1298,7 +1305,7 @@ genCriticalOp(Fortran::lower::AbstractConverter &converter, } return genOpWithBody<mlir::omp::CriticalOp>( - OpWithBodyGenInfo(converter, semaCtx, loc, eval, + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, eval, llvm::omp::Directive::OMPD_critical) .setGenNested(genNested), nameAttr); @@ -1306,6 +1313,7 @@ genCriticalOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::DistributeOp genDistributeOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::Location loc, const List<Clause> &clauses) { @@ -1315,6 +1323,7 @@ genDistributeOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::FlushOp genFlushOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, mlir::Location loc, const ObjectList &objects, const List<Clause> &clauses) { @@ -1327,17 +1336,19 @@ genFlushOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::MasterOp genMasterOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::Location loc) { return genOpWithBody<mlir::omp::MasterOp>( - OpWithBodyGenInfo(converter, semaCtx, loc, eval, + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, eval, llvm::omp::Directive::OMPD_master) .setGenNested(genNested)); } static mlir::omp::OrderedOp genOrderedOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, mlir::Location loc, const List<Clause> &clauses) { @@ -1347,6 +1358,7 @@ genOrderedOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::OrderedRegionOp genOrderedRegionOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::Location loc, const List<Clause> &clauses) { @@ -1354,7 +1366,7 @@ genOrderedRegionOp(Fortran::lower::AbstractConverter &converter, genOrderedRegionClauses(converter, semaCtx, clauses, loc, clauseOps); return genOpWithBody<mlir::omp::OrderedRegionOp>( - OpWithBodyGenInfo(converter, semaCtx, loc, eval, + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, eval, llvm::omp::Directive::OMPD_ordered) .setGenNested(genNested), clauseOps); @@ -1383,7 +1395,7 @@ genParallelOp(Fortran::lower::AbstractConverter &converter, }; OpWithBodyGenInfo genInfo = - OpWithBodyGenInfo(converter, semaCtx, loc, eval, + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, eval, llvm::omp::Directive::OMPD_parallel) .setGenNested(genNested) .setOuterCombined(outerCombined) @@ -1440,13 +1452,14 @@ genParallelOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::SectionOp genSectionOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::Location loc, const List<Clause> &clauses) { // Currently only private/firstprivate clause is handled, and // all privatization is done within `omp.section` operations. return genOpWithBody<mlir::omp::SectionOp>( - OpWithBodyGenInfo(converter, semaCtx, loc, eval, + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, eval, llvm::omp::Directive::OMPD_section) .setGenNested(genNested) .setClauses(&clauses)); @@ -1454,11 +1467,12 @@ genSectionOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::SectionsOp genSectionsOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, mlir::Location loc, const mlir::omp::SectionsClauseOps &clauseOps) { return genOpWithBody<mlir::omp::SectionsOp>( - OpWithBodyGenInfo(converter, semaCtx, loc, eval, + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, eval, llvm::omp::Directive::OMPD_sections) .setGenNested(false), clauseOps); @@ -1466,6 +1480,7 @@ genSectionsOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::SimdOp genSimdOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, mlir::Location loc, const List<Clause> &clauses) { @@ -1499,8 +1514,8 @@ genSimdOp(Fortran::lower::AbstractConverter &converter, }; createBodyOfOp(*loopOp, - OpWithBodyGenInfo(converter, semaCtx, loc, *nestedEval, - llvm::omp::Directive::OMPD_simd) + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, + *nestedEval, llvm::omp::Directive::OMPD_simd) .setClauses(&clauses) .setDataSharingProcessor(&dsp) .setGenRegionEntryCb(ivCallback)); @@ -1510,6 +1525,7 @@ genSimdOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::SingleOp genSingleOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::Location loc, const List<Clause> &clauses) { @@ -1517,7 +1533,7 @@ genSingleOp(Fortran::lower::AbstractConverter &converter, genSingleClauses(converter, semaCtx, clauses, loc, clauseOps); return genOpWithBody<mlir::omp::SingleOp>( - OpWithBodyGenInfo(converter, semaCtx, loc, eval, + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, eval, llvm::omp::Directive::OMPD_single) .setGenNested(genNested) .setClauses(&clauses), @@ -1526,6 +1542,7 @@ genSingleOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::TargetOp genTargetOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::Location loc, const List<Clause> &clauses, @@ -1633,13 +1650,14 @@ genTargetOp(Fortran::lower::AbstractConverter &converter, Fortran::lower::pft::visitAllSymbols(eval, captureImplicitMap); auto targetOp = firOpBuilder.create<mlir::omp::TargetOp>(loc, clauseOps); - genBodyOfTargetOp(converter, semaCtx, eval, genNested, targetOp, mapSyms, - mapLocs, mapTypes, loc); + genBodyOfTargetOp(converter, symTable, semaCtx, eval, genNested, targetOp, + mapSyms, mapLocs, mapTypes, loc); return targetOp; } static mlir::omp::TargetDataOp genTargetDataOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::Location loc, const List<Clause> &clauses) { @@ -1654,14 +1672,16 @@ genTargetDataOp(Fortran::lower::AbstractConverter &converter, auto targetDataOp = converter.getFirOpBuilder().create<mlir::omp::TargetDataOp>(loc, clauseOps); - genBodyOfTargetDataOp(converter, semaCtx, eval, genNested, targetDataOp, - useDeviceTypes, useDeviceLocs, useDeviceSyms, loc); + genBodyOfTargetDataOp(converter, symTable, semaCtx, eval, genNested, + targetDataOp, useDeviceTypes, useDeviceLocs, + useDeviceSyms, loc); return targetDataOp; } template <typename OpTy> static OpTy genTargetEnterExitUpdateDataOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, mlir::Location loc, const List<Clause> &clauses) { @@ -1689,6 +1709,7 @@ genTargetEnterExitUpdateDataOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::TaskOp genTaskOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::Location loc, const List<Clause> &clauses) { @@ -1697,7 +1718,7 @@ genTaskOp(Fortran::lower::AbstractConverter &converter, genTaskClauses(converter, semaCtx, stmtCtx, clauses, loc, clauseOps); return genOpWithBody<mlir::omp::TaskOp>( - OpWithBodyGenInfo(converter, semaCtx, loc, eval, + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, eval, llvm::omp::Directive::OMPD_task) .setGenNested(genNested) .setClauses(&clauses), @@ -1706,6 +1727,7 @@ genTaskOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::TaskgroupOp genTaskgroupOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::Location loc, const List<Clause> &clauses) { @@ -1713,7 +1735,7 @@ genTaskgroupOp(Fortran::lower::AbstractConverter &converter, genTaskgroupClauses(converter, semaCtx, clauses, loc, clauseOps); return genOpWithBody<mlir::omp::TaskgroupOp>( - OpWithBodyGenInfo(converter, semaCtx, loc, eval, + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, eval, llvm::omp::Directive::OMPD_taskgroup) .setGenNested(genNested) .setClauses(&clauses), @@ -1722,6 +1744,7 @@ genTaskgroupOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::TaskloopOp genTaskloopOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, mlir::Location loc, const List<Clause> &clauses) { @@ -1730,6 +1753,7 @@ genTaskloopOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::TaskwaitOp genTaskwaitOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, mlir::Location loc, const List<Clause> &clauses) { @@ -1741,6 +1765,7 @@ genTaskwaitOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::TaskyieldOp genTaskyieldOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, mlir::Location loc) { return converter.getFirOpBuilder().create<mlir::omp::TaskyieldOp>(loc); @@ -1748,6 +1773,7 @@ genTaskyieldOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::TeamsOp genTeamsOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, bool genNested, mlir::Location loc, const List<Clause> &clauses, @@ -1757,7 +1783,7 @@ genTeamsOp(Fortran::lower::AbstractConverter &converter, genTeamsClauses(converter, semaCtx, stmtCtx, clauses, loc, clauseOps); return genOpWithBody<mlir::omp::TeamsOp>( - OpWithBodyGenInfo(converter, semaCtx, loc, eval, + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, eval, llvm::omp::Directive::OMPD_teams) .setGenNested(genNested) .setOuterCombined(outerCombined) @@ -1767,6 +1793,7 @@ genTeamsOp(Fortran::lower::AbstractConverter &converter, static mlir::omp::WsloopOp genWsloopOp(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, mlir::Location loc, const List<Clause> &clauses) { @@ -1805,8 +1832,8 @@ genWsloopOp(Fortran::lower::AbstractConverter &converter, }; createBodyOfOp(*loopOp, - OpWithBodyGenInfo(converter, semaCtx, loc, *nestedEval, - llvm::omp::Directive::OMPD_do) + OpWithBodyGenInfo(converter, symTable, semaCtx, loc, + *nestedEval, llvm::omp::Directive::OMPD_do) .setClauses(&clauses) .setDataSharingProcessor(&dsp) .setReductions(&reductionSyms, &reductionTypes) @@ -1820,6 +1847,7 @@ genWsloopOp(Fortran::lower::AbstractConverter &converter, static void genCompositeDistributeParallelDo(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, const List<Clause> &clauses, @@ -1829,6 +1857,7 @@ genCompositeDistributeParallelDo(Fortran::lower::AbstractConverter &converter, static void genCompositeDistributeParallelDoSimd( Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, const List<Clause> &clauses, mlir::Location loc) { @@ -1837,6 +1866,7 @@ static void genCompositeDistributeParallelDoSimd( static void genCompositeDistributeSimd(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, const List<Clause> &clauses, mlir::Location loc) { @@ -1844,6 +1874,7 @@ genCompositeDistributeSimd(Fortran::lower::AbstractConverter &converter, } static void genCompositeDoSimd(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, const List<Clause> &clauses, @@ -1860,11 +1891,12 @@ static void genCompositeDoSimd(Fortran::lower::AbstractConverter &converter, // When support for vectorization is enabled, then we need to add handling of // if clause. Currently if clause can be skipped because we always assume // SIMD length = 1. - genWsloopOp(converter, semaCtx, eval, loc, clauses); + genWsloopOp(converter, symTable, semaCtx, eval, loc, clauses); } static void genCompositeTaskloopSimd(Fortran::lower::AbstractConverter &converter, + Fortran::lower::SymMap &symTable, Fortran::semantics::SemanticsContext &semaCtx, Fortran::lower::pft::Evaluation &eval, const List<Clause> &clauses, mlir::Location loc) { @@ -1985,32 +2017,32 @@ static void genOMP(Fortran::lower::AbstractConverter &converter, default: break; case llvm::omp::Directive::OMPD_barrier: - genBarrierOp(converter, semaCtx, eval, currentLocation); + genBarrierOp(converter, symTable, semaCtx, eval, currentLocation); break; case llvm::omp::Directive::OMPD_taskwait: - genTaskwaitOp(converter, semaCtx, eval, currentLocation, clauses); + genTaskwaitOp(converter, symTable, semaCtx, eval, currentLocation, clauses); break; case llvm::omp::Directive::OMPD_taskyield: - genTaskyieldOp(converter, semaCtx, eval, currentLocation); + genTaskyieldOp(converter, symTable, semaCtx, eval, currentLocation); break; case llvm::omp::Directive::OMPD_target_data: - genTargetDataOp(converter, semaCtx, eval, /*genNested=*/true, + genTargetDataOp(converter, symTable, semaCtx, eval, /*genNested=*/true, currentLocation, clauses); break; case llvm::omp::Directive::OMPD_target_enter_data: genTargetEnterExitUpdateDataOp<mlir::omp::TargetEnterDataOp>( - converter, semaCtx, currentLoca... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/90090 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits