-
Notifications
You must be signed in to change notification settings - Fork 13.7k
[flang] Extend omp loop
semantic checks for reduction
#128823
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-flang-openmp Author: Kareem Ergawy (ergawy) ChangesExtend semantic checks for This is similar to how clang behaves. Full diff: https://github.com/llvm/llvm-project/pull/128823.diff 2 Files Affected:
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index ef7204dcd9196..e6e36b773b3c5 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -3118,6 +3118,18 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Reduction &x) {
if (llvm::omp::nestedReduceWorkshareAllowedSet.test(GetContext().directive)) {
CheckSharedBindingInOuterContext(objects);
}
+
+ if (GetContext().directive == llvm::omp::Directive::OMPD_loop) {
+ for (auto clause : GetContext().clauseInfo) {
+ if (const auto *bindClause{
+ std::get_if<parser::OmpClause::Bind>(&clause.second->u)}) {
+ if (bindClause->v.v == parser::OmpBindClause::Binding::Teams) {
+ context_.Say(GetContext().clauseSource,
+ "'REDUCTION' clause not allowed with '!$OMP LOOP BIND(TEAMS)."_err_en_US);
+ }
+ }
+ }
+ }
}
void OmpStructureChecker::Enter(const parser::OmpClause::InReduction &x) {
diff --git a/flang/test/Semantics/OpenMP/loop-bind.f90 b/flang/test/Semantics/OpenMP/loop-bind.f90
index f3aa9d19fe989..8f03910644370 100644
--- a/flang/test/Semantics/OpenMP/loop-bind.f90
+++ b/flang/test/Semantics/OpenMP/loop-bind.f90
@@ -30,4 +30,9 @@ program main
end do
!$omp end teams loop
+ !ERROR: 'REDUCTION' clause not allowed with '!$OMP LOOP BIND(TEAMS).
+ !$omp loop bind(teams) reduction(+: x)
+ do i = 0, 10
+ x = x + i
+ end do
end program main
|
@llvm/pr-subscribers-flang-semantics Author: Kareem Ergawy (ergawy) ChangesExtend semantic checks for This is similar to how clang behaves. Full diff: https://github.com/llvm/llvm-project/pull/128823.diff 2 Files Affected:
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index ef7204dcd9196..e6e36b773b3c5 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -3118,6 +3118,18 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Reduction &x) {
if (llvm::omp::nestedReduceWorkshareAllowedSet.test(GetContext().directive)) {
CheckSharedBindingInOuterContext(objects);
}
+
+ if (GetContext().directive == llvm::omp::Directive::OMPD_loop) {
+ for (auto clause : GetContext().clauseInfo) {
+ if (const auto *bindClause{
+ std::get_if<parser::OmpClause::Bind>(&clause.second->u)}) {
+ if (bindClause->v.v == parser::OmpBindClause::Binding::Teams) {
+ context_.Say(GetContext().clauseSource,
+ "'REDUCTION' clause not allowed with '!$OMP LOOP BIND(TEAMS)."_err_en_US);
+ }
+ }
+ }
+ }
}
void OmpStructureChecker::Enter(const parser::OmpClause::InReduction &x) {
diff --git a/flang/test/Semantics/OpenMP/loop-bind.f90 b/flang/test/Semantics/OpenMP/loop-bind.f90
index f3aa9d19fe989..8f03910644370 100644
--- a/flang/test/Semantics/OpenMP/loop-bind.f90
+++ b/flang/test/Semantics/OpenMP/loop-bind.f90
@@ -30,4 +30,9 @@ program main
end do
!$omp end teams loop
+ !ERROR: 'REDUCTION' clause not allowed with '!$OMP LOOP BIND(TEAMS).
+ !$omp loop bind(teams) reduction(+: x)
+ do i = 0, 10
+ x = x + i
+ end do
end program main
|
Ping! Please take a look when you have time. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, except the two nits about missing an '
sign in the error message.
Extend semantic checks for `omp loop` directive to report errors when a `reduction` clause is specified on a standalone `loop` directive with `teams` binding. This is similar to how clang behaves.
8f2c57e
to
5b88e7d
Compare
Extend semantic checks for `omp loop` directive to report errors when a `reduction` clause is specified on a standalone `loop` directive with `teams` binding. This is similar to how clang behaves.
Extend semantic checks for
omp loop
directive to report errors when areduction
clause is specified on a standaloneloop
directive withteams
binding.This is similar to how clang behaves.