@@ -574,31 +574,7 @@ const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind,
574
574
}
575
575
576
576
bool clang::isOpenMPLoopDirective (OpenMPDirectiveKind DKind) {
577
- return DKind == OMPD_simd || DKind == OMPD_for || DKind == OMPD_for_simd ||
578
- DKind == OMPD_parallel_for || DKind == OMPD_parallel_for_simd ||
579
- DKind == OMPD_taskloop || DKind == OMPD_taskloop_simd ||
580
- DKind == OMPD_master_taskloop || DKind == OMPD_master_taskloop_simd ||
581
- DKind == OMPD_parallel_master_taskloop ||
582
- DKind == OMPD_parallel_master_taskloop_simd ||
583
- DKind == OMPD_masked_taskloop || DKind == OMPD_masked_taskloop_simd ||
584
- DKind == OMPD_parallel_masked_taskloop || DKind == OMPD_distribute ||
585
- DKind == OMPD_parallel_masked_taskloop_simd ||
586
- DKind == OMPD_target_parallel_for ||
587
- DKind == OMPD_distribute_parallel_for ||
588
- DKind == OMPD_distribute_parallel_for_simd ||
589
- DKind == OMPD_distribute_simd ||
590
- DKind == OMPD_target_parallel_for_simd || DKind == OMPD_target_simd ||
591
- DKind == OMPD_teams_distribute ||
592
- DKind == OMPD_teams_distribute_simd ||
593
- DKind == OMPD_teams_distribute_parallel_for_simd ||
594
- DKind == OMPD_teams_distribute_parallel_for ||
595
- DKind == OMPD_target_teams_distribute ||
596
- DKind == OMPD_target_teams_distribute_parallel_for ||
597
- DKind == OMPD_target_teams_distribute_parallel_for_simd ||
598
- DKind == OMPD_target_teams_distribute_simd || DKind == OMPD_tile ||
599
- DKind == OMPD_unroll || DKind == OMPD_loop ||
600
- DKind == OMPD_teams_loop || DKind == OMPD_target_teams_loop ||
601
- DKind == OMPD_parallel_loop || DKind == OMPD_target_parallel_loop;
577
+ return getDirectiveAssociation (DKind) == Association::Loop;
602
578
}
603
579
604
580
bool clang::isOpenMPWorksharingDirective (OpenMPDirectiveKind DKind) {
@@ -619,44 +595,20 @@ bool clang::isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind) {
619
595
}
620
596
621
597
bool clang::isOpenMPTaskLoopDirective (OpenMPDirectiveKind DKind) {
622
- return DKind == OMPD_taskloop || DKind == OMPD_taskloop_simd ||
623
- DKind == OMPD_master_taskloop || DKind == OMPD_master_taskloop_simd ||
624
- DKind == OMPD_parallel_master_taskloop ||
625
- DKind == OMPD_masked_taskloop || DKind == OMPD_masked_taskloop_simd ||
626
- DKind == OMPD_parallel_masked_taskloop ||
627
- DKind == OMPD_parallel_masked_taskloop_simd ||
628
- DKind == OMPD_parallel_master_taskloop_simd;
598
+ return DKind == OMPD_taskloop ||
599
+ llvm::is_contained (getLeafConstructs (DKind), OMPD_taskloop);
629
600
}
630
601
631
602
bool clang::isOpenMPParallelDirective (OpenMPDirectiveKind DKind) {
632
- return DKind == OMPD_parallel || DKind == OMPD_parallel_for ||
633
- DKind == OMPD_parallel_for_simd || DKind == OMPD_parallel_sections ||
634
- DKind == OMPD_target_parallel || DKind == OMPD_target_parallel_for ||
635
- DKind == OMPD_distribute_parallel_for ||
636
- DKind == OMPD_distribute_parallel_for_simd ||
637
- DKind == OMPD_target_parallel_for_simd ||
638
- DKind == OMPD_teams_distribute_parallel_for ||
639
- DKind == OMPD_teams_distribute_parallel_for_simd ||
640
- DKind == OMPD_target_teams_distribute_parallel_for ||
641
- DKind == OMPD_target_teams_distribute_parallel_for_simd ||
642
- DKind == OMPD_parallel_master || DKind == OMPD_parallel_masked ||
643
- DKind == OMPD_parallel_master_taskloop ||
644
- DKind == OMPD_parallel_master_taskloop_simd ||
645
- DKind == OMPD_parallel_masked_taskloop ||
646
- DKind == OMPD_parallel_masked_taskloop_simd ||
647
- DKind == OMPD_parallel_loop || DKind == OMPD_target_parallel_loop ||
648
- DKind == OMPD_teams_loop;
603
+ if (DKind == OMPD_teams_loop)
604
+ return true ;
605
+ return DKind == OMPD_parallel ||
606
+ llvm::is_contained (getLeafConstructs (DKind), OMPD_parallel);
649
607
}
650
608
651
609
bool clang::isOpenMPTargetExecutionDirective (OpenMPDirectiveKind DKind) {
652
- return DKind == OMPD_target || DKind == OMPD_target_parallel ||
653
- DKind == OMPD_target_parallel_for ||
654
- DKind == OMPD_target_parallel_for_simd || DKind == OMPD_target_simd ||
655
- DKind == OMPD_target_teams || DKind == OMPD_target_teams_distribute ||
656
- DKind == OMPD_target_teams_distribute_parallel_for ||
657
- DKind == OMPD_target_teams_distribute_parallel_for_simd ||
658
- DKind == OMPD_target_teams_distribute_simd ||
659
- DKind == OMPD_target_teams_loop || DKind == OMPD_target_parallel_loop;
610
+ return DKind == OMPD_target ||
611
+ llvm::is_contained (getLeafConstructs (DKind), OMPD_target);
660
612
}
661
613
662
614
bool clang::isOpenMPTargetDataManagementDirective (OpenMPDirectiveKind DKind) {
@@ -665,60 +617,45 @@ bool clang::isOpenMPTargetDataManagementDirective(OpenMPDirectiveKind DKind) {
665
617
}
666
618
667
619
bool clang::isOpenMPNestingTeamsDirective (OpenMPDirectiveKind DKind) {
668
- return DKind == OMPD_teams || DKind == OMPD_teams_distribute ||
669
- DKind == OMPD_teams_distribute_simd ||
670
- DKind == OMPD_teams_distribute_parallel_for_simd ||
671
- DKind == OMPD_teams_distribute_parallel_for ||
672
- DKind == OMPD_teams_loop;
620
+ if (DKind == OMPD_teams)
621
+ return true ;
622
+ ArrayRef<Directive> Leaves = getLeafConstructs (DKind);
623
+ return !Leaves.empty () && Leaves.front () == OMPD_teams;
673
624
}
674
625
675
626
bool clang::isOpenMPTeamsDirective (OpenMPDirectiveKind DKind) {
676
- return isOpenMPNestingTeamsDirective (DKind) || DKind == OMPD_target_teams ||
677
- DKind == OMPD_target_teams_distribute ||
678
- DKind == OMPD_target_teams_distribute_parallel_for ||
679
- DKind == OMPD_target_teams_distribute_parallel_for_simd ||
680
- DKind == OMPD_target_teams_distribute_simd ||
681
- DKind == OMPD_target_teams_loop;
627
+ return DKind == OMPD_teams ||
628
+ llvm::is_contained (getLeafConstructs (DKind), OMPD_teams);
682
629
}
683
630
684
631
bool clang::isOpenMPSimdDirective (OpenMPDirectiveKind DKind) {
685
- return DKind == OMPD_simd || DKind == OMPD_for_simd ||
686
- DKind == OMPD_parallel_for_simd || DKind == OMPD_taskloop_simd ||
687
- DKind == OMPD_master_taskloop_simd ||
688
- DKind == OMPD_masked_taskloop_simd ||
689
- DKind == OMPD_parallel_master_taskloop_simd ||
690
- DKind == OMPD_parallel_masked_taskloop_simd ||
691
- DKind == OMPD_distribute_parallel_for_simd ||
692
- DKind == OMPD_distribute_simd || DKind == OMPD_target_simd ||
693
- DKind == OMPD_teams_distribute_simd ||
694
- DKind == OMPD_teams_distribute_parallel_for_simd ||
695
- DKind == OMPD_target_teams_distribute_parallel_for_simd ||
696
- DKind == OMPD_target_teams_distribute_simd ||
697
- DKind == OMPD_target_parallel_for_simd;
632
+ // Avoid OMPD_declare_simd
633
+ if (getDirectiveAssociation (DKind) != Association::Loop)
634
+ return false ;
635
+ // Formally, OMPD_end_do_simd also has a loop association, but
636
+ // it's a Fortran-specific directive.
637
+
638
+ return DKind == OMPD_simd ||
639
+ llvm::is_contained (getLeafConstructs (DKind), OMPD_simd);
698
640
}
699
641
700
642
bool clang::isOpenMPNestingDistributeDirective (OpenMPDirectiveKind Kind) {
701
- return Kind == OMPD_distribute || Kind == OMPD_distribute_parallel_for ||
702
- Kind == OMPD_distribute_parallel_for_simd ||
703
- Kind == OMPD_distribute_simd ;
704
- // TODO add next directives.
643
+ if ( Kind == OMPD_distribute)
644
+ return true ;
645
+ ArrayRef<Directive> Leaves = getLeafConstructs (Kind) ;
646
+ return !Leaves. empty () && Leaves. front () == OMPD_distribute;
705
647
}
706
648
707
649
bool clang::isOpenMPDistributeDirective (OpenMPDirectiveKind Kind) {
708
- return isOpenMPNestingDistributeDirective (Kind) ||
709
- Kind == OMPD_teams_distribute || Kind == OMPD_teams_distribute_simd ||
710
- Kind == OMPD_teams_distribute_parallel_for_simd ||
711
- Kind == OMPD_teams_distribute_parallel_for ||
712
- Kind == OMPD_target_teams_distribute ||
713
- Kind == OMPD_target_teams_distribute_parallel_for ||
714
- Kind == OMPD_target_teams_distribute_parallel_for_simd ||
715
- Kind == OMPD_target_teams_distribute_simd;
650
+ return Kind == OMPD_distribute ||
651
+ llvm::is_contained (getLeafConstructs (Kind), OMPD_distribute);
716
652
}
717
653
718
654
bool clang::isOpenMPGenericLoopDirective (OpenMPDirectiveKind Kind) {
719
- return Kind == OMPD_loop || Kind == OMPD_teams_loop ||
720
- Kind == OMPD_target_teams_loop || Kind == OMPD_parallel_loop ||
721
- Kind == OMPD_target_parallel_loop;
655
+ if (Kind == OMPD_loop)
656
+ return true ;
657
+ ArrayRef<Directive> Leaves = getLeafConstructs (Kind);
658
+ return !Leaves.empty () && Leaves.back () == OMPD_loop;
722
659
}
723
660
724
661
bool clang::isOpenMPPrivate (OpenMPClauseKind Kind) {
0 commit comments