https://github.com/ergawy created https://github.com/llvm/llvm-project/pull/144015
Adds symbol map scopes for standalone `teams` and `parallel` constructs. This is required to properly bind the privatized symbols in both constructs so that nested constructs can find them. Resolves https://github.com/llvm/llvm-project/issues/116428. >From 8b3544902163e060d423777e259cbea7c176847e Mon Sep 17 00:00:00 2001 From: ergawy <kareem.erg...@amd.com> Date: Thu, 12 Jun 2025 23:46:14 -0500 Subject: [PATCH] [flang][OpenMP] Add symbol table scopes for `teams` and `parallel` Adds symbol map scopes for standalone `teams` and `parallel` constructs. This is required to properly bind the privatized symbols in both constructs so that nested constructs can find them. Resolves https://github.com/llvm/llvm-project/issues/116428. --- flang/lib/Lower/OpenMP/OpenMP.cpp | 9 ++------ .../OpenMP/Todo/target-parallel-private.f90 | 13 ------------ .../OpenMP/Todo/target-teams-private.f90 | 13 ------------ .../Lower/OpenMP/target-parallel-private.f90 | 21 +++++++++++++++++++ .../Lower/OpenMP/target-teams-private.f90 | 20 ++++++++++++++++++ 5 files changed, 43 insertions(+), 33 deletions(-) delete mode 100644 flang/test/Lower/OpenMP/Todo/target-parallel-private.f90 delete mode 100644 flang/test/Lower/OpenMP/Todo/target-teams-private.f90 create mode 100644 flang/test/Lower/OpenMP/target-parallel-private.f90 create mode 100644 flang/test/Lower/OpenMP/target-teams-private.f90 diff --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp index 060eba1b906e3..3e865a1ee7185 100644 --- a/flang/lib/Lower/OpenMP/OpenMP.cpp +++ b/flang/lib/Lower/OpenMP/OpenMP.cpp @@ -2674,6 +2674,7 @@ genTeamsOp(lower::AbstractConverter &converter, lower::SymMap &symTable, semantics::SemanticsContext &semaCtx, lower::pft::Evaluation &eval, mlir::Location loc, const ConstructQueue &queue, ConstructQueue::const_iterator item) { + lower::SymMapScope scope(symTable); mlir::omp::TeamsOperands clauseOps; llvm::SmallVector<const semantics::Symbol *> reductionSyms; genTeamsClauses(converter, semaCtx, stmtCtx, item->clauses, loc, clauseOps, @@ -2981,6 +2982,7 @@ static mlir::omp::ParallelOp genStandaloneParallel( lower::StatementContext &stmtCtx, semantics::SemanticsContext &semaCtx, lower::pft::Evaluation &eval, mlir::Location loc, const ConstructQueue &queue, ConstructQueue::const_iterator item) { + lower::SymMapScope scope(symTable); mlir::omp::ParallelOperands parallelClauseOps; llvm::SmallVector<const semantics::Symbol *> parallelReductionSyms; genParallelClauses(converter, semaCtx, stmtCtx, item->clauses, loc, @@ -4027,13 +4029,6 @@ static void genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable, parser::ToUpperCaseLetters(llvm::omp::getOpenMPClauseName(clause.id)); TODO(clauseLocation, name + " clause is not implemented yet"); } - - if (std::holds_alternative<clause::Private>(clause.u) && - origDirective == llvm::omp::Directive::OMPD_target_teams) - TODO(clauseLocation, "TARGET TEAMS PRIVATE is not implemented yet"); - if (std::holds_alternative<clause::Private>(clause.u) && - origDirective == llvm::omp::Directive::OMPD_target_parallel) - TODO(clauseLocation, "TARGET PARALLEL PRIVATE is not implemented yet"); } llvm::omp::Directive directive = diff --git a/flang/test/Lower/OpenMP/Todo/target-parallel-private.f90 b/flang/test/Lower/OpenMP/Todo/target-parallel-private.f90 deleted file mode 100644 index e820143021f9a..0000000000000 --- a/flang/test/Lower/OpenMP/Todo/target-parallel-private.f90 +++ /dev/null @@ -1,13 +0,0 @@ -! RUN: %not_todo_cmd bbc -emit-fir -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s -! RUN: %not_todo_cmd %flang_fc1 -emit-fir -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s - -!=============================================================================== -! `private` clause on `target parallel` -!=============================================================================== - -! CHECK: not yet implemented: TARGET PARALLEL PRIVATE is not implemented yet -subroutine target_teams_private() -integer, dimension(3) :: i -!$omp target parallel private(i) -!$omp end target parallel -end subroutine diff --git a/flang/test/Lower/OpenMP/Todo/target-teams-private.f90 b/flang/test/Lower/OpenMP/Todo/target-teams-private.f90 deleted file mode 100644 index c8d998a5cbf94..0000000000000 --- a/flang/test/Lower/OpenMP/Todo/target-teams-private.f90 +++ /dev/null @@ -1,13 +0,0 @@ -! RUN: %not_todo_cmd bbc -emit-fir -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s -! RUN: %not_todo_cmd %flang_fc1 -emit-fir -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s - -!=============================================================================== -! `private` clause on `target teams` -!=============================================================================== - -! CHECK: not yet implemented: TARGET TEAMS PRIVATE is not implemented yet -subroutine target_teams_private() -integer, dimension(3) :: i -!$omp target teams private(i) -!$omp end target teams -end subroutine diff --git a/flang/test/Lower/OpenMP/target-parallel-private.f90 b/flang/test/Lower/OpenMP/target-parallel-private.f90 new file mode 100644 index 0000000000000..cc04b77e4a527 --- /dev/null +++ b/flang/test/Lower/OpenMP/target-parallel-private.f90 @@ -0,0 +1,21 @@ +! RUN: %flang_fc1 -emit-hlfir -fopenmp -mmlir --enable-delayed-privatization \ +! RUN: -o - %s 2>&1 | FileCheck %s +! RUN: bbc -emit-hlfir -fopenmp --enable-delayed-privatization -o - %s 2>&1 |\ +! RUN: FileCheck %s + +!=============================================================================== +! `private` clause on `target parallel` +!=============================================================================== + +subroutine target_parallel_private() +integer, dimension(3) :: i +!$omp target parallel private(i) +!$omp end target parallel +end subroutine + +! CHECK: omp.private {type = private} @[[PRIVATIZER:.*]] : {{.*}} + +! CHECK: omp.target {{.*}} { +! CHECK: omp.parallel private(@[[PRIVATIZER]] %{{.*}} -> %{{.*}} : {{.*}}) { +! CHECK: } +! CHECK: } diff --git a/flang/test/Lower/OpenMP/target-teams-private.f90 b/flang/test/Lower/OpenMP/target-teams-private.f90 new file mode 100644 index 0000000000000..65d97649b5cf3 --- /dev/null +++ b/flang/test/Lower/OpenMP/target-teams-private.f90 @@ -0,0 +1,20 @@ +! RUN: %flang_fc1 -emit-hlfir -fopenmp -mmlir --enable-delayed-privatization \ +! RUN: -o - %s 2>&1 | FileCheck %s +! RUN: bbc -emit-hlfir -fopenmp --enable-delayed-privatization -o - %s 2>&1 |\ +! RUN: FileCheck %s + +!=============================================================================== +! `private` clause on `target teams` +!=============================================================================== + +subroutine target_teams_private() +integer, dimension(3) :: i +!$omp target teams private(i) +!$omp end target teams +end subroutine + +! CHECK: omp.target {{.*}} { +! CHECK: omp.teams { +! CHECK: %{{.*}} = fir.alloca !fir.array<3xi32> {bindc_name = "i", {{.*}}} +! CHECK: } +! CHECK: } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits