[clang] 3911810 - Revert "[OpenMP] Patch for Support to loop bind clause : Checking Parent Region"
Chi Chun Chen via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 26 14:57:59 PDT 2023
Author: Chi Chun Chen
Date: 2023-10-26T16:57:36-05:00
New Revision: 391181062f8d1b9277a9068a7edf41be721ca5cf
URL: https://github.com/llvm/llvm-project/commit/391181062f8d1b9277a9068a7edf41be721ca5cf
DIFF: https://github.com/llvm/llvm-project/commit/391181062f8d1b9277a9068a7edf41be721ca5cf.diff
LOG: Revert "[OpenMP] Patch for Support to loop bind clause : Checking Parent Region"
This reverts commit 85f6b2fac9a367337e43ca288c45ea783981cc16.
Added:
Modified:
clang/include/clang/Sema/Sema.h
clang/lib/Sema/SemaOpenMP.cpp
clang/test/OpenMP/loop_bind_messages.cpp
clang/test/PCH/pragma-loop.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 18ac85011aa752a..1e9752345ffd173 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -11307,7 +11307,6 @@ class Sema final {
/// on the parameter of the bind clause. In the methods for the
/// mapped directives, check the parameters of the lastprivate clause.
bool checkLastPrivateForMappedDirectives(ArrayRef<OMPClause *> Clauses);
-
/// Depending on the bind clause of OMPD_loop map the directive to new
/// directives.
/// 1) loop bind(parallel) --> OMPD_for
@@ -11317,12 +11316,9 @@ class Sema final {
/// rigorous semantic checking in the new mapped directives.
bool mapLoopConstruct(llvm::SmallVector<OMPClause *> &ClausesWithoutBind,
ArrayRef<OMPClause *> Clauses,
- OpenMPBindClauseKind &BindKind,
+ OpenMPBindClauseKind BindKind,
OpenMPDirectiveKind &Kind,
- OpenMPDirectiveKind &PrevMappedDirective,
- SourceLocation StartLoc, SourceLocation EndLoc,
- const DeclarationNameInfo &DirName,
- OpenMPDirectiveKind CancelRegion);
+ OpenMPDirectiveKind &PrevMappedDirective);
public:
/// The declarator \p D defines a function in the scope \p S which is nested
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index f28e0f2693080c1..75f9e152dca9297 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -5062,18 +5062,6 @@ static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack,
CurrentRegion != OMPD_cancellation_point &&
CurrentRegion != OMPD_cancel && CurrentRegion != OMPD_scan)
return false;
- // Checks needed for mapping "loop" construct. Please check mapLoopConstruct
- // for a detailed explanation
- if (SemaRef.LangOpts.OpenMP >= 50 && CurrentRegion == OMPD_loop &&
- ((BindKind == OMPC_BIND_parallel) || (BindKind == OMPC_BIND_teams)) &&
- (isOpenMPWorksharingDirective(ParentRegion) ||
- ParentRegion == OMPD_loop)) {
- int ErrorMsgNumber = (BindKind == OMPC_BIND_parallel) ? 1 : 4;
- SemaRef.Diag(StartLoc, diag::err_omp_prohibited_region)
- << true << getOpenMPDirectiveName(ParentRegion) << ErrorMsgNumber
- << getOpenMPDirectiveName(CurrentRegion);
- return true;
- }
if (CurrentRegion == OMPD_cancellation_point ||
CurrentRegion == OMPD_cancel) {
// OpenMP [2.16, Nesting of Regions]
@@ -6126,40 +6114,35 @@ processImplicitMapsWithDefaultMappers(Sema &S, DSAStackTy *Stack,
bool Sema::mapLoopConstruct(llvm::SmallVector<OMPClause *> &ClausesWithoutBind,
ArrayRef<OMPClause *> Clauses,
- OpenMPBindClauseKind &BindKind,
+ OpenMPBindClauseKind BindKind,
OpenMPDirectiveKind &Kind,
- OpenMPDirectiveKind &PrevMappedDirective,
- SourceLocation StartLoc, SourceLocation EndLoc,
- const DeclarationNameInfo &DirName,
- OpenMPDirectiveKind CancelRegion) {
+ OpenMPDirectiveKind &PrevMappedDirective) {
bool UseClausesWithoutBind = false;
// Restricting to "#pragma omp loop bind"
if (getLangOpts().OpenMP >= 50 && Kind == OMPD_loop) {
-
- const OpenMPDirectiveKind ParentDirective = DSAStack->getParentDirective();
-
if (BindKind == OMPC_BIND_unknown) {
// Setting the enclosing teams or parallel construct for the loop
// directive without bind clause.
BindKind = OMPC_BIND_thread; // Default bind(thread) if binding is unknown
+ const OpenMPDirectiveKind ParentDirective =
+ DSAStack->getParentDirective();
if (ParentDirective == OMPD_unknown) {
Diag(DSAStack->getDefaultDSALocation(),
diag::err_omp_bind_required_on_loop);
- } else if (isOpenMPParallelDirective(ParentDirective) &&
- !isOpenMPTeamsDirective(ParentDirective)) {
+ } else if (ParentDirective == OMPD_parallel ||
+ ParentDirective == OMPD_target_parallel) {
BindKind = OMPC_BIND_parallel;
- } else if (isOpenMPNestingTeamsDirective(ParentDirective) ||
- (ParentDirective == OMPD_target_teams)) {
+ } else if (ParentDirective == OMPD_teams ||
+ ParentDirective == OMPD_target_teams) {
BindKind = OMPC_BIND_teams;
}
} else {
- // bind clause is present in loop directive. When the loop directive is
- // changed to a new directive the bind clause is not used. So, we should
- // set flag indicating to only use the clauses that aren't the
- // bind clause.
+ // bind clause is present, so we should set flag indicating to only
+ // use the clauses that aren't the bind clause for the new directive that
+ // loop is lowered to.
UseClausesWithoutBind = true;
}
@@ -6220,35 +6203,26 @@ StmtResult Sema::ActOnOpenMPExecutableDirective(
OpenMPDirectiveKind PrevMappedDirective) {
StmtResult Res = StmtError();
OpenMPBindClauseKind BindKind = OMPC_BIND_unknown;
- llvm::SmallVector<OMPClause *> ClausesWithoutBind;
- bool UseClausesWithoutBind = false;
-
if (const OMPBindClause *BC =
OMPExecutableDirective::getSingleClause<OMPBindClause>(Clauses))
BindKind = BC->getBindKind();
-
- // Variable used to note down the DirectiveKind because mapLoopConstruct may
- // change "Kind" variable, due to mapping of "omp loop" to other directives.
- OpenMPDirectiveKind DK = Kind;
- if ((Kind == OMPD_loop) || (PrevMappedDirective == OMPD_loop)) {
- UseClausesWithoutBind = mapLoopConstruct(
- ClausesWithoutBind, Clauses, BindKind, Kind, PrevMappedDirective,
- StartLoc, EndLoc, DirName, CancelRegion);
- DK = OMPD_loop;
- }
-
// First check CancelRegion which is then used in checkNestingOfRegions.
if (checkCancelRegion(*this, Kind, CancelRegion, StartLoc) ||
- checkNestingOfRegions(*this, DSAStack, DK, DirName, CancelRegion,
- BindKind, StartLoc)) {
+ checkNestingOfRegions(*this, DSAStack, Kind, DirName, CancelRegion,
+ BindKind, StartLoc))
return StmtError();
- }
// Report affected OpenMP target offloading behavior when in HIP lang-mode.
if (getLangOpts().HIP && (isOpenMPTargetExecutionDirective(Kind) ||
isOpenMPTargetDataManagementDirective(Kind)))
Diag(StartLoc, diag::warn_hip_omp_target_directives);
+ llvm::SmallVector<OMPClause *> ClausesWithoutBind;
+ bool UseClausesWithoutBind = false;
+
+ UseClausesWithoutBind = mapLoopConstruct(ClausesWithoutBind, Clauses,
+ BindKind, Kind, PrevMappedDirective);
+
llvm::SmallVector<OMPClause *, 8> ClausesWithImplicit;
VarsWithInheritedDSAType VarsWithInheritedDSA;
bool ErrorFound = false;
diff --git a/clang/test/OpenMP/loop_bind_messages.cpp b/clang/test/OpenMP/loop_bind_messages.cpp
index 186a990fd7c52bc..f7fdf2897143289 100644
--- a/clang/test/OpenMP/loop_bind_messages.cpp
+++ b/clang/test/OpenMP/loop_bind_messages.cpp
@@ -4,7 +4,6 @@
#define NNN 50
int aaa[NNN];
-int aaa2[NNN][NNN];
void parallel_loop() {
#pragma omp parallel
@@ -16,91 +15,6 @@ void parallel_loop() {
}
}
-void parallel_for_AND_loop_bind() {
- #pragma omp parallel for
- for (int i = 0 ; i < NNN ; i++) {
- #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}}
- for (int j = 0 ; j < NNN ; j++) {
- aaa2[i][j] = i+j;
- }
- }
-}
-
-void parallel_nowait() {
- #pragma omp parallel
- #pragma omp for nowait
- for (int i = 0 ; i < NNN ; i++) {
- #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}}
- for (int j = 0 ; j < NNN ; j++) {
- aaa2[i][j] = i+j;
- }
- }
-}
-
-void parallel_for_with_nothing() {
- #pragma omp parallel for
- for (int i = 0 ; i < NNN ; i++) {
- #pragma omp nothing
- #pragma omp loop // expected-error{{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}}
- for (int j = 0 ; j < NNN ; j++) {
- aaa2[i][j] = i+j;
- }
- }
-}
-
-void parallel_targetfor_with_loop_bind() {
- #pragma omp target teams distribute parallel for
- for (int i = 0 ; i < NNN ; i++) {
- #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}}
- for (int j = 0 ; j < NNN ; j++) {
- aaa2[i][j] = i+j;
- }
- }
-}
-
-void parallel_targetparallel_with_loop() {
- #pragma omp target parallel
- for (int i = 0 ; i < NNN ; i++) {
- #pragma omp loop bind(parallel)
- for (int j = 0 ; j < NNN ; j++) {
- aaa2[i][j] = i+j;
- }
- }
-}
-
-void loop_bind_AND_loop_bind() {
- #pragma omp parallel for
- for (int i = 0; i < 100; ++i) {
- #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}}
- for (int i = 0 ; i < NNN ; i++) {
- #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'loop' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}}
- for (int j = 0 ; j < NNN ; j++) {
- aaa[j] = j*NNN;
- }
- }
- }
-}
-
-void parallel_with_sections_loop() {
- #pragma omp parallel
- {
- #pragma omp sections
- {
- for (int i = 0 ; i < NNN ; i++) {
- #pragma omp loop bind(parallel) // expected-error{{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp loop' directive into a parallel region?}}
- for (int j = 0 ; j < NNN ; j++) {
- aaa2[i][j] = i+j;
- }
- }
-
- #pragma omp section
- {
- aaa[NNN-1] = NNN;
- }
- }
- }
-}
-
void teams_loop() {
int var1, var2;
@@ -120,23 +34,17 @@ void teams_loop() {
}
}
-void teams_targetteams_with_loop() {
- #pragma omp target teams
- for (int i = 0 ; i < NNN ; i++) {
- #pragma omp loop bind(teams)
- for (int j = 0 ; j < NNN ; j++) {
- aaa2[i][j] = i+j;
- }
+void orphan_loop_with_bind() {
+ #pragma omp loop bind(parallel)
+ for (int j = 0 ; j < NNN ; j++) {
+ aaa[j] = j*NNN;
}
}
-void teams_targetfor_with_loop_bind() {
- #pragma omp target teams distribute parallel for
- for (int i = 0 ; i < NNN ; i++) {
- #pragma omp loop bind(teams) // expected-error{{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp loop' directive into a teams region?}}
- for (int j = 0 ; j < NNN ; j++) {
- aaa2[i][j] = i+j;
- }
+void orphan_loop_no_bind() {
+ #pragma omp loop // expected-error{{expected 'bind' clause for 'loop' construct without an enclosing OpenMP construct}}
+ for (int j = 0 ; j < NNN ; j++) {
+ aaa[j] = j*NNN;
}
}
@@ -157,80 +65,12 @@ void teams_loop_reduction() {
}
}
-void teams_loop_distribute() {
- int total = 0;
-
- #pragma omp teams num_teams(8) thread_limit(256)
- #pragma omp distribute parallel for dist_schedule(static, 1024) \
- schedule(static, 64)
- for (int i = 0; i < NNN; i++) {
- #pragma omp loop bind(teams) // expected-error{{'distribute parallel for' region; perhaps you forget to enclose 'omp loop' directive into a teams region?}}
- for (int j = 0; j < NNN; j++) {
- aaa2[i][j] = i+j;
- }
- }
-}
-
-void parallel_for_with_loop_teams_bind(){
- #pragma omp parallel for
- for (int i = 0; i < NNN; i++) {
- #pragma omp loop bind(teams) // expected-error{{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp loop' directive into a teams region?}}
- for (int j = 0 ; j < NNN ; j++) {
- aaa[i] = i+i*NNN;
- }
- }
-}
-
-void teams_with_loop_thread_bind(){
- #pragma omp teams
- for (int i = 0; i < NNN; i++) {
- #pragma omp loop bind(thread)
- for (int j = 0 ; j < NNN ; j++) {
- aaa[i] = i+i*NNN;
- }
- }
-}
-
-void orphan_loop_no_bind() {
- #pragma omp loop // expected-error{{expected 'bind' clause for 'loop' construct without an enclosing OpenMP construct}}
- for (int j = 0 ; j < NNN ; j++) {
- aaa[j] = j*NNN;
- }
-}
-
-void orphan_loop_parallel_bind() {
- #pragma omp loop bind(parallel)
- for (int j = 0 ; j < NNN ; j++) {
- aaa[j] = j*NNN;
- }
-}
-
-void orphan_loop_teams_bind(){
- #pragma omp loop bind(teams)
- for (int i = 0; i < NNN; i++) {
- aaa[i] = i+i*NNN;
- }
-}
-
int main(int argc, char *argv[]) {
parallel_loop();
- parallel_for_AND_loop_bind();
- parallel_nowait();
- parallel_for_with_nothing();
- parallel_targetfor_with_loop_bind();
- parallel_targetparallel_with_loop();
- loop_bind_AND_loop_bind();
- parallel_with_sections_loop();
teams_loop();
- teams_targetteams_with_loop();
- teams_targetfor_with_loop_bind();
- teams_loop_reduction();
- teams_loop_distribute();
- parallel_for_with_loop_teams_bind();
- teams_with_loop_thread_bind();
+ orphan_loop_with_bind();
orphan_loop_no_bind();
- orphan_loop_parallel_bind();
- orphan_loop_teams_bind();
+ teams_loop_reduction();
}
#endif
diff --git a/clang/test/PCH/pragma-loop.cpp b/clang/test/PCH/pragma-loop.cpp
index a3c6871041c0eec..f5de630ffc91206 100644
--- a/clang/test/PCH/pragma-loop.cpp
+++ b/clang/test/PCH/pragma-loop.cpp
@@ -116,13 +116,9 @@ class pragma_test {
inline void run10(int *List, int Length) {
int i = 0;
- int j = 0;
- #pragma omp teams
+#pragma omp loop bind(teams)
for (int i = 0; i < Length; i++) {
- #pragma omp loop bind(teams)
- for (int j = 0; j < Length; j++) {
- List[i] = i+j;
- }
+ List[i] = i;
}
}
More information about the cfe-commits
mailing list