Skip to content

Commit 08892cc

Browse files
authored
[clang][OpenMP] Simplify handling of if clause (#96936)
Get the allowed name modifiers from the list of constituent leaf directives.
1 parent 7ef08ea commit 08892cc

File tree

1 file changed

+5
-83
lines changed

1 file changed

+5
-83
lines changed

clang/lib/Sema/SemaOpenMP.cpp

Lines changed: 5 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -6549,18 +6549,14 @@ StmtResult SemaOpenMP::ActOnOpenMPExecutableDirective(
65496549
ClausesWithImplicit);
65506550
}
65516551

6552-
llvm::SmallVector<OpenMPDirectiveKind, 4> AllowedNameModifiers;
65536552
switch (Kind) {
65546553
case OMPD_parallel:
65556554
Res = ActOnOpenMPParallelDirective(ClausesWithImplicit, AStmt, StartLoc,
65566555
EndLoc);
6557-
AllowedNameModifiers.push_back(OMPD_parallel);
65586556
break;
65596557
case OMPD_simd:
65606558
Res = ActOnOpenMPSimdDirective(ClausesWithImplicit, AStmt, StartLoc, EndLoc,
65616559
VarsWithInheritedDSA);
6562-
if (getLangOpts().OpenMP >= 50)
6563-
AllowedNameModifiers.push_back(OMPD_simd);
65646560
break;
65656561
case OMPD_tile:
65666562
Res =
@@ -6577,8 +6573,6 @@ StmtResult SemaOpenMP::ActOnOpenMPExecutableDirective(
65776573
case OMPD_for_simd:
65786574
Res = ActOnOpenMPForSimdDirective(ClausesWithImplicit, AStmt, StartLoc,
65796575
EndLoc, VarsWithInheritedDSA);
6580-
if (getLangOpts().OpenMP >= 50)
6581-
AllowedNameModifiers.push_back(OMPD_simd);
65826576
break;
65836577
case OMPD_sections:
65846578
Res = ActOnOpenMPSectionsDirective(ClausesWithImplicit, AStmt, StartLoc,
@@ -6609,14 +6603,10 @@ StmtResult SemaOpenMP::ActOnOpenMPExecutableDirective(
66096603
case OMPD_parallel_for:
66106604
Res = ActOnOpenMPParallelForDirective(ClausesWithImplicit, AStmt, StartLoc,
66116605
EndLoc, VarsWithInheritedDSA);
6612-
AllowedNameModifiers.push_back(OMPD_parallel);
66136606
break;
66146607
case OMPD_parallel_for_simd:
66156608
Res = ActOnOpenMPParallelForSimdDirective(
66166609
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6617-
AllowedNameModifiers.push_back(OMPD_parallel);
6618-
if (getLangOpts().OpenMP >= 50)
6619-
AllowedNameModifiers.push_back(OMPD_simd);
66206610
break;
66216611
case OMPD_scope:
66226612
Res =
@@ -6625,22 +6615,18 @@ StmtResult SemaOpenMP::ActOnOpenMPExecutableDirective(
66256615
case OMPD_parallel_master:
66266616
Res = ActOnOpenMPParallelMasterDirective(ClausesWithImplicit, AStmt,
66276617
StartLoc, EndLoc);
6628-
AllowedNameModifiers.push_back(OMPD_parallel);
66296618
break;
66306619
case OMPD_parallel_masked:
66316620
Res = ActOnOpenMPParallelMaskedDirective(ClausesWithImplicit, AStmt,
66326621
StartLoc, EndLoc);
6633-
AllowedNameModifiers.push_back(OMPD_parallel);
66346622
break;
66356623
case OMPD_parallel_sections:
66366624
Res = ActOnOpenMPParallelSectionsDirective(ClausesWithImplicit, AStmt,
66376625
StartLoc, EndLoc);
6638-
AllowedNameModifiers.push_back(OMPD_parallel);
66396626
break;
66406627
case OMPD_task:
66416628
Res =
66426629
ActOnOpenMPTaskDirective(ClausesWithImplicit, AStmt, StartLoc, EndLoc);
6643-
AllowedNameModifiers.push_back(OMPD_task);
66446630
break;
66456631
case OMPD_taskyield:
66466632
assert(ClausesWithImplicit.empty() &&
@@ -6700,19 +6686,14 @@ StmtResult SemaOpenMP::ActOnOpenMPExecutableDirective(
67006686
case OMPD_target:
67016687
Res = ActOnOpenMPTargetDirective(ClausesWithImplicit, AStmt, StartLoc,
67026688
EndLoc);
6703-
AllowedNameModifiers.push_back(OMPD_target);
67046689
break;
67056690
case OMPD_target_parallel:
67066691
Res = ActOnOpenMPTargetParallelDirective(ClausesWithImplicit, AStmt,
67076692
StartLoc, EndLoc);
6708-
AllowedNameModifiers.push_back(OMPD_target);
6709-
AllowedNameModifiers.push_back(OMPD_parallel);
67106693
break;
67116694
case OMPD_target_parallel_for:
67126695
Res = ActOnOpenMPTargetParallelForDirective(
67136696
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6714-
AllowedNameModifiers.push_back(OMPD_target);
6715-
AllowedNameModifiers.push_back(OMPD_parallel);
67166697
break;
67176698
case OMPD_cancellation_point:
67186699
assert(ClausesWithImplicit.empty() &&
@@ -6726,90 +6707,58 @@ StmtResult SemaOpenMP::ActOnOpenMPExecutableDirective(
67266707
"No associated statement allowed for 'omp cancel' directive");
67276708
Res = ActOnOpenMPCancelDirective(ClausesWithImplicit, StartLoc, EndLoc,
67286709
CancelRegion);
6729-
AllowedNameModifiers.push_back(OMPD_cancel);
67306710
break;
67316711
case OMPD_target_data:
67326712
Res = ActOnOpenMPTargetDataDirective(ClausesWithImplicit, AStmt, StartLoc,
67336713
EndLoc);
6734-
AllowedNameModifiers.push_back(OMPD_target_data);
67356714
break;
67366715
case OMPD_target_enter_data:
67376716
Res = ActOnOpenMPTargetEnterDataDirective(ClausesWithImplicit, StartLoc,
67386717
EndLoc, AStmt);
6739-
AllowedNameModifiers.push_back(OMPD_target_enter_data);
67406718
break;
67416719
case OMPD_target_exit_data:
67426720
Res = ActOnOpenMPTargetExitDataDirective(ClausesWithImplicit, StartLoc,
67436721
EndLoc, AStmt);
6744-
AllowedNameModifiers.push_back(OMPD_target_exit_data);
67456722
break;
67466723
case OMPD_taskloop:
67476724
Res = ActOnOpenMPTaskLoopDirective(ClausesWithImplicit, AStmt, StartLoc,
67486725
EndLoc, VarsWithInheritedDSA);
6749-
AllowedNameModifiers.push_back(OMPD_taskloop);
67506726
break;
67516727
case OMPD_taskloop_simd:
67526728
Res = ActOnOpenMPTaskLoopSimdDirective(ClausesWithImplicit, AStmt, StartLoc,
67536729
EndLoc, VarsWithInheritedDSA);
6754-
AllowedNameModifiers.push_back(OMPD_taskloop);
6755-
if (getLangOpts().OpenMP >= 50)
6756-
AllowedNameModifiers.push_back(OMPD_simd);
67576730
break;
67586731
case OMPD_master_taskloop:
67596732
Res = ActOnOpenMPMasterTaskLoopDirective(
67606733
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6761-
AllowedNameModifiers.push_back(OMPD_taskloop);
67626734
break;
67636735
case OMPD_masked_taskloop:
67646736
Res = ActOnOpenMPMaskedTaskLoopDirective(
67656737
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6766-
AllowedNameModifiers.push_back(OMPD_taskloop);
67676738
break;
67686739
case OMPD_master_taskloop_simd:
67696740
Res = ActOnOpenMPMasterTaskLoopSimdDirective(
67706741
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6771-
AllowedNameModifiers.push_back(OMPD_taskloop);
6772-
if (getLangOpts().OpenMP >= 50)
6773-
AllowedNameModifiers.push_back(OMPD_simd);
67746742
break;
67756743
case OMPD_masked_taskloop_simd:
67766744
Res = ActOnOpenMPMaskedTaskLoopSimdDirective(
67776745
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6778-
if (getLangOpts().OpenMP >= 51) {
6779-
AllowedNameModifiers.push_back(OMPD_taskloop);
6780-
AllowedNameModifiers.push_back(OMPD_simd);
6781-
}
67826746
break;
67836747
case OMPD_parallel_master_taskloop:
67846748
Res = ActOnOpenMPParallelMasterTaskLoopDirective(
67856749
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6786-
AllowedNameModifiers.push_back(OMPD_taskloop);
6787-
AllowedNameModifiers.push_back(OMPD_parallel);
67886750
break;
67896751
case OMPD_parallel_masked_taskloop:
67906752
Res = ActOnOpenMPParallelMaskedTaskLoopDirective(
67916753
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6792-
if (getLangOpts().OpenMP >= 51) {
6793-
AllowedNameModifiers.push_back(OMPD_taskloop);
6794-
AllowedNameModifiers.push_back(OMPD_parallel);
6795-
}
67966754
break;
67976755
case OMPD_parallel_master_taskloop_simd:
67986756
Res = ActOnOpenMPParallelMasterTaskLoopSimdDirective(
67996757
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6800-
AllowedNameModifiers.push_back(OMPD_taskloop);
6801-
AllowedNameModifiers.push_back(OMPD_parallel);
6802-
if (getLangOpts().OpenMP >= 50)
6803-
AllowedNameModifiers.push_back(OMPD_simd);
68046758
break;
68056759
case OMPD_parallel_masked_taskloop_simd:
68066760
Res = ActOnOpenMPParallelMaskedTaskLoopSimdDirective(
68076761
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6808-
if (getLangOpts().OpenMP >= 51) {
6809-
AllowedNameModifiers.push_back(OMPD_taskloop);
6810-
AllowedNameModifiers.push_back(OMPD_parallel);
6811-
AllowedNameModifiers.push_back(OMPD_simd);
6812-
}
68136762
break;
68146763
case OMPD_distribute:
68156764
Res = ActOnOpenMPDistributeDirective(ClausesWithImplicit, AStmt, StartLoc,
@@ -6818,40 +6767,26 @@ StmtResult SemaOpenMP::ActOnOpenMPExecutableDirective(
68186767
case OMPD_target_update:
68196768
Res = ActOnOpenMPTargetUpdateDirective(ClausesWithImplicit, StartLoc,
68206769
EndLoc, AStmt);
6821-
AllowedNameModifiers.push_back(OMPD_target_update);
68226770
break;
68236771
case OMPD_distribute_parallel_for:
68246772
Res = ActOnOpenMPDistributeParallelForDirective(
68256773
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6826-
AllowedNameModifiers.push_back(OMPD_parallel);
68276774
break;
68286775
case OMPD_distribute_parallel_for_simd:
68296776
Res = ActOnOpenMPDistributeParallelForSimdDirective(
68306777
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6831-
AllowedNameModifiers.push_back(OMPD_parallel);
6832-
if (getLangOpts().OpenMP >= 50)
6833-
AllowedNameModifiers.push_back(OMPD_simd);
68346778
break;
68356779
case OMPD_distribute_simd:
68366780
Res = ActOnOpenMPDistributeSimdDirective(
68376781
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6838-
if (getLangOpts().OpenMP >= 50)
6839-
AllowedNameModifiers.push_back(OMPD_simd);
68406782
break;
68416783
case OMPD_target_parallel_for_simd:
68426784
Res = ActOnOpenMPTargetParallelForSimdDirective(
68436785
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6844-
AllowedNameModifiers.push_back(OMPD_target);
6845-
AllowedNameModifiers.push_back(OMPD_parallel);
6846-
if (getLangOpts().OpenMP >= 50)
6847-
AllowedNameModifiers.push_back(OMPD_simd);
68486786
break;
68496787
case OMPD_target_simd:
68506788
Res = ActOnOpenMPTargetSimdDirective(ClausesWithImplicit, AStmt, StartLoc,
68516789
EndLoc, VarsWithInheritedDSA);
6852-
AllowedNameModifiers.push_back(OMPD_target);
6853-
if (getLangOpts().OpenMP >= 50)
6854-
AllowedNameModifiers.push_back(OMPD_simd);
68556790
break;
68566791
case OMPD_teams_distribute:
68576792
Res = ActOnOpenMPTeamsDistributeDirective(
@@ -6860,51 +6795,34 @@ StmtResult SemaOpenMP::ActOnOpenMPExecutableDirective(
68606795
case OMPD_teams_distribute_simd:
68616796
Res = ActOnOpenMPTeamsDistributeSimdDirective(
68626797
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6863-
if (getLangOpts().OpenMP >= 50)
6864-
AllowedNameModifiers.push_back(OMPD_simd);
68656798
break;
68666799
case OMPD_teams_distribute_parallel_for_simd:
68676800
Res = ActOnOpenMPTeamsDistributeParallelForSimdDirective(
68686801
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6869-
AllowedNameModifiers.push_back(OMPD_parallel);
6870-
if (getLangOpts().OpenMP >= 50)
6871-
AllowedNameModifiers.push_back(OMPD_simd);
68726802
break;
68736803
case OMPD_teams_distribute_parallel_for:
68746804
Res = ActOnOpenMPTeamsDistributeParallelForDirective(
68756805
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6876-
AllowedNameModifiers.push_back(OMPD_parallel);
68776806
break;
68786807
case OMPD_target_teams:
68796808
Res = ActOnOpenMPTargetTeamsDirective(ClausesWithImplicit, AStmt, StartLoc,
68806809
EndLoc);
6881-
AllowedNameModifiers.push_back(OMPD_target);
68826810
break;
68836811
case OMPD_target_teams_distribute:
68846812
Res = ActOnOpenMPTargetTeamsDistributeDirective(
68856813
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6886-
AllowedNameModifiers.push_back(OMPD_target);
68876814
break;
68886815
case OMPD_target_teams_distribute_parallel_for:
68896816
Res = ActOnOpenMPTargetTeamsDistributeParallelForDirective(
68906817
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6891-
AllowedNameModifiers.push_back(OMPD_target);
6892-
AllowedNameModifiers.push_back(OMPD_parallel);
68936818
break;
68946819
case OMPD_target_teams_distribute_parallel_for_simd:
68956820
Res = ActOnOpenMPTargetTeamsDistributeParallelForSimdDirective(
68966821
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6897-
AllowedNameModifiers.push_back(OMPD_target);
6898-
AllowedNameModifiers.push_back(OMPD_parallel);
6899-
if (getLangOpts().OpenMP >= 50)
6900-
AllowedNameModifiers.push_back(OMPD_simd);
69016822
break;
69026823
case OMPD_target_teams_distribute_simd:
69036824
Res = ActOnOpenMPTargetTeamsDistributeSimdDirective(
69046825
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6905-
AllowedNameModifiers.push_back(OMPD_target);
6906-
if (getLangOpts().OpenMP >= 50)
6907-
AllowedNameModifiers.push_back(OMPD_simd);
69086826
break;
69096827
case OMPD_interop:
69106828
assert(AStmt == nullptr &&
@@ -6926,7 +6844,6 @@ StmtResult SemaOpenMP::ActOnOpenMPExecutableDirective(
69266844
case OMPD_target_teams_loop:
69276845
Res = ActOnOpenMPTargetTeamsGenericLoopDirective(
69286846
ClausesWithImplicit, AStmt, StartLoc, EndLoc, VarsWithInheritedDSA);
6929-
AllowedNameModifiers.push_back(OMPD_target);
69306847
break;
69316848
case OMPD_parallel_loop:
69326849
Res = ActOnOpenMPParallelGenericLoopDirective(
@@ -7096,6 +7013,11 @@ StmtResult SemaOpenMP::ActOnOpenMPExecutableDirective(
70967013
}
70977014
}
70987015

7016+
llvm::SmallVector<OpenMPDirectiveKind, 4> AllowedNameModifiers;
7017+
for (OpenMPDirectiveKind D : getLeafConstructsOrSelf(Kind)) {
7018+
if (isAllowedClauseForDirective(D, OMPC_if, getLangOpts().OpenMP))
7019+
AllowedNameModifiers.push_back(D);
7020+
}
70997021
if (!AllowedNameModifiers.empty())
71007022
ErrorFound = checkIfClauses(SemaRef, Kind, Clauses, AllowedNameModifiers) ||
71017023
ErrorFound;

0 commit comments

Comments
 (0)