Coverage Report

Created: 2020-09-19 12:23

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/AST/StmtOpenMP.h
Line
Count
Source (jump to first uncovered line)
1
//===- StmtOpenMP.h - Classes for OpenMP directives  ------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
/// \file
9
/// This file defines OpenMP AST classes for executable directives and
10
/// clauses.
11
///
12
//===----------------------------------------------------------------------===//
13
14
#ifndef LLVM_CLANG_AST_STMTOPENMP_H
15
#define LLVM_CLANG_AST_STMTOPENMP_H
16
17
#include "clang/AST/ASTContext.h"
18
#include "clang/AST/Expr.h"
19
#include "clang/AST/OpenMPClause.h"
20
#include "clang/AST/Stmt.h"
21
#include "clang/AST/StmtCXX.h"
22
#include "clang/Basic/OpenMPKinds.h"
23
#include "clang/Basic/SourceLocation.h"
24
25
namespace clang {
26
27
//===----------------------------------------------------------------------===//
28
// AST classes for directives.
29
//===----------------------------------------------------------------------===//
30
31
/// This is a basic class for representing single OpenMP executable
32
/// directive.
33
///
34
class OMPExecutableDirective : public Stmt {
35
  friend class ASTStmtReader;
36
  friend class ASTStmtWriter;
37
38
  /// Kind of the directive.
39
  OpenMPDirectiveKind Kind = llvm::omp::OMPD_unknown;
40
  /// Starting location of the directive (directive keyword).
41
  SourceLocation StartLoc;
42
  /// Ending location of the directive.
43
  SourceLocation EndLoc;
44
45
  /// Get the clauses storage.
46
0
  MutableArrayRef<OMPClause *> getClauses() {
47
0
    if (!Data)
48
0
      return llvm::None;
49
0
    return Data->getClauses();
50
0
  }
51
52
protected:
53
  /// Data, associated with the directive.
54
  OMPChildren *Data = nullptr;
55
56
  /// Build instance of directive of class \a K.
57
  ///
58
  /// \param SC Statement class.
59
  /// \param K Kind of OpenMP directive.
60
  /// \param StartLoc Starting location of the directive (directive keyword).
61
  /// \param EndLoc Ending location of the directive.
62
  ///
63
  OMPExecutableDirective(StmtClass SC, OpenMPDirectiveKind K,
64
                         SourceLocation StartLoc, SourceLocation EndLoc)
65
      : Stmt(SC), Kind(K), StartLoc(std::move(StartLoc)),
66
298k
        EndLoc(std::move(EndLoc)) {}
67
68
  template <typename T, typename... Params>
69
  static T *createDirective(const ASTContext &C, ArrayRef<OMPClause *> Clauses,
70
                            Stmt *AssociatedStmt, unsigned NumChildren,
71
280k
                            Params &&... P) {
72
280k
    void *Mem =
73
280k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
280k
                                                 NumChildren),
75
280k
                   alignof(T));
76
280k
77
280k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
280k
                                     AssociatedStmt, NumChildren);
79
280k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
280k
    Inst->Data = Data;
81
280k
    return Inst;
82
280k
  }
clang::OMPParallelDirective* clang::OMPExecutableDirective::createDirective<clang::OMPParallelDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
23.6k
                            Params &&... P) {
72
23.6k
    void *Mem =
73
23.6k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
23.6k
                                                 NumChildren),
75
23.6k
                   alignof(T));
76
23.6k
77
23.6k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
23.6k
                                     AssociatedStmt, NumChildren);
79
23.6k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
23.6k
    Inst->Data = Data;
81
23.6k
    return Inst;
82
23.6k
  }
clang::OMPSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
5.71k
                            Params &&... P) {
72
5.71k
    void *Mem =
73
5.71k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
5.71k
                                                 NumChildren),
75
5.71k
                   alignof(T));
76
5.71k
77
5.71k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
5.71k
                                     AssociatedStmt, NumChildren);
79
5.71k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
5.71k
    Inst->Data = Data;
81
5.71k
    return Inst;
82
5.71k
  }
clang::OMPForDirective* clang::OMPExecutableDirective::createDirective<clang::OMPForDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
6.35k
                            Params &&... P) {
72
6.35k
    void *Mem =
73
6.35k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
6.35k
                                                 NumChildren),
75
6.35k
                   alignof(T));
76
6.35k
77
6.35k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
6.35k
                                     AssociatedStmt, NumChildren);
79
6.35k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
6.35k
    Inst->Data = Data;
81
6.35k
    return Inst;
82
6.35k
  }
clang::OMPForSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPForSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
5.26k
                            Params &&... P) {
72
5.26k
    void *Mem =
73
5.26k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
5.26k
                                                 NumChildren),
75
5.26k
                   alignof(T));
76
5.26k
77
5.26k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
5.26k
                                     AssociatedStmt, NumChildren);
79
5.26k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
5.26k
    Inst->Data = Data;
81
5.26k
    return Inst;
82
5.26k
  }
clang::OMPSectionsDirective* clang::OMPExecutableDirective::createDirective<clang::OMPSectionsDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
3.48k
                            Params &&... P) {
72
3.48k
    void *Mem =
73
3.48k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
3.48k
                                                 NumChildren),
75
3.48k
                   alignof(T));
76
3.48k
77
3.48k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
3.48k
                                     AssociatedStmt, NumChildren);
79
3.48k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
3.48k
    Inst->Data = Data;
81
3.48k
    return Inst;
82
3.48k
  }
clang::OMPSectionDirective* clang::OMPExecutableDirective::createDirective<clang::OMPSectionDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
855
                            Params &&... P) {
72
855
    void *Mem =
73
855
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
855
                                                 NumChildren),
75
855
                   alignof(T));
76
855
77
855
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
855
                                     AssociatedStmt, NumChildren);
79
855
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
855
    Inst->Data = Data;
81
855
    return Inst;
82
855
  }
clang::OMPSingleDirective* clang::OMPExecutableDirective::createDirective<clang::OMPSingleDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
1.78k
                            Params &&... P) {
72
1.78k
    void *Mem =
73
1.78k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
1.78k
                                                 NumChildren),
75
1.78k
                   alignof(T));
76
1.78k
77
1.78k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
1.78k
                                     AssociatedStmt, NumChildren);
79
1.78k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
1.78k
    Inst->Data = Data;
81
1.78k
    return Inst;
82
1.78k
  }
clang::OMPMasterDirective* clang::OMPExecutableDirective::createDirective<clang::OMPMasterDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
1.07k
                            Params &&... P) {
72
1.07k
    void *Mem =
73
1.07k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
1.07k
                                                 NumChildren),
75
1.07k
                   alignof(T));
76
1.07k
77
1.07k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
1.07k
                                     AssociatedStmt, NumChildren);
79
1.07k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
1.07k
    Inst->Data = Data;
81
1.07k
    return Inst;
82
1.07k
  }
clang::OMPCriticalDirective* clang::OMPExecutableDirective::createDirective<clang::OMPCriticalDirective, clang::DeclarationNameInfo const&, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::DeclarationNameInfo const&, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
1.55k
                            Params &&... P) {
72
1.55k
    void *Mem =
73
1.55k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
1.55k
                                                 NumChildren),
75
1.55k
                   alignof(T));
76
1.55k
77
1.55k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
1.55k
                                     AssociatedStmt, NumChildren);
79
1.55k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
1.55k
    Inst->Data = Data;
81
1.55k
    return Inst;
82
1.55k
  }
clang::OMPParallelForDirective* clang::OMPExecutableDirective::createDirective<clang::OMPParallelForDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
4.40k
                            Params &&... P) {
72
4.40k
    void *Mem =
73
4.40k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
4.40k
                                                 NumChildren),
75
4.40k
                   alignof(T));
76
4.40k
77
4.40k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
4.40k
                                     AssociatedStmt, NumChildren);
79
4.40k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
4.40k
    Inst->Data = Data;
81
4.40k
    return Inst;
82
4.40k
  }
clang::OMPParallelForSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPParallelForSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
5.64k
                            Params &&... P) {
72
5.64k
    void *Mem =
73
5.64k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
5.64k
                                                 NumChildren),
75
5.64k
                   alignof(T));
76
5.64k
77
5.64k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
5.64k
                                     AssociatedStmt, NumChildren);
79
5.64k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
5.64k
    Inst->Data = Data;
81
5.64k
    return Inst;
82
5.64k
  }
clang::OMPParallelMasterDirective* clang::OMPExecutableDirective::createDirective<clang::OMPParallelMasterDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
2.83k
                            Params &&... P) {
72
2.83k
    void *Mem =
73
2.83k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
2.83k
                                                 NumChildren),
75
2.83k
                   alignof(T));
76
2.83k
77
2.83k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
2.83k
                                     AssociatedStmt, NumChildren);
79
2.83k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
2.83k
    Inst->Data = Data;
81
2.83k
    return Inst;
82
2.83k
  }
clang::OMPParallelSectionsDirective* clang::OMPExecutableDirective::createDirective<clang::OMPParallelSectionsDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
3.30k
                            Params &&... P) {
72
3.30k
    void *Mem =
73
3.30k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
3.30k
                                                 NumChildren),
75
3.30k
                   alignof(T));
76
3.30k
77
3.30k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
3.30k
                                     AssociatedStmt, NumChildren);
79
3.30k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
3.30k
    Inst->Data = Data;
81
3.30k
    return Inst;
82
3.30k
  }
clang::OMPTaskDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTaskDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
3.57k
                            Params &&... P) {
72
3.57k
    void *Mem =
73
3.57k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
3.57k
                                                 NumChildren),
75
3.57k
                   alignof(T));
76
3.57k
77
3.57k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
3.57k
                                     AssociatedStmt, NumChildren);
79
3.57k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
3.57k
    Inst->Data = Data;
81
3.57k
    return Inst;
82
3.57k
  }
clang::OMPTaskgroupDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTaskgroupDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
2.52k
                            Params &&... P) {
72
2.52k
    void *Mem =
73
2.52k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
2.52k
                                                 NumChildren),
75
2.52k
                   alignof(T));
76
2.52k
77
2.52k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
2.52k
                                     AssociatedStmt, NumChildren);
79
2.52k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
2.52k
    Inst->Data = Data;
81
2.52k
    return Inst;
82
2.52k
  }
clang::OMPCancelDirective* clang::OMPExecutableDirective::createDirective<clang::OMPCancelDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
624
                            Params &&... P) {
72
624
    void *Mem =
73
624
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
624
                                                 NumChildren),
75
624
                   alignof(T));
76
624
77
624
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
624
                                     AssociatedStmt, NumChildren);
79
624
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
624
    Inst->Data = Data;
81
624
    return Inst;
82
624
  }
clang::OMPFlushDirective* clang::OMPExecutableDirective::createDirective<clang::OMPFlushDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
917
                            Params &&... P) {
72
917
    void *Mem =
73
917
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
917
                                                 NumChildren),
75
917
                   alignof(T));
76
917
77
917
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
917
                                     AssociatedStmt, NumChildren);
79
917
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
917
    Inst->Data = Data;
81
917
    return Inst;
82
917
  }
clang::OMPDepobjDirective* clang::OMPExecutableDirective::createDirective<clang::OMPDepobjDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
238
                            Params &&... P) {
72
238
    void *Mem =
73
238
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
238
                                                 NumChildren),
75
238
                   alignof(T));
76
238
77
238
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
238
                                     AssociatedStmt, NumChildren);
79
238
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
238
    Inst->Data = Data;
81
238
    return Inst;
82
238
  }
clang::OMPScanDirective* clang::OMPExecutableDirective::createDirective<clang::OMPScanDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
98
                            Params &&... P) {
72
98
    void *Mem =
73
98
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
98
                                                 NumChildren),
75
98
                   alignof(T));
76
98
77
98
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
98
                                     AssociatedStmt, NumChildren);
79
98
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
98
    Inst->Data = Data;
81
98
    return Inst;
82
98
  }
clang::OMPOrderedDirective* clang::OMPExecutableDirective::createDirective<clang::OMPOrderedDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
1.18k
                            Params &&... P) {
72
1.18k
    void *Mem =
73
1.18k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
1.18k
                                                 NumChildren),
75
1.18k
                   alignof(T));
76
1.18k
77
1.18k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
1.18k
                                     AssociatedStmt, NumChildren);
79
1.18k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
1.18k
    Inst->Data = Data;
81
1.18k
    return Inst;
82
1.18k
  }
clang::OMPAtomicDirective* clang::OMPExecutableDirective::createDirective<clang::OMPAtomicDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
3.35k
                            Params &&... P) {
72
3.35k
    void *Mem =
73
3.35k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
3.35k
                                                 NumChildren),
75
3.35k
                   alignof(T));
76
3.35k
77
3.35k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
3.35k
                                     AssociatedStmt, NumChildren);
79
3.35k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
3.35k
    Inst->Data = Data;
81
3.35k
    return Inst;
82
3.35k
  }
clang::OMPTargetDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
49.2k
                            Params &&... P) {
72
49.2k
    void *Mem =
73
49.2k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
49.2k
                                                 NumChildren),
75
49.2k
                   alignof(T));
76
49.2k
77
49.2k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
49.2k
                                     AssociatedStmt, NumChildren);
79
49.2k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
49.2k
    Inst->Data = Data;
81
49.2k
    return Inst;
82
49.2k
  }
clang::OMPTargetParallelDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetParallelDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
7.39k
                            Params &&... P) {
72
7.39k
    void *Mem =
73
7.39k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
7.39k
                                                 NumChildren),
75
7.39k
                   alignof(T));
76
7.39k
77
7.39k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
7.39k
                                     AssociatedStmt, NumChildren);
79
7.39k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
7.39k
    Inst->Data = Data;
81
7.39k
    return Inst;
82
7.39k
  }
clang::OMPTargetParallelForDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetParallelForDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
7.39k
                            Params &&... P) {
72
7.39k
    void *Mem =
73
7.39k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
7.39k
                                                 NumChildren),
75
7.39k
                   alignof(T));
76
7.39k
77
7.39k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
7.39k
                                     AssociatedStmt, NumChildren);
79
7.39k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
7.39k
    Inst->Data = Data;
81
7.39k
    return Inst;
82
7.39k
  }
clang::OMPTargetDataDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetDataDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
3.89k
                            Params &&... P) {
72
3.89k
    void *Mem =
73
3.89k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
3.89k
                                                 NumChildren),
75
3.89k
                   alignof(T));
76
3.89k
77
3.89k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
3.89k
                                     AssociatedStmt, NumChildren);
79
3.89k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
3.89k
    Inst->Data = Data;
81
3.89k
    return Inst;
82
3.89k
  }
clang::OMPTargetEnterDataDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetEnterDataDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
1.70k
                            Params &&... P) {
72
1.70k
    void *Mem =
73
1.70k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
1.70k
                                                 NumChildren),
75
1.70k
                   alignof(T));
76
1.70k
77
1.70k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
1.70k
                                     AssociatedStmt, NumChildren);
79
1.70k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
1.70k
    Inst->Data = Data;
81
1.70k
    return Inst;
82
1.70k
  }
clang::OMPTargetExitDataDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetExitDataDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
1.71k
                            Params &&... P) {
72
1.71k
    void *Mem =
73
1.71k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
1.71k
                                                 NumChildren),
75
1.71k
                   alignof(T));
76
1.71k
77
1.71k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
1.71k
                                     AssociatedStmt, NumChildren);
79
1.71k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
1.71k
    Inst->Data = Data;
81
1.71k
    return Inst;
82
1.71k
  }
clang::OMPTeamsDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTeamsDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
18.0k
                            Params &&... P) {
72
18.0k
    void *Mem =
73
18.0k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
18.0k
                                                 NumChildren),
75
18.0k
                   alignof(T));
76
18.0k
77
18.0k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
18.0k
                                     AssociatedStmt, NumChildren);
79
18.0k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
18.0k
    Inst->Data = Data;
81
18.0k
    return Inst;
82
18.0k
  }
clang::OMPTaskLoopDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTaskLoopDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
4.47k
                            Params &&... P) {
72
4.47k
    void *Mem =
73
4.47k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
4.47k
                                                 NumChildren),
75
4.47k
                   alignof(T));
76
4.47k
77
4.47k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
4.47k
                                     AssociatedStmt, NumChildren);
79
4.47k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
4.47k
    Inst->Data = Data;
81
4.47k
    return Inst;
82
4.47k
  }
clang::OMPTaskLoopSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTaskLoopSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
4.30k
                            Params &&... P) {
72
4.30k
    void *Mem =
73
4.30k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
4.30k
                                                 NumChildren),
75
4.30k
                   alignof(T));
76
4.30k
77
4.30k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
4.30k
                                     AssociatedStmt, NumChildren);
79
4.30k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
4.30k
    Inst->Data = Data;
81
4.30k
    return Inst;
82
4.30k
  }
clang::OMPMasterTaskLoopDirective* clang::OMPExecutableDirective::createDirective<clang::OMPMasterTaskLoopDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
3.39k
                            Params &&... P) {
72
3.39k
    void *Mem =
73
3.39k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
3.39k
                                                 NumChildren),
75
3.39k
                   alignof(T));
76
3.39k
77
3.39k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
3.39k
                                     AssociatedStmt, NumChildren);
79
3.39k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
3.39k
    Inst->Data = Data;
81
3.39k
    return Inst;
82
3.39k
  }
clang::OMPMasterTaskLoopSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPMasterTaskLoopSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
4.28k
                            Params &&... P) {
72
4.28k
    void *Mem =
73
4.28k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
4.28k
                                                 NumChildren),
75
4.28k
                   alignof(T));
76
4.28k
77
4.28k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
4.28k
                                     AssociatedStmt, NumChildren);
79
4.28k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
4.28k
    Inst->Data = Data;
81
4.28k
    return Inst;
82
4.28k
  }
clang::OMPParallelMasterTaskLoopDirective* clang::OMPExecutableDirective::createDirective<clang::OMPParallelMasterTaskLoopDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
2.74k
                            Params &&... P) {
72
2.74k
    void *Mem =
73
2.74k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
2.74k
                                                 NumChildren),
75
2.74k
                   alignof(T));
76
2.74k
77
2.74k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
2.74k
                                     AssociatedStmt, NumChildren);
79
2.74k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
2.74k
    Inst->Data = Data;
81
2.74k
    return Inst;
82
2.74k
  }
clang::OMPParallelMasterTaskLoopSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPParallelMasterTaskLoopSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
3.64k
                            Params &&... P) {
72
3.64k
    void *Mem =
73
3.64k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
3.64k
                                                 NumChildren),
75
3.64k
                   alignof(T));
76
3.64k
77
3.64k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
3.64k
                                     AssociatedStmt, NumChildren);
79
3.64k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
3.64k
    Inst->Data = Data;
81
3.64k
    return Inst;
82
3.64k
  }
clang::OMPDistributeDirective* clang::OMPExecutableDirective::createDirective<clang::OMPDistributeDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
1.68k
                            Params &&... P) {
72
1.68k
    void *Mem =
73
1.68k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
1.68k
                                                 NumChildren),
75
1.68k
                   alignof(T));
76
1.68k
77
1.68k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
1.68k
                                     AssociatedStmt, NumChildren);
79
1.68k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
1.68k
    Inst->Data = Data;
81
1.68k
    return Inst;
82
1.68k
  }
clang::OMPTargetUpdateDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetUpdateDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
2.95k
                            Params &&... P) {
72
2.95k
    void *Mem =
73
2.95k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
2.95k
                                                 NumChildren),
75
2.95k
                   alignof(T));
76
2.95k
77
2.95k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
2.95k
                                     AssociatedStmt, NumChildren);
79
2.95k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
2.95k
    Inst->Data = Data;
81
2.95k
    return Inst;
82
2.95k
  }
clang::OMPDistributeParallelForDirective* clang::OMPExecutableDirective::createDirective<clang::OMPDistributeParallelForDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
4.67k
                            Params &&... P) {
72
4.67k
    void *Mem =
73
4.67k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
4.67k
                                                 NumChildren),
75
4.67k
                   alignof(T));
76
4.67k
77
4.67k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
4.67k
                                     AssociatedStmt, NumChildren);
79
4.67k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
4.67k
    Inst->Data = Data;
81
4.67k
    return Inst;
82
4.67k
  }
clang::OMPDistributeParallelForSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPDistributeParallelForSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
5.60k
                            Params &&... P) {
72
5.60k
    void *Mem =
73
5.60k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
5.60k
                                                 NumChildren),
75
5.60k
                   alignof(T));
76
5.60k
77
5.60k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
5.60k
                                     AssociatedStmt, NumChildren);
79
5.60k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
5.60k
    Inst->Data = Data;
81
5.60k
    return Inst;
82
5.60k
  }
clang::OMPDistributeSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPDistributeSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
4.38k
                            Params &&... P) {
72
4.38k
    void *Mem =
73
4.38k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
4.38k
                                                 NumChildren),
75
4.38k
                   alignof(T));
76
4.38k
77
4.38k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
4.38k
                                     AssociatedStmt, NumChildren);
79
4.38k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
4.38k
    Inst->Data = Data;
81
4.38k
    return Inst;
82
4.38k
  }
clang::OMPTargetParallelForSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetParallelForSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
7.53k
                            Params &&... P) {
72
7.53k
    void *Mem =
73
7.53k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
7.53k
                                                 NumChildren),
75
7.53k
                   alignof(T));
76
7.53k
77
7.53k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
7.53k
                                     AssociatedStmt, NumChildren);
79
7.53k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
7.53k
    Inst->Data = Data;
81
7.53k
    return Inst;
82
7.53k
  }
clang::OMPTargetSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
7.64k
                            Params &&... P) {
72
7.64k
    void *Mem =
73
7.64k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
7.64k
                                                 NumChildren),
75
7.64k
                   alignof(T));
76
7.64k
77
7.64k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
7.64k
                                     AssociatedStmt, NumChildren);
79
7.64k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
7.64k
    Inst->Data = Data;
81
7.64k
    return Inst;
82
7.64k
  }
clang::OMPTeamsDistributeDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTeamsDistributeDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
3.95k
                            Params &&... P) {
72
3.95k
    void *Mem =
73
3.95k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
3.95k
                                                 NumChildren),
75
3.95k
                   alignof(T));
76
3.95k
77
3.95k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
3.95k
                                     AssociatedStmt, NumChildren);
79
3.95k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
3.95k
    Inst->Data = Data;
81
3.95k
    return Inst;
82
3.95k
  }
clang::OMPTeamsDistributeSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTeamsDistributeSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
4.50k
                            Params &&... P) {
72
4.50k
    void *Mem =
73
4.50k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
4.50k
                                                 NumChildren),
75
4.50k
                   alignof(T));
76
4.50k
77
4.50k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
4.50k
                                     AssociatedStmt, NumChildren);
79
4.50k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
4.50k
    Inst->Data = Data;
81
4.50k
    return Inst;
82
4.50k
  }
clang::OMPTeamsDistributeParallelForSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTeamsDistributeParallelForSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
5.18k
                            Params &&... P) {
72
5.18k
    void *Mem =
73
5.18k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
5.18k
                                                 NumChildren),
75
5.18k
                   alignof(T));
76
5.18k
77
5.18k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
5.18k
                                     AssociatedStmt, NumChildren);
79
5.18k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
5.18k
    Inst->Data = Data;
81
5.18k
    return Inst;
82
5.18k
  }
clang::OMPTeamsDistributeParallelForDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTeamsDistributeParallelForDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
4.43k
                            Params &&... P) {
72
4.43k
    void *Mem =
73
4.43k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
4.43k
                                                 NumChildren),
75
4.43k
                   alignof(T));
76
4.43k
77
4.43k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
4.43k
                                     AssociatedStmt, NumChildren);
79
4.43k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
4.43k
    Inst->Data = Data;
81
4.43k
    return Inst;
82
4.43k
  }
clang::OMPTargetTeamsDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetTeamsDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
71
7.17k
                            Params &&... P) {
72
7.17k
    void *Mem =
73
7.17k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
7.17k
                                                 NumChildren),
75
7.17k
                   alignof(T));
76
7.17k
77
7.17k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
7.17k
                                     AssociatedStmt, NumChildren);
79
7.17k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
7.17k
    Inst->Data = Data;
81
7.17k
    return Inst;
82
7.17k
  }
clang::OMPTargetTeamsDistributeDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetTeamsDistributeDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
6.51k
                            Params &&... P) {
72
6.51k
    void *Mem =
73
6.51k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
6.51k
                                                 NumChildren),
75
6.51k
                   alignof(T));
76
6.51k
77
6.51k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
6.51k
                                     AssociatedStmt, NumChildren);
79
6.51k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
6.51k
    Inst->Data = Data;
81
6.51k
    return Inst;
82
6.51k
  }
clang::OMPTargetTeamsDistributeParallelForDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetTeamsDistributeParallelForDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
6.90k
                            Params &&... P) {
72
6.90k
    void *Mem =
73
6.90k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
6.90k
                                                 NumChildren),
75
6.90k
                   alignof(T));
76
6.90k
77
6.90k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
6.90k
                                     AssociatedStmt, NumChildren);
79
6.90k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
6.90k
    Inst->Data = Data;
81
6.90k
    return Inst;
82
6.90k
  }
clang::OMPTargetTeamsDistributeParallelForSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetTeamsDistributeParallelForSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
8.74k
                            Params &&... P) {
72
8.74k
    void *Mem =
73
8.74k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
8.74k
                                                 NumChildren),
75
8.74k
                   alignof(T));
76
8.74k
77
8.74k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
8.74k
                                     AssociatedStmt, NumChildren);
79
8.74k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
8.74k
    Inst->Data = Data;
81
8.74k
    return Inst;
82
8.74k
  }
clang::OMPTargetTeamsDistributeSimdDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTargetTeamsDistributeSimdDirective, clang::SourceLocation&, clang::SourceLocation&, unsigned int&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&, unsigned int&)
Line
Count
Source
71
8.30k
                            Params &&... P) {
72
8.30k
    void *Mem =
73
8.30k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
74
8.30k
                                                 NumChildren),
75
8.30k
                   alignof(T));
76
8.30k
77
8.30k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
78
8.30k
                                     AssociatedStmt, NumChildren);
79
8.30k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
80
8.30k
    Inst->Data = Data;
81
8.30k
    return Inst;
82
8.30k
  }
83
84
  template <typename T, typename... Params>
85
  static T *createEmptyDirective(const ASTContext &C, unsigned NumClauses,
86
                                 bool HasAssociatedStmt, unsigned NumChildren,
87
6.06k
                                 Params &&... P) {
88
6.06k
    void *Mem =
89
6.06k
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
6.06k
                                                 NumChildren),
91
6.06k
                   alignof(T));
92
6.06k
    auto *Data =
93
6.06k
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
6.06k
                                 HasAssociatedStmt, NumChildren);
95
6.06k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
6.06k
    Inst->Data = Data;
97
6.06k
    return Inst;
98
6.06k
  }
clang::OMPSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
159
                                 Params &&... P) {
88
159
    void *Mem =
89
159
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
159
                                                 NumChildren),
91
159
                   alignof(T));
92
159
    auto *Data =
93
159
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
159
                                 HasAssociatedStmt, NumChildren);
95
159
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
159
    Inst->Data = Data;
97
159
    return Inst;
98
159
  }
clang::OMPForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
301
                                 Params &&... P) {
88
301
    void *Mem =
89
301
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
301
                                                 NumChildren),
91
301
                   alignof(T));
92
301
    auto *Data =
93
301
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
301
                                 HasAssociatedStmt, NumChildren);
95
301
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
301
    Inst->Data = Data;
97
301
    return Inst;
98
301
  }
clang::OMPForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
109
                                 Params &&... P) {
88
109
    void *Mem =
89
109
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
109
                                                 NumChildren),
91
109
                   alignof(T));
92
109
    auto *Data =
93
109
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
109
                                 HasAssociatedStmt, NumChildren);
95
109
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
109
    Inst->Data = Data;
97
109
    return Inst;
98
109
  }
clang::OMPParallelForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
93
                                 Params &&... P) {
88
93
    void *Mem =
89
93
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
93
                                                 NumChildren),
91
93
                   alignof(T));
92
93
    auto *Data =
93
93
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
93
                                 HasAssociatedStmt, NumChildren);
95
93
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
93
    Inst->Data = Data;
97
93
    return Inst;
98
93
  }
clang::OMPParallelForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
112
                                 Params &&... P) {
88
112
    void *Mem =
89
112
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
112
                                                 NumChildren),
91
112
                   alignof(T));
92
112
    auto *Data =
93
112
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
112
                                 HasAssociatedStmt, NumChildren);
95
112
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
112
    Inst->Data = Data;
97
112
    return Inst;
98
112
  }
clang::OMPTargetParallelForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetParallelForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
437
                                 Params &&... P) {
88
437
    void *Mem =
89
437
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
437
                                                 NumChildren),
91
437
                   alignof(T));
92
437
    auto *Data =
93
437
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
437
                                 HasAssociatedStmt, NumChildren);
95
437
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
437
    Inst->Data = Data;
97
437
    return Inst;
98
437
  }
clang::OMPTaskLoopDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTaskLoopDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
34
                                 Params &&... P) {
88
34
    void *Mem =
89
34
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
34
                                                 NumChildren),
91
34
                   alignof(T));
92
34
    auto *Data =
93
34
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
34
                                 HasAssociatedStmt, NumChildren);
95
34
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
34
    Inst->Data = Data;
97
34
    return Inst;
98
34
  }
clang::OMPTaskLoopSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTaskLoopSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
46
                                 Params &&... P) {
88
46
    void *Mem =
89
46
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
46
                                                 NumChildren),
91
46
                   alignof(T));
92
46
    auto *Data =
93
46
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
46
                                 HasAssociatedStmt, NumChildren);
95
46
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
46
    Inst->Data = Data;
97
46
    return Inst;
98
46
  }
clang::OMPMasterTaskLoopDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPMasterTaskLoopDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
32
                                 Params &&... P) {
88
32
    void *Mem =
89
32
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
32
                                                 NumChildren),
91
32
                   alignof(T));
92
32
    auto *Data =
93
32
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
32
                                 HasAssociatedStmt, NumChildren);
95
32
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
32
    Inst->Data = Data;
97
32
    return Inst;
98
32
  }
clang::OMPMasterTaskLoopSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPMasterTaskLoopSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
46
                                 Params &&... P) {
88
46
    void *Mem =
89
46
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
46
                                                 NumChildren),
91
46
                   alignof(T));
92
46
    auto *Data =
93
46
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
46
                                 HasAssociatedStmt, NumChildren);
95
46
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
46
    Inst->Data = Data;
97
46
    return Inst;
98
46
  }
clang::OMPParallelMasterTaskLoopDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelMasterTaskLoopDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
30
                                 Params &&... P) {
88
30
    void *Mem =
89
30
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
30
                                                 NumChildren),
91
30
                   alignof(T));
92
30
    auto *Data =
93
30
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
30
                                 HasAssociatedStmt, NumChildren);
95
30
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
30
    Inst->Data = Data;
97
30
    return Inst;
98
30
  }
clang::OMPParallelMasterTaskLoopSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelMasterTaskLoopSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
44
                                 Params &&... P) {
88
44
    void *Mem =
89
44
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
44
                                                 NumChildren),
91
44
                   alignof(T));
92
44
    auto *Data =
93
44
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
44
                                 HasAssociatedStmt, NumChildren);
95
44
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
44
    Inst->Data = Data;
97
44
    return Inst;
98
44
  }
clang::OMPDistributeDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPDistributeDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
140
                                 Params &&... P) {
88
140
    void *Mem =
89
140
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
140
                                                 NumChildren),
91
140
                   alignof(T));
92
140
    auto *Data =
93
140
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
140
                                 HasAssociatedStmt, NumChildren);
95
140
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
140
    Inst->Data = Data;
97
140
    return Inst;
98
140
  }
clang::OMPDistributeParallelForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPDistributeParallelForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
232
                                 Params &&... P) {
88
232
    void *Mem =
89
232
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
232
                                                 NumChildren),
91
232
                   alignof(T));
92
232
    auto *Data =
93
232
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
232
                                 HasAssociatedStmt, NumChildren);
95
232
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
232
    Inst->Data = Data;
97
232
    return Inst;
98
232
  }
clang::OMPDistributeParallelForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPDistributeParallelForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
210
                                 Params &&... P) {
88
210
    void *Mem =
89
210
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
210
                                                 NumChildren),
91
210
                   alignof(T));
92
210
    auto *Data =
93
210
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
210
                                 HasAssociatedStmt, NumChildren);
95
210
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
210
    Inst->Data = Data;
97
210
    return Inst;
98
210
  }
clang::OMPDistributeSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPDistributeSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
166
                                 Params &&... P) {
88
166
    void *Mem =
89
166
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
166
                                                 NumChildren),
91
166
                   alignof(T));
92
166
    auto *Data =
93
166
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
166
                                 HasAssociatedStmt, NumChildren);
95
166
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
166
    Inst->Data = Data;
97
166
    return Inst;
98
166
  }
clang::OMPTargetParallelForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetParallelForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
523
                                 Params &&... P) {
88
523
    void *Mem =
89
523
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
523
                                                 NumChildren),
91
523
                   alignof(T));
92
523
    auto *Data =
93
523
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
523
                                 HasAssociatedStmt, NumChildren);
95
523
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
523
    Inst->Data = Data;
97
523
    return Inst;
98
523
  }
clang::OMPTargetSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
481
                                 Params &&... P) {
88
481
    void *Mem =
89
481
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
481
                                                 NumChildren),
91
481
                   alignof(T));
92
481
    auto *Data =
93
481
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
481
                                 HasAssociatedStmt, NumChildren);
95
481
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
481
    Inst->Data = Data;
97
481
    return Inst;
98
481
  }
clang::OMPTeamsDistributeDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTeamsDistributeDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
142
                                 Params &&... P) {
88
142
    void *Mem =
89
142
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
142
                                                 NumChildren),
91
142
                   alignof(T));
92
142
    auto *Data =
93
142
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
142
                                 HasAssociatedStmt, NumChildren);
95
142
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
142
    Inst->Data = Data;
97
142
    return Inst;
98
142
  }
clang::OMPTeamsDistributeSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTeamsDistributeSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
206
                                 Params &&... P) {
88
206
    void *Mem =
89
206
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
206
                                                 NumChildren),
91
206
                   alignof(T));
92
206
    auto *Data =
93
206
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
206
                                 HasAssociatedStmt, NumChildren);
95
206
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
206
    Inst->Data = Data;
97
206
    return Inst;
98
206
  }
clang::OMPTeamsDistributeParallelForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTeamsDistributeParallelForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
338
                                 Params &&... P) {
88
338
    void *Mem =
89
338
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
338
                                                 NumChildren),
91
338
                   alignof(T));
92
338
    auto *Data =
93
338
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
338
                                 HasAssociatedStmt, NumChildren);
95
338
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
338
    Inst->Data = Data;
97
338
    return Inst;
98
338
  }
clang::OMPTeamsDistributeParallelForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTeamsDistributeParallelForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
302
                                 Params &&... P) {
88
302
    void *Mem =
89
302
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
302
                                                 NumChildren),
91
302
                   alignof(T));
92
302
    auto *Data =
93
302
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
302
                                 HasAssociatedStmt, NumChildren);
95
302
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
302
    Inst->Data = Data;
97
302
    return Inst;
98
302
  }
clang::OMPTargetTeamsDistributeDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetTeamsDistributeDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
447
                                 Params &&... P) {
88
447
    void *Mem =
89
447
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
447
                                                 NumChildren),
91
447
                   alignof(T));
92
447
    auto *Data =
93
447
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
447
                                 HasAssociatedStmt, NumChildren);
95
447
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
447
    Inst->Data = Data;
97
447
    return Inst;
98
447
  }
clang::OMPTargetTeamsDistributeParallelForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetTeamsDistributeParallelForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
357
                                 Params &&... P) {
88
357
    void *Mem =
89
357
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
357
                                                 NumChildren),
91
357
                   alignof(T));
92
357
    auto *Data =
93
357
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
357
                                 HasAssociatedStmt, NumChildren);
95
357
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
357
    Inst->Data = Data;
97
357
    return Inst;
98
357
  }
clang::OMPTargetTeamsDistributeParallelForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetTeamsDistributeParallelForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
533
                                 Params &&... P) {
88
533
    void *Mem =
89
533
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
533
                                                 NumChildren),
91
533
                   alignof(T));
92
533
    auto *Data =
93
533
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
533
                                 HasAssociatedStmt, NumChildren);
95
533
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
533
    Inst->Data = Data;
97
533
    return Inst;
98
533
  }
clang::OMPTargetTeamsDistributeSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetTeamsDistributeSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
87
547
                                 Params &&... P) {
88
547
    void *Mem =
89
547
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
90
547
                                                 NumChildren),
91
547
                   alignof(T));
92
547
    auto *Data =
93
547
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
94
547
                                 HasAssociatedStmt, NumChildren);
95
547
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
96
547
    Inst->Data = Data;
97
547
    return Inst;
98
547
  }
99
100
  template <typename T>
101
  static T *createEmptyDirective(const ASTContext &C, unsigned NumClauses,
102
                                 bool HasAssociatedStmt = false,
103
9.66k
                                 unsigned NumChildren = 0) {
104
9.66k
    void *Mem =
105
9.66k
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
9.66k
                                                 NumChildren),
107
9.66k
                   alignof(T));
108
9.66k
    auto *Data =
109
9.66k
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
9.66k
                                 HasAssociatedStmt, NumChildren);
111
9.66k
    auto *Inst = new (Mem) T;
112
9.66k
    Inst->Data = Data;
113
9.66k
    return Inst;
114
9.66k
  }
clang::OMPParallelDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
649
                                 unsigned NumChildren = 0) {
104
649
    void *Mem =
105
649
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
649
                                                 NumChildren),
107
649
                   alignof(T));
108
649
    auto *Data =
109
649
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
649
                                 HasAssociatedStmt, NumChildren);
111
649
    auto *Inst = new (Mem) T;
112
649
    Inst->Data = Data;
113
649
    return Inst;
114
649
  }
clang::OMPSectionsDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPSectionsDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
58
                                 unsigned NumChildren = 0) {
104
58
    void *Mem =
105
58
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
58
                                                 NumChildren),
107
58
                   alignof(T));
108
58
    auto *Data =
109
58
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
58
                                 HasAssociatedStmt, NumChildren);
111
58
    auto *Inst = new (Mem) T;
112
58
    Inst->Data = Data;
113
58
    return Inst;
114
58
  }
clang::OMPSectionDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPSectionDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
50
                                 unsigned NumChildren = 0) {
104
50
    void *Mem =
105
50
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
50
                                                 NumChildren),
107
50
                   alignof(T));
108
50
    auto *Data =
109
50
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
50
                                 HasAssociatedStmt, NumChildren);
111
50
    auto *Inst = new (Mem) T;
112
50
    Inst->Data = Data;
113
50
    return Inst;
114
50
  }
clang::OMPSingleDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPSingleDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
44
                                 unsigned NumChildren = 0) {
104
44
    void *Mem =
105
44
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
44
                                                 NumChildren),
107
44
                   alignof(T));
108
44
    auto *Data =
109
44
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
44
                                 HasAssociatedStmt, NumChildren);
111
44
    auto *Inst = new (Mem) T;
112
44
    Inst->Data = Data;
113
44
    return Inst;
114
44
  }
clang::OMPMasterDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPMasterDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
11
                                 unsigned NumChildren = 0) {
104
11
    void *Mem =
105
11
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
11
                                                 NumChildren),
107
11
                   alignof(T));
108
11
    auto *Data =
109
11
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
11
                                 HasAssociatedStmt, NumChildren);
111
11
    auto *Inst = new (Mem) T;
112
11
    Inst->Data = Data;
113
11
    return Inst;
114
11
  }
clang::OMPCriticalDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPCriticalDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
43
                                 unsigned NumChildren = 0) {
104
43
    void *Mem =
105
43
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
43
                                                 NumChildren),
107
43
                   alignof(T));
108
43
    auto *Data =
109
43
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
43
                                 HasAssociatedStmt, NumChildren);
111
43
    auto *Inst = new (Mem) T;
112
43
    Inst->Data = Data;
113
43
    return Inst;
114
43
  }
clang::OMPParallelMasterDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelMasterDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
74
                                 unsigned NumChildren = 0) {
104
74
    void *Mem =
105
74
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
74
                                                 NumChildren),
107
74
                   alignof(T));
108
74
    auto *Data =
109
74
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
74
                                 HasAssociatedStmt, NumChildren);
111
74
    auto *Inst = new (Mem) T;
112
74
    Inst->Data = Data;
113
74
    return Inst;
114
74
  }
clang::OMPParallelSectionsDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelSectionsDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
32
                                 unsigned NumChildren = 0) {
104
32
    void *Mem =
105
32
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
32
                                                 NumChildren),
107
32
                   alignof(T));
108
32
    auto *Data =
109
32
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
32
                                 HasAssociatedStmt, NumChildren);
111
32
    auto *Inst = new (Mem) T;
112
32
    Inst->Data = Data;
113
32
    return Inst;
114
32
  }
clang::OMPTaskDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTaskDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
180
                                 unsigned NumChildren = 0) {
104
180
    void *Mem =
105
180
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
180
                                                 NumChildren),
107
180
                   alignof(T));
108
180
    auto *Data =
109
180
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
180
                                 HasAssociatedStmt, NumChildren);
111
180
    auto *Inst = new (Mem) T;
112
180
    Inst->Data = Data;
113
180
    return Inst;
114
180
  }
clang::OMPTaskgroupDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTaskgroupDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
88
                                 unsigned NumChildren = 0) {
104
88
    void *Mem =
105
88
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
88
                                                 NumChildren),
107
88
                   alignof(T));
108
88
    auto *Data =
109
88
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
88
                                 HasAssociatedStmt, NumChildren);
111
88
    auto *Inst = new (Mem) T;
112
88
    Inst->Data = Data;
113
88
    return Inst;
114
88
  }
clang::OMPCancelDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPCancelDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
162
                                 unsigned NumChildren = 0) {
104
162
    void *Mem =
105
162
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
162
                                                 NumChildren),
107
162
                   alignof(T));
108
162
    auto *Data =
109
162
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
162
                                 HasAssociatedStmt, NumChildren);
111
162
    auto *Inst = new (Mem) T;
112
162
    Inst->Data = Data;
113
162
    return Inst;
114
162
  }
clang::OMPFlushDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPFlushDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
50
                                 unsigned NumChildren = 0) {
104
50
    void *Mem =
105
50
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
50
                                                 NumChildren),
107
50
                   alignof(T));
108
50
    auto *Data =
109
50
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
50
                                 HasAssociatedStmt, NumChildren);
111
50
    auto *Inst = new (Mem) T;
112
50
    Inst->Data = Data;
113
50
    return Inst;
114
50
  }
clang::OMPDepobjDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPDepobjDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
28
                                 unsigned NumChildren = 0) {
104
28
    void *Mem =
105
28
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
28
                                                 NumChildren),
107
28
                   alignof(T));
108
28
    auto *Data =
109
28
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
28
                                 HasAssociatedStmt, NumChildren);
111
28
    auto *Inst = new (Mem) T;
112
28
    Inst->Data = Data;
113
28
    return Inst;
114
28
  }
clang::OMPScanDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPScanDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
24
                                 unsigned NumChildren = 0) {
104
24
    void *Mem =
105
24
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
24
                                                 NumChildren),
107
24
                   alignof(T));
108
24
    auto *Data =
109
24
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
24
                                 HasAssociatedStmt, NumChildren);
111
24
    auto *Inst = new (Mem) T;
112
24
    Inst->Data = Data;
113
24
    return Inst;
114
24
  }
clang::OMPOrderedDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPOrderedDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
62
                                 unsigned NumChildren = 0) {
104
62
    void *Mem =
105
62
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
62
                                                 NumChildren),
107
62
                   alignof(T));
108
62
    auto *Data =
109
62
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
62
                                 HasAssociatedStmt, NumChildren);
111
62
    auto *Inst = new (Mem) T;
112
62
    Inst->Data = Data;
113
62
    return Inst;
114
62
  }
clang::OMPAtomicDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPAtomicDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
584
                                 unsigned NumChildren = 0) {
104
584
    void *Mem =
105
584
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
584
                                                 NumChildren),
107
584
                   alignof(T));
108
584
    auto *Data =
109
584
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
584
                                 HasAssociatedStmt, NumChildren);
111
584
    auto *Inst = new (Mem) T;
112
584
    Inst->Data = Data;
113
584
    return Inst;
114
584
  }
clang::OMPTargetDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
4.32k
                                 unsigned NumChildren = 0) {
104
4.32k
    void *Mem =
105
4.32k
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
4.32k
                                                 NumChildren),
107
4.32k
                   alignof(T));
108
4.32k
    auto *Data =
109
4.32k
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
4.32k
                                 HasAssociatedStmt, NumChildren);
111
4.32k
    auto *Inst = new (Mem) T;
112
4.32k
    Inst->Data = Data;
113
4.32k
    return Inst;
114
4.32k
  }
clang::OMPTargetParallelDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetParallelDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
623
                                 unsigned NumChildren = 0) {
104
623
    void *Mem =
105
623
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
623
                                                 NumChildren),
107
623
                   alignof(T));
108
623
    auto *Data =
109
623
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
623
                                 HasAssociatedStmt, NumChildren);
111
623
    auto *Inst = new (Mem) T;
112
623
    Inst->Data = Data;
113
623
    return Inst;
114
623
  }
clang::OMPTargetDataDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetDataDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
238
                                 unsigned NumChildren = 0) {
104
238
    void *Mem =
105
238
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
238
                                                 NumChildren),
107
238
                   alignof(T));
108
238
    auto *Data =
109
238
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
238
                                 HasAssociatedStmt, NumChildren);
111
238
    auto *Inst = new (Mem) T;
112
238
    Inst->Data = Data;
113
238
    return Inst;
114
238
  }
clang::OMPTargetEnterDataDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetEnterDataDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
277
                                 unsigned NumChildren = 0) {
104
277
    void *Mem =
105
277
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
277
                                                 NumChildren),
107
277
                   alignof(T));
108
277
    auto *Data =
109
277
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
277
                                 HasAssociatedStmt, NumChildren);
111
277
    auto *Inst = new (Mem) T;
112
277
    Inst->Data = Data;
113
277
    return Inst;
114
277
  }
clang::OMPTargetExitDataDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetExitDataDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
277
                                 unsigned NumChildren = 0) {
104
277
    void *Mem =
105
277
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
277
                                                 NumChildren),
107
277
                   alignof(T));
108
277
    auto *Data =
109
277
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
277
                                 HasAssociatedStmt, NumChildren);
111
277
    auto *Inst = new (Mem) T;
112
277
    Inst->Data = Data;
113
277
    return Inst;
114
277
  }
clang::OMPTeamsDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTeamsDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
856
                                 unsigned NumChildren = 0) {
104
856
    void *Mem =
105
856
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
856
                                                 NumChildren),
107
856
                   alignof(T));
108
856
    auto *Data =
109
856
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
856
                                 HasAssociatedStmt, NumChildren);
111
856
    auto *Inst = new (Mem) T;
112
856
    Inst->Data = Data;
113
856
    return Inst;
114
856
  }
clang::OMPTargetUpdateDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetUpdateDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
260
                                 unsigned NumChildren = 0) {
104
260
    void *Mem =
105
260
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
260
                                                 NumChildren),
107
260
                   alignof(T));
108
260
    auto *Data =
109
260
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
260
                                 HasAssociatedStmt, NumChildren);
111
260
    auto *Inst = new (Mem) T;
112
260
    Inst->Data = Data;
113
260
    return Inst;
114
260
  }
clang::OMPTargetTeamsDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetTeamsDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
103
667
                                 unsigned NumChildren = 0) {
104
667
    void *Mem =
105
667
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
106
667
                                                 NumChildren),
107
667
                   alignof(T));
108
667
    auto *Data =
109
667
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
110
667
                                 HasAssociatedStmt, NumChildren);
111
667
    auto *Inst = new (Mem) T;
112
667
    Inst->Data = Data;
113
667
    return Inst;
114
667
  }
115
116
public:
117
  /// Iterates over expressions/statements used in the construct.
118
  class used_clauses_child_iterator
119
      : public llvm::iterator_adaptor_base<
120
            used_clauses_child_iterator, ArrayRef<OMPClause *>::iterator,
121
            std::forward_iterator_tag, Stmt *, ptrdiff_t, Stmt *, Stmt *> {
122
    ArrayRef<OMPClause *>::iterator End;
123
    OMPClause::child_iterator ChildI, ChildEnd;
124
125
67.6k
    void MoveToNext() {
126
67.6k
      if (ChildI != ChildEnd)
127
26.4k
        return;
128
54.8k
      
while (41.2k
this->I != End) {
129
18.9k
        ++this->I;
130
18.9k
        if (this->I != End) {
131
10.6k
          ChildI = (*this->I)->used_children().begin();
132
10.6k
          ChildEnd = (*this->I)->used_children().end();
133
10.6k
          if (ChildI != ChildEnd)
134
5.35k
            return;
135
10.6k
        }
136
18.9k
      }
137
41.2k
    }
138
139
  public:
140
    explicit used_clauses_child_iterator(ArrayRef<OMPClause *> Clauses)
141
        : used_clauses_child_iterator::iterator_adaptor_base(Clauses.begin()),
142
51.0k
          End(Clauses.end()) {
143
51.0k
      if (this->I != End) {
144
22.2k
        ChildI = (*this->I)->used_children().begin();
145
22.2k
        ChildEnd = (*this->I)->used_children().end();
146
22.2k
        MoveToNext();
147
22.2k
      }
148
51.0k
    }
149
32.0k
    Stmt *operator*() const { return *ChildI; }
150
0
    Stmt *operator->() const { return **this; }
151
152
61.0k
    used_clauses_child_iterator &operator++() {
153
61.0k
      ++ChildI;
154
61.0k
      if (ChildI != ChildEnd)
155
15.5k
        return *this;
156
45.4k
      if (this->I != End) {
157
45.4k
        ++this->I;
158
45.4k
        if (this->I != End) {
159
17.8k
          ChildI = (*this->I)->used_children().begin();
160
17.8k
          ChildEnd = (*this->I)->used_children().end();
161
17.8k
        }
162
45.4k
      }
163
45.4k
      MoveToNext();
164
45.4k
      return *this;
165
45.4k
    }
166
  };
167
168
  static llvm::iterator_range<used_clauses_child_iterator>
169
25.5k
  used_clauses_children(ArrayRef<OMPClause *> Clauses) {
170
25.5k
    return {used_clauses_child_iterator(Clauses),
171
25.5k
            used_clauses_child_iterator(llvm::makeArrayRef(Clauses.end(), 0))};
172
25.5k
  }
173
174
  /// Iterates over a filtered subrange of clauses applied to a
175
  /// directive.
176
  ///
177
  /// This iterator visits only clauses of type SpecificClause.
178
  template <typename SpecificClause>
179
  class specific_clause_iterator
180
      : public llvm::iterator_adaptor_base<
181
            specific_clause_iterator<SpecificClause>,
182
            ArrayRef<OMPClause *>::const_iterator, std::forward_iterator_tag,
183
            const SpecificClause *, ptrdiff_t, const SpecificClause *,
184
            const SpecificClause *> {
185
    ArrayRef<OMPClause *>::const_iterator End;
186
187
1.66M
    void SkipToNextClause() {
188
2.60M
      while (this->I != End && 
!isa<SpecificClause>(*this->I)1.00M
)
189
935k
        ++this->I;
190
1.66M
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause>::SkipToNextClause()
Line
Count
Source
187
35.6k
    void SkipToNextClause() {
188
60.0k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)25.2k
)
189
24.4k
        ++this->I;
190
35.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCollapseClause>::SkipToNextClause()
Line
Count
Source
187
290k
    void SkipToNextClause() {
188
392k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)107k
)
189
102k
        ++this->I;
190
290k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause>::SkipToNextClause()
Line
Count
Source
187
156k
    void SkipToNextClause() {
188
234k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)78.7k
)
189
77.6k
        ++this->I;
190
156k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPHintClause>::SkipToNextClause()
Line
Count
Source
187
123
    void SkipToNextClause() {
188
123
      while (this->I != End && 
!isa<SpecificClause>(*this->I)7
)
189
0
        ++this->I;
190
123
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause>::SkipToNextClause()
Line
Count
Source
187
2.83k
    void SkipToNextClause() {
188
6.46k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)3.63k
)
189
3.63k
        ++this->I;
190
2.83k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause>::SkipToNextClause()
Line
Count
Source
187
21.1k
    void SkipToNextClause() {
188
35.7k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)15.1k
)
189
14.6k
        ++this->I;
190
21.1k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDeviceClause>::SkipToNextClause()
Line
Count
Source
187
18.5k
    void SkipToNextClause() {
188
31.8k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)13.6k
)
189
13.2k
        ++this->I;
190
18.5k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause>::SkipToNextClause()
Line
Count
Source
187
1.45k
    void SkipToNextClause() {
188
3.26k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)1.83k
)
189
1.81k
        ++this->I;
190
1.45k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause>::SkipToNextClause()
Line
Count
Source
187
37.6k
    void SkipToNextClause() {
188
64.8k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)27.2k
)
189
27.2k
        ++this->I;
190
37.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause>::SkipToNextClause()
Line
Count
Source
187
133k
    void SkipToNextClause() {
188
185k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)73.4k
)
189
51.4k
        ++this->I;
190
133k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause>::SkipToNextClause()
Line
Count
Source
187
16.8k
    void SkipToNextClause() {
188
28.6k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)11.8k
)
189
11.8k
        ++this->I;
190
16.8k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause>::SkipToNextClause()
Line
Count
Source
187
50.2k
    void SkipToNextClause() {
188
72.2k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)32.9k
)
189
22.0k
        ++this->I;
190
50.2k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPToClause>::SkipToNextClause()
Line
Count
Source
187
16.8k
    void SkipToNextClause() {
188
28.6k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)11.8k
)
189
11.8k
        ++this->I;
190
16.8k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFromClause>::SkipToNextClause()
Line
Count
Source
187
16.8k
    void SkipToNextClause() {
188
28.6k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)11.8k
)
189
11.7k
        ++this->I;
190
16.8k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause>::SkipToNextClause()
Line
Count
Source
187
17.0k
    void SkipToNextClause() {
188
28.9k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)12.0k
)
189
11.8k
        ++this->I;
190
17.0k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause>::SkipToNextClause()
Line
Count
Source
187
16.9k
    void SkipToNextClause() {
188
28.9k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)12.0k
)
189
12.0k
        ++this->I;
190
16.9k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause>::SkipToNextClause()
Line
Count
Source
187
19.0k
    void SkipToNextClause() {
188
30.4k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)12.2k
)
189
11.3k
        ++this->I;
190
19.0k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause>::SkipToNextClause()
Line
Count
Source
187
18.6k
    void SkipToNextClause() {
188
30.4k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)12.4k
)
189
11.8k
        ++this->I;
190
18.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause>::SkipToNextClause()
Line
Count
Source
187
55.8k
    void SkipToNextClause() {
188
86.9k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)35.9k
)
189
31.1k
        ++this->I;
190
55.8k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause>::SkipToNextClause()
Line
Count
Source
187
17.5k
    void SkipToNextClause() {
188
28.5k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)11.5k
)
189
11.0k
        ++this->I;
190
17.5k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause>::SkipToNextClause()
Line
Count
Source
187
25.8k
    void SkipToNextClause() {
188
44.7k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)19.2k
)
189
18.9k
        ++this->I;
190
25.8k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause>::SkipToNextClause()
Line
Count
Source
187
131k
    void SkipToNextClause() {
188
216k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)87.1k
)
189
84.6k
        ++this->I;
190
131k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause>::SkipToNextClause()
Line
Count
Source
187
136k
    void SkipToNextClause() {
188
222k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)89.4k
)
189
86.2k
        ++this->I;
190
136k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause>::SkipToNextClause()
Line
Count
Source
187
186k
    void SkipToNextClause() {
188
307k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)125k
)
189
120k
        ++this->I;
190
186k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause>::SkipToNextClause()
Line
Count
Source
187
119k
    void SkipToNextClause() {
188
198k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)81.7k
)
189
79.2k
        ++this->I;
190
119k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSimdlenClause>::SkipToNextClause()
Line
Count
Source
187
16.8k
    void SkipToNextClause() {
188
29.1k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)12.6k
)
189
12.3k
        ++this->I;
190
16.8k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSafelenClause>::SkipToNextClause()
Line
Count
Source
187
16.5k
    void SkipToNextClause() {
188
28.5k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)12.1k
)
189
11.9k
        ++this->I;
190
16.5k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause>::SkipToNextClause()
Line
Count
Source
187
25.4k
    void SkipToNextClause() {
188
43.8k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)18.6k
)
189
18.3k
        ++this->I;
190
25.4k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause>::SkipToNextClause()
Line
Count
Source
187
1.89k
    void SkipToNextClause() {
188
2.33k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)465
)
189
438
        ++this->I;
190
1.89k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPProcBindClause>::SkipToNextClause()
Line
Count
Source
187
11.7k
    void SkipToNextClause() {
188
19.3k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)7.66k
)
189
7.55k
        ++this->I;
190
11.7k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderClause>::SkipToNextClause()
Line
Count
Source
187
21.3k
    void SkipToNextClause() {
188
37.2k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)15.9k
)
189
15.9k
        ++this->I;
190
21.3k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause>::SkipToNextClause()
Line
Count
Source
187
11.2k
    void SkipToNextClause() {
188
16.7k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)7.07k
)
189
5.44k
        ++this->I;
190
11.2k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause>::SkipToNextClause()
Line
Count
Source
187
138
    void SkipToNextClause() {
188
157
      while (this->I != End && 
!isa<SpecificClause>(*this->I)47
)
189
19
        ++this->I;
190
138
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFinalClause>::SkipToNextClause()
Line
Count
Source
187
820
    void SkipToNextClause() {
188
1.41k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)613
)
189
591
        ++this->I;
190
820
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPriorityClause>::SkipToNextClause()
Line
Count
Source
187
820
    void SkipToNextClause() {
188
1.41k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)613
)
189
591
        ++this->I;
190
820
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause>::SkipToNextClause()
Line
Count
Source
187
842
    void SkipToNextClause() {
188
1.41k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)613
)
189
569
        ++this->I;
190
842
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUntiedClause>::SkipToNextClause()
Line
Count
Source
187
366
    void SkipToNextClause() {
188
579
      while (this->I != End && 
!isa<SpecificClause>(*this->I)229
)
189
213
        ++this->I;
190
366
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause>::SkipToNextClause()
Line
Count
Source
187
78
    void SkipToNextClause() {
188
81
      while (this->I != End && 
!isa<SpecificClause>(*this->I)29
)
189
3
        ++this->I;
190
78
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFlushClause>::SkipToNextClause()
Line
Count
Source
187
176
    void SkipToNextClause() {
188
224
      while (this->I != End && 
!isa<SpecificClause>(*this->I)64
)
189
48
        ++this->I;
190
176
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDepobjClause>::SkipToNextClause()
Line
Count
Source
187
42
    void SkipToNextClause() {
188
56
      while (this->I != End && 
!isa<SpecificClause>(*this->I)28
)
189
14
        ++this->I;
190
42
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDestroyClause>::SkipToNextClause()
Line
Count
Source
187
20
    void SkipToNextClause() {
188
32
      while (this->I != End && 
!isa<SpecificClause>(*this->I)16
)
189
12
        ++this->I;
190
20
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUpdateClause>::SkipToNextClause()
Line
Count
Source
187
12
    void SkipToNextClause() {
188
16
      while (this->I != End && 
!isa<SpecificClause>(*this->I)8
)
189
4
        ++this->I;
190
12
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInclusiveClause>::SkipToNextClause()
Line
Count
Source
187
96
    void SkipToNextClause() {
188
120
      while (this->I != End && 
!isa<SpecificClause>(*this->I)48
)
189
24
        ++this->I;
190
96
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDistScheduleClause>::SkipToNextClause()
Line
Count
Source
187
8.90k
    void SkipToNextClause() {
188
14.7k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)6.30k
)
189
5.83k
        ++this->I;
190
8.90k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSIMDClause>::SkipToNextClause()
Line
Count
Source
187
56
    void SkipToNextClause() {
188
64
      while (this->I != End && 
!isa<SpecificClause>(*this->I)16
)
189
8
        ++this->I;
190
56
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSeqCstClause>::SkipToNextClause()
Line
Count
Source
187
936
    void SkipToNextClause() {
188
1.35k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)446
)
189
414
        ++this->I;
190
936
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcqRelClause>::SkipToNextClause()
Line
Count
Source
187
842
    void SkipToNextClause() {
188
1.22k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)386
)
189
384
        ++this->I;
190
842
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcquireClause>::SkipToNextClause()
Line
Count
Source
187
840
    void SkipToNextClause() {
188
1.21k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)382
)
189
378
        ++this->I;
190
840
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReleaseClause>::SkipToNextClause()
Line
Count
Source
187
834
    void SkipToNextClause() {
188
1.20k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)374
)
189
368
        ++this->I;
190
834
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPRelaxedClause>::SkipToNextClause()
Line
Count
Source
187
834
    void SkipToNextClause() {
188
1.17k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)362
)
189
344
        ++this->I;
190
834
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNogroupClause>::SkipToNextClause()
Line
Count
Source
187
466
    void SkipToNextClause() {
188
832
      while (this->I != End && 
!isa<SpecificClause>(*this->I)384
)
189
366
        ++this->I;
190
466
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPGrainsizeClause>::SkipToNextClause()
Line
Count
Source
187
466
    void SkipToNextClause() {
188
832
      while (this->I != End && 
!isa<SpecificClause>(*this->I)384
)
189
366
        ++this->I;
190
466
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTasksClause>::SkipToNextClause()
Line
Count
Source
187
448
    void SkipToNextClause() {
188
748
      while (this->I != End && 
!isa<SpecificClause>(*this->I)336
)
189
300
        ++this->I;
190
448
    }
191
192
  public:
193
    explicit specific_clause_iterator(ArrayRef<OMPClause *> Clauses)
194
        : specific_clause_iterator::iterator_adaptor_base(Clauses.begin()),
195
1.61M
          End(Clauses.end()) {
196
1.61M
      SkipToNextClause();
197
1.61M
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
35.2k
          End(Clauses.end()) {
196
35.2k
      SkipToNextClause();
197
35.2k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCollapseClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
290k
          End(Clauses.end()) {
196
290k
      SkipToNextClause();
197
290k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
156k
          End(Clauses.end()) {
196
156k
      SkipToNextClause();
197
156k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPHintClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
116
          End(Clauses.end()) {
196
116
      SkipToNextClause();
197
116
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
2.82k
          End(Clauses.end()) {
196
2.82k
      SkipToNextClause();
197
2.82k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
21.1k
          End(Clauses.end()) {
196
21.1k
      SkipToNextClause();
197
21.1k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDeviceClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
18.1k
          End(Clauses.end()) {
196
18.1k
      SkipToNextClause();
197
18.1k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
1.43k
          End(Clauses.end()) {
196
1.43k
      SkipToNextClause();
197
1.43k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
37.6k
          End(Clauses.end()) {
196
37.6k
      SkipToNextClause();
197
37.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
111k
          End(Clauses.end()) {
196
111k
      SkipToNextClause();
197
111k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
16.7k
          End(Clauses.end()) {
196
16.7k
      SkipToNextClause();
197
16.7k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
39.3k
          End(Clauses.end()) {
196
39.3k
      SkipToNextClause();
197
39.3k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPToClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
16.7k
          End(Clauses.end()) {
196
16.7k
      SkipToNextClause();
197
16.7k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFromClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
16.7k
          End(Clauses.end()) {
196
16.7k
      SkipToNextClause();
197
16.7k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
16.9k
          End(Clauses.end()) {
196
16.9k
      SkipToNextClause();
197
16.9k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
16.9k
          End(Clauses.end()) {
196
16.9k
      SkipToNextClause();
197
16.9k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
18.4k
          End(Clauses.end()) {
196
18.4k
      SkipToNextClause();
197
18.4k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
18.1k
          End(Clauses.end()) {
196
18.1k
      SkipToNextClause();
197
18.1k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
53.6k
          End(Clauses.end()) {
196
53.6k
      SkipToNextClause();
197
53.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
17.1k
          End(Clauses.end()) {
196
17.1k
      SkipToNextClause();
197
17.1k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
25.6k
          End(Clauses.end()) {
196
25.6k
      SkipToNextClause();
197
25.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
129k
          End(Clauses.end()) {
196
129k
      SkipToNextClause();
197
129k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
133k
          End(Clauses.end()) {
196
133k
      SkipToNextClause();
197
133k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
182k
          End(Clauses.end()) {
196
182k
      SkipToNextClause();
197
182k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
117k
          End(Clauses.end()) {
196
117k
      SkipToNextClause();
197
117k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSimdlenClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
16.5k
          End(Clauses.end()) {
196
16.5k
      SkipToNextClause();
197
16.5k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSafelenClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
16.3k
          End(Clauses.end()) {
196
16.3k
      SkipToNextClause();
197
16.3k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
25.1k
          End(Clauses.end()) {
196
25.1k
      SkipToNextClause();
197
25.1k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
1.86k
          End(Clauses.end()) {
196
1.86k
      SkipToNextClause();
197
1.86k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPProcBindClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
11.6k
          End(Clauses.end()) {
196
11.6k
      SkipToNextClause();
197
11.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
21.3k
          End(Clauses.end()) {
196
21.3k
      SkipToNextClause();
197
21.3k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
9.93k
          End(Clauses.end()) {
196
9.93k
      SkipToNextClause();
197
9.93k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
110
          End(Clauses.end()) {
196
110
      SkipToNextClause();
197
110
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFinalClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
798
          End(Clauses.end()) {
196
798
      SkipToNextClause();
197
798
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPriorityClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
798
          End(Clauses.end()) {
196
798
      SkipToNextClause();
197
798
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
798
          End(Clauses.end()) {
196
798
      SkipToNextClause();
197
798
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUntiedClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
350
          End(Clauses.end()) {
196
350
      SkipToNextClause();
197
350
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
52
          End(Clauses.end()) {
196
52
      SkipToNextClause();
197
52
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFlushClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
160
          End(Clauses.end()) {
196
160
      SkipToNextClause();
197
160
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDepobjClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
28
          End(Clauses.end()) {
196
28
      SkipToNextClause();
197
28
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDestroyClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
16
          End(Clauses.end()) {
196
16
      SkipToNextClause();
197
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUpdateClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
8
          End(Clauses.end()) {
196
8
      SkipToNextClause();
197
8
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInclusiveClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
96
          End(Clauses.end()) {
196
96
      SkipToNextClause();
197
96
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDistScheduleClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
8.43k
          End(Clauses.end()) {
196
8.43k
      SkipToNextClause();
197
8.43k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSIMDClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
48
          End(Clauses.end()) {
196
48
      SkipToNextClause();
197
48
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSeqCstClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
904
          End(Clauses.end()) {
196
904
      SkipToNextClause();
197
904
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcqRelClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
840
          End(Clauses.end()) {
196
840
      SkipToNextClause();
197
840
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcquireClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
836
          End(Clauses.end()) {
196
836
      SkipToNextClause();
197
836
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReleaseClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
828
          End(Clauses.end()) {
196
828
      SkipToNextClause();
197
828
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPRelaxedClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
816
          End(Clauses.end()) {
196
816
      SkipToNextClause();
197
816
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNogroupClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
448
          End(Clauses.end()) {
196
448
      SkipToNextClause();
197
448
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPGrainsizeClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
448
          End(Clauses.end()) {
196
448
      SkipToNextClause();
197
448
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTasksClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
195
412
          End(Clauses.end()) {
196
412
      SkipToNextClause();
197
412
    }
198
199
62.2k
    const SpecificClause *operator*() const {
200
62.2k
      return cast<SpecificClause>(*this->I);
201
62.2k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCollapseClause>::operator*() const
Line
Count
Source
199
5.07k
    const SpecificClause *operator*() const {
200
5.07k
      return cast<SpecificClause>(*this->I);
201
5.07k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause>::operator*() const
Line
Count
Source
199
1.15k
    const SpecificClause *operator*() const {
200
1.15k
      return cast<SpecificClause>(*this->I);
201
1.15k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPHintClause>::operator*() const
Line
Count
Source
199
7
    const SpecificClause *operator*() const {
200
7
      return cast<SpecificClause>(*this->I);
201
7
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDeviceClause>::operator*() const
Line
Count
Source
199
398
    const SpecificClause *operator*() const {
200
398
      return cast<SpecificClause>(*this->I);
201
398
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause>::operator*() const
Line
Count
Source
199
2
    const SpecificClause *operator*() const {
200
2
      return cast<SpecificClause>(*this->I);
201
2
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause>::operator*() const
Line
Count
Source
199
18
    const SpecificClause *operator*() const {
200
18
      return cast<SpecificClause>(*this->I);
201
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause>::operator*() const
Line
Count
Source
199
40
    const SpecificClause *operator*() const {
200
40
      return cast<SpecificClause>(*this->I);
201
40
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause>::operator*() const
Line
Count
Source
199
22.0k
    const SpecificClause *operator*() const {
200
22.0k
      return cast<SpecificClause>(*this->I);
201
22.0k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause>::operator*() const
Line
Count
Source
199
84
    const SpecificClause *operator*() const {
200
84
      return cast<SpecificClause>(*this->I);
201
84
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause>::operator*() const
Line
Count
Source
199
10.9k
    const SpecificClause *operator*() const {
200
10.9k
      return cast<SpecificClause>(*this->I);
201
10.9k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPToClause>::operator*() const
Line
Count
Source
199
84
    const SpecificClause *operator*() const {
200
84
      return cast<SpecificClause>(*this->I);
201
84
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFromClause>::operator*() const
Line
Count
Source
199
98
    const SpecificClause *operator*() const {
200
98
      return cast<SpecificClause>(*this->I);
201
98
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause>::operator*() const
Line
Count
Source
199
136
    const SpecificClause *operator*() const {
200
136
      return cast<SpecificClause>(*this->I);
201
136
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause>::operator*() const
Line
Count
Source
199
8
    const SpecificClause *operator*() const {
200
8
      return cast<SpecificClause>(*this->I);
201
8
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause>::operator*() const
Line
Count
Source
199
603
    const SpecificClause *operator*() const {
200
603
      return cast<SpecificClause>(*this->I);
201
603
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause>::operator*() const
Line
Count
Source
199
495
    const SpecificClause *operator*() const {
200
495
      return cast<SpecificClause>(*this->I);
201
495
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause>::operator*() const
Line
Count
Source
199
4.36k
    const SpecificClause *operator*() const {
200
4.36k
      return cast<SpecificClause>(*this->I);
201
4.36k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause>::operator*() const
Line
Count
Source
199
389
    const SpecificClause *operator*() const {
200
389
      return cast<SpecificClause>(*this->I);
201
389
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause>::operator*() const
Line
Count
Source
199
132
    const SpecificClause *operator*() const {
200
132
      return cast<SpecificClause>(*this->I);
201
132
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause>::operator*() const
Line
Count
Source
199
2.49k
    const SpecificClause *operator*() const {
200
2.49k
      return cast<SpecificClause>(*this->I);
201
2.49k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause>::operator*() const
Line
Count
Source
199
3.22k
    const SpecificClause *operator*() const {
200
3.22k
      return cast<SpecificClause>(*this->I);
201
3.22k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause>::operator*() const
Line
Count
Source
199
4.39k
    const SpecificClause *operator*() const {
200
4.39k
      return cast<SpecificClause>(*this->I);
201
4.39k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause>::operator*() const
Line
Count
Source
199
2.52k
    const SpecificClause *operator*() const {
200
2.52k
      return cast<SpecificClause>(*this->I);
201
2.52k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSimdlenClause>::operator*() const
Line
Count
Source
199
252
    const SpecificClause *operator*() const {
200
252
      return cast<SpecificClause>(*this->I);
201
252
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSafelenClause>::operator*() const
Line
Count
Source
199
210
    const SpecificClause *operator*() const {
200
210
      return cast<SpecificClause>(*this->I);
201
210
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause>::operator*() const
Line
Count
Source
199
318
    const SpecificClause *operator*() const {
200
318
      return cast<SpecificClause>(*this->I);
201
318
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause>::operator*() const
Line
Count
Source
199
27
    const SpecificClause *operator*() const {
200
27
      return cast<SpecificClause>(*this->I);
201
27
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause>::operator*() const
Line
Count
Source
199
30
    const SpecificClause *operator*() const {
200
30
      return cast<SpecificClause>(*this->I);
201
30
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPProcBindClause>::operator*() const
Line
Count
Source
199
114
    const SpecificClause *operator*() const {
200
114
      return cast<SpecificClause>(*this->I);
201
114
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderClause>::operator*() const
Line
Count
Source
199
5
    const SpecificClause *operator*() const {
200
5
      return cast<SpecificClause>(*this->I);
201
5
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause>::operator*() const
Line
Count
Source
199
1.43k
    const SpecificClause *operator*() const {
200
1.43k
      return cast<SpecificClause>(*this->I);
201
1.43k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause>::operator*() const
Line
Count
Source
199
28
    const SpecificClause *operator*() const {
200
28
      return cast<SpecificClause>(*this->I);
201
28
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFinalClause>::operator*() const
Line
Count
Source
199
22
    const SpecificClause *operator*() const {
200
22
      return cast<SpecificClause>(*this->I);
201
22
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPriorityClause>::operator*() const
Line
Count
Source
199
22
    const SpecificClause *operator*() const {
200
22
      return cast<SpecificClause>(*this->I);
201
22
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause>::operator*() const
Line
Count
Source
199
438
    const SpecificClause *operator*() const {
200
438
      return cast<SpecificClause>(*this->I);
201
438
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause>::operator*() const
Line
Count
Source
199
44
    const SpecificClause *operator*() const {
200
44
      return cast<SpecificClause>(*this->I);
201
44
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUntiedClause>::operator*() const
Line
Count
Source
199
16
    const SpecificClause *operator*() const {
200
16
      return cast<SpecificClause>(*this->I);
201
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause>::operator*() const
Line
Count
Source
199
26
    const SpecificClause *operator*() const {
200
26
      return cast<SpecificClause>(*this->I);
201
26
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFlushClause>::operator*() const
Line
Count
Source
199
16
    const SpecificClause *operator*() const {
200
16
      return cast<SpecificClause>(*this->I);
201
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDepobjClause>::operator*() const
Line
Count
Source
199
14
    const SpecificClause *operator*() const {
200
14
      return cast<SpecificClause>(*this->I);
201
14
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDestroyClause>::operator*() const
Line
Count
Source
199
4
    const SpecificClause *operator*() const {
200
4
      return cast<SpecificClause>(*this->I);
201
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUpdateClause>::operator*() const
Line
Count
Source
199
4
    const SpecificClause *operator*() const {
200
4
      return cast<SpecificClause>(*this->I);
201
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDistScheduleClause>::operator*() const
Line
Count
Source
199
472
    const SpecificClause *operator*() const {
200
472
      return cast<SpecificClause>(*this->I);
201
472
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSIMDClause>::operator*() const
Line
Count
Source
199
8
    const SpecificClause *operator*() const {
200
8
      return cast<SpecificClause>(*this->I);
201
8
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSeqCstClause>::operator*() const
Line
Count
Source
199
32
    const SpecificClause *operator*() const {
200
32
      return cast<SpecificClause>(*this->I);
201
32
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcqRelClause>::operator*() const
Line
Count
Source
199
2
    const SpecificClause *operator*() const {
200
2
      return cast<SpecificClause>(*this->I);
201
2
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcquireClause>::operator*() const
Line
Count
Source
199
4
    const SpecificClause *operator*() const {
200
4
      return cast<SpecificClause>(*this->I);
201
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReleaseClause>::operator*() const
Line
Count
Source
199
6
    const SpecificClause *operator*() const {
200
6
      return cast<SpecificClause>(*this->I);
201
6
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPRelaxedClause>::operator*() const
Line
Count
Source
199
18
    const SpecificClause *operator*() const {
200
18
      return cast<SpecificClause>(*this->I);
201
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNogroupClause>::operator*() const
Line
Count
Source
199
18
    const SpecificClause *operator*() const {
200
18
      return cast<SpecificClause>(*this->I);
201
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPGrainsizeClause>::operator*() const
Line
Count
Source
199
18
    const SpecificClause *operator*() const {
200
18
      return cast<SpecificClause>(*this->I);
201
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTasksClause>::operator*() const
Line
Count
Source
199
36
    const SpecificClause *operator*() const {
200
36
      return cast<SpecificClause>(*this->I);
201
36
    }
202
    const SpecificClause *operator->() const { return **this; }
203
204
53.8k
    specific_clause_iterator &operator++() {
205
53.8k
      ++this->I;
206
53.8k
      SkipToNextClause();
207
53.8k
      return *this;
208
53.8k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPHintClause>::operator++()
Line
Count
Source
204
7
    specific_clause_iterator &operator++() {
205
7
      ++this->I;
206
7
      SkipToNextClause();
207
7
      return *this;
208
7
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause>::operator++()
Line
Count
Source
204
167
    specific_clause_iterator &operator++() {
205
167
      ++this->I;
206
167
      SkipToNextClause();
207
167
      return *this;
208
167
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDeviceClause>::operator++()
Line
Count
Source
204
398
    specific_clause_iterator &operator++() {
205
398
      ++this->I;
206
398
      SkipToNextClause();
207
398
      return *this;
208
398
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause>::operator++()
Line
Count
Source
204
2
    specific_clause_iterator &operator++() {
205
2
      ++this->I;
206
2
      SkipToNextClause();
207
2
      return *this;
208
2
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause>::operator++()
Line
Count
Source
204
18
    specific_clause_iterator &operator++() {
205
18
      ++this->I;
206
18
      SkipToNextClause();
207
18
      return *this;
208
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause>::operator++()
Line
Count
Source
204
40
    specific_clause_iterator &operator++() {
205
40
      ++this->I;
206
40
      SkipToNextClause();
207
40
      return *this;
208
40
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause>::operator++()
Line
Count
Source
204
22.0k
    specific_clause_iterator &operator++() {
205
22.0k
      ++this->I;
206
22.0k
      SkipToNextClause();
207
22.0k
      return *this;
208
22.0k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause>::operator++()
Line
Count
Source
204
84
    specific_clause_iterator &operator++() {
205
84
      ++this->I;
206
84
      SkipToNextClause();
207
84
      return *this;
208
84
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause>::operator++()
Line
Count
Source
204
10.9k
    specific_clause_iterator &operator++() {
205
10.9k
      ++this->I;
206
10.9k
      SkipToNextClause();
207
10.9k
      return *this;
208
10.9k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPToClause>::operator++()
Line
Count
Source
204
84
    specific_clause_iterator &operator++() {
205
84
      ++this->I;
206
84
      SkipToNextClause();
207
84
      return *this;
208
84
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFromClause>::operator++()
Line
Count
Source
204
98
    specific_clause_iterator &operator++() {
205
98
      ++this->I;
206
98
      SkipToNextClause();
207
98
      return *this;
208
98
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause>::operator++()
Line
Count
Source
204
136
    specific_clause_iterator &operator++() {
205
136
      ++this->I;
206
136
      SkipToNextClause();
207
136
      return *this;
208
136
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause>::operator++()
Line
Count
Source
204
8
    specific_clause_iterator &operator++() {
205
8
      ++this->I;
206
8
      SkipToNextClause();
207
8
      return *this;
208
8
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause>::operator++()
Line
Count
Source
204
603
    specific_clause_iterator &operator++() {
205
603
      ++this->I;
206
603
      SkipToNextClause();
207
603
      return *this;
208
603
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause>::operator++()
Line
Count
Source
204
495
    specific_clause_iterator &operator++() {
205
495
      ++this->I;
206
495
      SkipToNextClause();
207
495
      return *this;
208
495
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause>::operator++()
Line
Count
Source
204
2.22k
    specific_clause_iterator &operator++() {
205
2.22k
      ++this->I;
206
2.22k
      SkipToNextClause();
207
2.22k
      return *this;
208
2.22k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause>::operator++()
Line
Count
Source
204
389
    specific_clause_iterator &operator++() {
205
389
      ++this->I;
206
389
      SkipToNextClause();
207
389
      return *this;
208
389
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause>::operator++()
Line
Count
Source
204
132
    specific_clause_iterator &operator++() {
205
132
      ++this->I;
206
132
      SkipToNextClause();
207
132
      return *this;
208
132
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause>::operator++()
Line
Count
Source
204
2.49k
    specific_clause_iterator &operator++() {
205
2.49k
      ++this->I;
206
2.49k
      SkipToNextClause();
207
2.49k
      return *this;
208
2.49k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause>::operator++()
Line
Count
Source
204
3.15k
    specific_clause_iterator &operator++() {
205
3.15k
      ++this->I;
206
3.15k
      SkipToNextClause();
207
3.15k
      return *this;
208
3.15k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause>::operator++()
Line
Count
Source
204
4.36k
    specific_clause_iterator &operator++() {
205
4.36k
      ++this->I;
206
4.36k
      SkipToNextClause();
207
4.36k
      return *this;
208
4.36k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause>::operator++()
Line
Count
Source
204
2.52k
    specific_clause_iterator &operator++() {
205
2.52k
      ++this->I;
206
2.52k
      SkipToNextClause();
207
2.52k
      return *this;
208
2.52k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSimdlenClause>::operator++()
Line
Count
Source
204
252
    specific_clause_iterator &operator++() {
205
252
      ++this->I;
206
252
      SkipToNextClause();
207
252
      return *this;
208
252
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSafelenClause>::operator++()
Line
Count
Source
204
210
    specific_clause_iterator &operator++() {
205
210
      ++this->I;
206
210
      SkipToNextClause();
207
210
      return *this;
208
210
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause>::operator++()
Line
Count
Source
204
318
    specific_clause_iterator &operator++() {
205
318
      ++this->I;
206
318
      SkipToNextClause();
207
318
      return *this;
208
318
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause>::operator++()
Line
Count
Source
204
27
    specific_clause_iterator &operator++() {
205
27
      ++this->I;
206
27
      SkipToNextClause();
207
27
      return *this;
208
27
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause>::operator++()
Line
Count
Source
204
30
    specific_clause_iterator &operator++() {
205
30
      ++this->I;
206
30
      SkipToNextClause();
207
30
      return *this;
208
30
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPProcBindClause>::operator++()
Line
Count
Source
204
114
    specific_clause_iterator &operator++() {
205
114
      ++this->I;
206
114
      SkipToNextClause();
207
114
      return *this;
208
114
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderClause>::operator++()
Line
Count
Source
204
5
    specific_clause_iterator &operator++() {
205
5
      ++this->I;
206
5
      SkipToNextClause();
207
5
      return *this;
208
5
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause>::operator++()
Line
Count
Source
204
1.34k
    specific_clause_iterator &operator++() {
205
1.34k
      ++this->I;
206
1.34k
      SkipToNextClause();
207
1.34k
      return *this;
208
1.34k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause>::operator++()
Line
Count
Source
204
28
    specific_clause_iterator &operator++() {
205
28
      ++this->I;
206
28
      SkipToNextClause();
207
28
      return *this;
208
28
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFinalClause>::operator++()
Line
Count
Source
204
22
    specific_clause_iterator &operator++() {
205
22
      ++this->I;
206
22
      SkipToNextClause();
207
22
      return *this;
208
22
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPriorityClause>::operator++()
Line
Count
Source
204
22
    specific_clause_iterator &operator++() {
205
22
      ++this->I;
206
22
      SkipToNextClause();
207
22
      return *this;
208
22
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause>::operator++()
Line
Count
Source
204
438
    specific_clause_iterator &operator++() {
205
438
      ++this->I;
206
438
      SkipToNextClause();
207
438
      return *this;
208
438
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause>::operator++()
Line
Count
Source
204
44
    specific_clause_iterator &operator++() {
205
44
      ++this->I;
206
44
      SkipToNextClause();
207
44
      return *this;
208
44
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUntiedClause>::operator++()
Line
Count
Source
204
16
    specific_clause_iterator &operator++() {
205
16
      ++this->I;
206
16
      SkipToNextClause();
207
16
      return *this;
208
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause>::operator++()
Line
Count
Source
204
26
    specific_clause_iterator &operator++() {
205
26
      ++this->I;
206
26
      SkipToNextClause();
207
26
      return *this;
208
26
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFlushClause>::operator++()
Line
Count
Source
204
16
    specific_clause_iterator &operator++() {
205
16
      ++this->I;
206
16
      SkipToNextClause();
207
16
      return *this;
208
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDepobjClause>::operator++()
Line
Count
Source
204
14
    specific_clause_iterator &operator++() {
205
14
      ++this->I;
206
14
      SkipToNextClause();
207
14
      return *this;
208
14
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDestroyClause>::operator++()
Line
Count
Source
204
4
    specific_clause_iterator &operator++() {
205
4
      ++this->I;
206
4
      SkipToNextClause();
207
4
      return *this;
208
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUpdateClause>::operator++()
Line
Count
Source
204
4
    specific_clause_iterator &operator++() {
205
4
      ++this->I;
206
4
      SkipToNextClause();
207
4
      return *this;
208
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDistScheduleClause>::operator++()
Line
Count
Source
204
472
    specific_clause_iterator &operator++() {
205
472
      ++this->I;
206
472
      SkipToNextClause();
207
472
      return *this;
208
472
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSIMDClause>::operator++()
Line
Count
Source
204
8
    specific_clause_iterator &operator++() {
205
8
      ++this->I;
206
8
      SkipToNextClause();
207
8
      return *this;
208
8
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSeqCstClause>::operator++()
Line
Count
Source
204
32
    specific_clause_iterator &operator++() {
205
32
      ++this->I;
206
32
      SkipToNextClause();
207
32
      return *this;
208
32
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcqRelClause>::operator++()
Line
Count
Source
204
2
    specific_clause_iterator &operator++() {
205
2
      ++this->I;
206
2
      SkipToNextClause();
207
2
      return *this;
208
2
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcquireClause>::operator++()
Line
Count
Source
204
4
    specific_clause_iterator &operator++() {
205
4
      ++this->I;
206
4
      SkipToNextClause();
207
4
      return *this;
208
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReleaseClause>::operator++()
Line
Count
Source
204
6
    specific_clause_iterator &operator++() {
205
6
      ++this->I;
206
6
      SkipToNextClause();
207
6
      return *this;
208
6
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPRelaxedClause>::operator++()
Line
Count
Source
204
18
    specific_clause_iterator &operator++() {
205
18
      ++this->I;
206
18
      SkipToNextClause();
207
18
      return *this;
208
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNogroupClause>::operator++()
Line
Count
Source
204
18
    specific_clause_iterator &operator++() {
205
18
      ++this->I;
206
18
      SkipToNextClause();
207
18
      return *this;
208
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPGrainsizeClause>::operator++()
Line
Count
Source
204
18
    specific_clause_iterator &operator++() {
205
18
      ++this->I;
206
18
      SkipToNextClause();
207
18
      return *this;
208
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTasksClause>::operator++()
Line
Count
Source
204
36
    specific_clause_iterator &operator++() {
205
36
      ++this->I;
206
36
      SkipToNextClause();
207
36
      return *this;
208
36
    }
209
  };
210
211
  template <typename SpecificClause>
212
  static llvm::iterator_range<specific_clause_iterator<SpecificClause>>
213
806k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
806k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
806k
            specific_clause_iterator<SpecificClause>(
216
806k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
806k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDependClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
17.6k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
17.6k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
17.6k
            specific_clause_iterator<SpecificClause>(
216
17.6k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
17.6k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCollapseClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPCollapseClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
145k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
145k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
145k
            specific_clause_iterator<SpecificClause>(
216
145k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
145k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPOrderedClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
78.1k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
78.1k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
78.1k
            specific_clause_iterator<SpecificClause>(
216
78.1k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
78.1k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPHintClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPHintClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
58
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
58
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
58
            specific_clause_iterator<SpecificClause>(
216
58
                llvm::makeArrayRef(Clauses.end(), 0))};
217
58
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDetachClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
1.41k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
1.41k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
1.41k
            specific_clause_iterator<SpecificClause>(
216
1.41k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
1.41k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNowaitClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
10.5k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
10.5k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
10.5k
            specific_clause_iterator<SpecificClause>(
216
10.5k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
10.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDeviceClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDeviceClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
9.09k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
9.09k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
9.09k
            specific_clause_iterator<SpecificClause>(
216
9.09k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
9.09k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAffinityClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
719
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
719
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
719
            specific_clause_iterator<SpecificClause>(
216
719
                llvm::makeArrayRef(Clauses.end(), 0))};
217
719
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUsesAllocatorsClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
18.8k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
18.8k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
18.8k
            specific_clause_iterator<SpecificClause>(
216
18.8k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
18.8k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFirstprivateClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
55.7k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
55.7k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
55.7k
            specific_clause_iterator<SpecificClause>(
216
55.7k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
55.7k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPIsDevicePtrClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
8.38k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
8.38k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
8.38k
            specific_clause_iterator<SpecificClause>(
216
8.38k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
8.38k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPMapClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
19.6k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
19.6k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
19.6k
            specific_clause_iterator<SpecificClause>(
216
19.6k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
19.6k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPToClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPToClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
8.38k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
8.38k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
8.38k
            specific_clause_iterator<SpecificClause>(
216
8.38k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
8.38k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFromClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFromClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
8.38k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
8.38k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
8.38k
            specific_clause_iterator<SpecificClause>(
216
8.38k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
8.38k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUseDevicePtrClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
8.45k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
8.45k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
8.45k
            specific_clause_iterator<SpecificClause>(
216
8.45k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
8.45k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUseDeviceAddrClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
8.45k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
8.45k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
8.45k
            specific_clause_iterator<SpecificClause>(
216
8.45k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
8.45k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNumTeamsClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
9.23k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
9.23k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
9.23k
            specific_clause_iterator<SpecificClause>(
216
9.23k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
9.23k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPThreadLimitClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
9.06k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
9.06k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
9.06k
            specific_clause_iterator<SpecificClause>(
216
9.06k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
9.06k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPIfClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
26.8k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
26.8k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
26.8k
            specific_clause_iterator<SpecificClause>(
216
26.8k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
26.8k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNumThreadsClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
8.56k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
8.56k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
8.56k
            specific_clause_iterator<SpecificClause>(
216
8.56k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
8.56k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNontemporalClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
12.8k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
12.8k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
12.8k
            specific_clause_iterator<SpecificClause>(
216
12.8k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
12.8k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPPrivateClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
64.7k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
64.7k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
64.7k
            specific_clause_iterator<SpecificClause>(
216
64.7k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
64.7k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPLastprivateClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
66.5k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
66.5k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
66.5k
            specific_clause_iterator<SpecificClause>(
216
66.5k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
66.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPReductionClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
91.0k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
91.0k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
91.0k
            specific_clause_iterator<SpecificClause>(
216
91.0k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
91.0k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPLinearClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
58.5k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
58.5k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
58.5k
            specific_clause_iterator<SpecificClause>(
216
58.5k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
58.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSimdlenClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSimdlenClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
8.29k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
8.29k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
8.29k
            specific_clause_iterator<SpecificClause>(
216
8.29k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
8.29k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSafelenClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSafelenClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
8.18k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
8.18k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
8.18k
            specific_clause_iterator<SpecificClause>(
216
8.18k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
8.18k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAlignedClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
12.5k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
12.5k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
12.5k
            specific_clause_iterator<SpecificClause>(
216
12.5k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
12.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPCopyinClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
933
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
933
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
933
            specific_clause_iterator<SpecificClause>(
216
933
                llvm::makeArrayRef(Clauses.end(), 0))};
217
933
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPProcBindClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPProcBindClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
5.83k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
5.83k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
5.83k
            specific_clause_iterator<SpecificClause>(
216
5.83k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
5.83k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPOrderClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
10.6k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
10.6k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
10.6k
            specific_clause_iterator<SpecificClause>(
216
10.6k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
10.6k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPScheduleClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
4.96k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
4.96k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
4.96k
            specific_clause_iterator<SpecificClause>(
216
4.96k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
4.96k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPCopyprivateClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
55
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
55
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
55
            specific_clause_iterator<SpecificClause>(
216
55
                llvm::makeArrayRef(Clauses.end(), 0))};
217
55
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFinalClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFinalClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
399
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
399
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
399
            specific_clause_iterator<SpecificClause>(
216
399
                llvm::makeArrayRef(Clauses.end(), 0))};
217
399
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPriorityClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPPriorityClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
399
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
399
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
399
            specific_clause_iterator<SpecificClause>(
216
399
                llvm::makeArrayRef(Clauses.end(), 0))};
217
399
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPInReductionClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
399
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
399
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
399
            specific_clause_iterator<SpecificClause>(
216
399
                llvm::makeArrayRef(Clauses.end(), 0))};
217
399
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUntiedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUntiedClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
175
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
175
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
175
            specific_clause_iterator<SpecificClause>(
216
175
                llvm::makeArrayRef(Clauses.end(), 0))};
217
175
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPTaskReductionClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
26
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
26
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
26
            specific_clause_iterator<SpecificClause>(
216
26
                llvm::makeArrayRef(Clauses.end(), 0))};
217
26
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFlushClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFlushClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
80
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
80
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
80
            specific_clause_iterator<SpecificClause>(
216
80
                llvm::makeArrayRef(Clauses.end(), 0))};
217
80
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDepobjClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDepobjClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
14
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
14
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
14
            specific_clause_iterator<SpecificClause>(
216
14
                llvm::makeArrayRef(Clauses.end(), 0))};
217
14
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDestroyClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDestroyClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
8
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
8
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
8
            specific_clause_iterator<SpecificClause>(
216
8
                llvm::makeArrayRef(Clauses.end(), 0))};
217
8
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUpdateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUpdateClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
4
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
4
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
4
            specific_clause_iterator<SpecificClause>(
216
4
                llvm::makeArrayRef(Clauses.end(), 0))};
217
4
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInclusiveClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPInclusiveClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
48
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
48
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
48
            specific_clause_iterator<SpecificClause>(
216
48
                llvm::makeArrayRef(Clauses.end(), 0))};
217
48
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDistScheduleClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDistScheduleClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
4.21k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
4.21k
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
4.21k
            specific_clause_iterator<SpecificClause>(
216
4.21k
                llvm::makeArrayRef(Clauses.end(), 0))};
217
4.21k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSIMDClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSIMDClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
24
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
24
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
24
            specific_clause_iterator<SpecificClause>(
216
24
                llvm::makeArrayRef(Clauses.end(), 0))};
217
24
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSeqCstClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSeqCstClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
452
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
452
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
452
            specific_clause_iterator<SpecificClause>(
216
452
                llvm::makeArrayRef(Clauses.end(), 0))};
217
452
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcqRelClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAcqRelClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
420
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
420
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
420
            specific_clause_iterator<SpecificClause>(
216
420
                llvm::makeArrayRef(Clauses.end(), 0))};
217
420
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcquireClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAcquireClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
418
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
418
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
418
            specific_clause_iterator<SpecificClause>(
216
418
                llvm::makeArrayRef(Clauses.end(), 0))};
217
418
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReleaseClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPReleaseClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
414
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
414
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
414
            specific_clause_iterator<SpecificClause>(
216
414
                llvm::makeArrayRef(Clauses.end(), 0))};
217
414
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPRelaxedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPRelaxedClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
408
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
408
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
408
            specific_clause_iterator<SpecificClause>(
216
408
                llvm::makeArrayRef(Clauses.end(), 0))};
217
408
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNogroupClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNogroupClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
224
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
224
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
224
            specific_clause_iterator<SpecificClause>(
216
224
                llvm::makeArrayRef(Clauses.end(), 0))};
217
224
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPGrainsizeClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPGrainsizeClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
224
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
224
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
224
            specific_clause_iterator<SpecificClause>(
216
224
                llvm::makeArrayRef(Clauses.end(), 0))};
217
224
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTasksClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNumTasksClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
213
206
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
214
206
    return {specific_clause_iterator<SpecificClause>(Clauses),
215
206
            specific_clause_iterator<SpecificClause>(
216
206
                llvm::makeArrayRef(Clauses.end(), 0))};
217
206
  }
218
219
  template <typename SpecificClause>
220
  llvm::iterator_range<specific_clause_iterator<SpecificClause>>
221
608k
  getClausesOfKind() const {
222
608k
    return getClausesOfKind<SpecificClause>(clauses());
223
608k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDependClause>() const
Line
Count
Source
221
17.6k
  getClausesOfKind() const {
222
17.6k
    return getClausesOfKind<SpecificClause>(clauses());
223
17.6k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPHintClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPHintClause>() const
Line
Count
Source
221
58
  getClausesOfKind() const {
222
58
    return getClausesOfKind<SpecificClause>(clauses());
223
58
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPOrderedClause>() const
Line
Count
Source
221
25.4k
  getClausesOfKind() const {
222
25.4k
    return getClausesOfKind<SpecificClause>(clauses());
223
25.4k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDetachClause>() const
Line
Count
Source
221
1.41k
  getClausesOfKind() const {
222
1.41k
    return getClausesOfKind<SpecificClause>(clauses());
223
1.41k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNowaitClause>() const
Line
Count
Source
221
10.5k
  getClausesOfKind() const {
222
10.5k
    return getClausesOfKind<SpecificClause>(clauses());
223
10.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDeviceClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDeviceClause>() const
Line
Count
Source
221
9.09k
  getClausesOfKind() const {
222
9.09k
    return getClausesOfKind<SpecificClause>(clauses());
223
9.09k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAffinityClause>() const
Line
Count
Source
221
719
  getClausesOfKind() const {
222
719
    return getClausesOfKind<SpecificClause>(clauses());
223
719
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUsesAllocatorsClause>() const
Line
Count
Source
221
18.8k
  getClausesOfKind() const {
222
18.8k
    return getClausesOfKind<SpecificClause>(clauses());
223
18.8k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFirstprivateClause>() const
Line
Count
Source
221
55.7k
  getClausesOfKind() const {
222
55.7k
    return getClausesOfKind<SpecificClause>(clauses());
223
55.7k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPIsDevicePtrClause>() const
Line
Count
Source
221
8.38k
  getClausesOfKind() const {
222
8.38k
    return getClausesOfKind<SpecificClause>(clauses());
223
8.38k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPMapClause>() const
Line
Count
Source
221
19.6k
  getClausesOfKind() const {
222
19.6k
    return getClausesOfKind<SpecificClause>(clauses());
223
19.6k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPToClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPToClause>() const
Line
Count
Source
221
8.38k
  getClausesOfKind() const {
222
8.38k
    return getClausesOfKind<SpecificClause>(clauses());
223
8.38k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFromClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFromClause>() const
Line
Count
Source
221
8.38k
  getClausesOfKind() const {
222
8.38k
    return getClausesOfKind<SpecificClause>(clauses());
223
8.38k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUseDevicePtrClause>() const
Line
Count
Source
221
8.45k
  getClausesOfKind() const {
222
8.45k
    return getClausesOfKind<SpecificClause>(clauses());
223
8.45k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUseDeviceAddrClause>() const
Line
Count
Source
221
8.45k
  getClausesOfKind() const {
222
8.45k
    return getClausesOfKind<SpecificClause>(clauses());
223
8.45k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNumTeamsClause>() const
Line
Count
Source
221
9.23k
  getClausesOfKind() const {
222
9.23k
    return getClausesOfKind<SpecificClause>(clauses());
223
9.23k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPThreadLimitClause>() const
Line
Count
Source
221
9.06k
  getClausesOfKind() const {
222
9.06k
    return getClausesOfKind<SpecificClause>(clauses());
223
9.06k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPIfClause>() const
Line
Count
Source
221
26.8k
  getClausesOfKind() const {
222
26.8k
    return getClausesOfKind<SpecificClause>(clauses());
223
26.8k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNumThreadsClause>() const
Line
Count
Source
221
8.56k
  getClausesOfKind() const {
222
8.56k
    return getClausesOfKind<SpecificClause>(clauses());
223
8.56k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNontemporalClause>() const
Line
Count
Source
221
12.8k
  getClausesOfKind() const {
222
12.8k
    return getClausesOfKind<SpecificClause>(clauses());
223
12.8k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPPrivateClause>() const
Line
Count
Source
221
64.7k
  getClausesOfKind() const {
222
64.7k
    return getClausesOfKind<SpecificClause>(clauses());
223
64.7k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPLastprivateClause>() const
Line
Count
Source
221
66.5k
  getClausesOfKind() const {
222
66.5k
    return getClausesOfKind<SpecificClause>(clauses());
223
66.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPReductionClause>() const
Line
Count
Source
221
91.0k
  getClausesOfKind() const {
222
91.0k
    return getClausesOfKind<SpecificClause>(clauses());
223
91.0k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPLinearClause>() const
Line
Count
Source
221
58.5k
  getClausesOfKind() const {
222
58.5k
    return getClausesOfKind<SpecificClause>(clauses());
223
58.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSimdlenClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSimdlenClause>() const
Line
Count
Source
221
8.29k
  getClausesOfKind() const {
222
8.29k
    return getClausesOfKind<SpecificClause>(clauses());
223
8.29k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSafelenClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSafelenClause>() const
Line
Count
Source
221
8.18k
  getClausesOfKind() const {
222
8.18k
    return getClausesOfKind<SpecificClause>(clauses());
223
8.18k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAlignedClause>() const
Line
Count
Source
221
12.5k
  getClausesOfKind() const {
222
12.5k
    return getClausesOfKind<SpecificClause>(clauses());
223
12.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPCopyinClause>() const
Line
Count
Source
221
933
  getClausesOfKind() const {
222
933
    return getClausesOfKind<SpecificClause>(clauses());
223
933
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPProcBindClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPProcBindClause>() const
Line
Count
Source
221
5.83k
  getClausesOfKind() const {
222
5.83k
    return getClausesOfKind<SpecificClause>(clauses());
223
5.83k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPOrderClause>() const
Line
Count
Source
221
10.6k
  getClausesOfKind() const {
222
10.6k
    return getClausesOfKind<SpecificClause>(clauses());
223
10.6k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPScheduleClause>() const
Line
Count
Source
221
4.96k
  getClausesOfKind() const {
222
4.96k
    return getClausesOfKind<SpecificClause>(clauses());
223
4.96k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPCopyprivateClause>() const
Line
Count
Source
221
55
  getClausesOfKind() const {
222
55
    return getClausesOfKind<SpecificClause>(clauses());
223
55
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFinalClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFinalClause>() const
Line
Count
Source
221
399
  getClausesOfKind() const {
222
399
    return getClausesOfKind<SpecificClause>(clauses());
223
399
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPriorityClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPPriorityClause>() const
Line
Count
Source
221
399
  getClausesOfKind() const {
222
399
    return getClausesOfKind<SpecificClause>(clauses());
223
399
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPInReductionClause>() const
Line
Count
Source
221
399
  getClausesOfKind() const {
222
399
    return getClausesOfKind<SpecificClause>(clauses());
223
399
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUntiedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUntiedClause>() const
Line
Count
Source
221
175
  getClausesOfKind() const {
222
175
    return getClausesOfKind<SpecificClause>(clauses());
223
175
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPTaskReductionClause>() const
Line
Count
Source
221
26
  getClausesOfKind() const {
222
26
    return getClausesOfKind<SpecificClause>(clauses());
223
26
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFlushClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFlushClause>() const
Line
Count
Source
221
80
  getClausesOfKind() const {
222
80
    return getClausesOfKind<SpecificClause>(clauses());
223
80
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDepobjClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDepobjClause>() const
Line
Count
Source
221
14
  getClausesOfKind() const {
222
14
    return getClausesOfKind<SpecificClause>(clauses());
223
14
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDestroyClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDestroyClause>() const
Line
Count
Source
221
8
  getClausesOfKind() const {
222
8
    return getClausesOfKind<SpecificClause>(clauses());
223
8
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUpdateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUpdateClause>() const
Line
Count
Source
221
4
  getClausesOfKind() const {
222
4
    return getClausesOfKind<SpecificClause>(clauses());
223
4
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInclusiveClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPInclusiveClause>() const
Line
Count
Source
221
48
  getClausesOfKind() const {
222
48
    return getClausesOfKind<SpecificClause>(clauses());
223
48
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDistScheduleClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDistScheduleClause>() const
Line
Count
Source
221
4.21k
  getClausesOfKind() const {
222
4.21k
    return getClausesOfKind<SpecificClause>(clauses());
223
4.21k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSIMDClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSIMDClause>() const
Line
Count
Source
221
24
  getClausesOfKind() const {
222
24
    return getClausesOfKind<SpecificClause>(clauses());
223
24
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSeqCstClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSeqCstClause>() const
Line
Count
Source
221
452
  getClausesOfKind() const {
222
452
    return getClausesOfKind<SpecificClause>(clauses());
223
452
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcqRelClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAcqRelClause>() const
Line
Count
Source
221
420
  getClausesOfKind() const {
222
420
    return getClausesOfKind<SpecificClause>(clauses());
223
420
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcquireClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAcquireClause>() const
Line
Count
Source
221
418
  getClausesOfKind() const {
222
418
    return getClausesOfKind<SpecificClause>(clauses());
223
418
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReleaseClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPReleaseClause>() const
Line
Count
Source
221
414
  getClausesOfKind() const {
222
414
    return getClausesOfKind<SpecificClause>(clauses());
223
414
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPRelaxedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPRelaxedClause>() const
Line
Count
Source
221
408
  getClausesOfKind() const {
222
408
    return getClausesOfKind<SpecificClause>(clauses());
223
408
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNogroupClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNogroupClause>() const
Line
Count
Source
221
224
  getClausesOfKind() const {
222
224
    return getClausesOfKind<SpecificClause>(clauses());
223
224
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPGrainsizeClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPGrainsizeClause>() const
Line
Count
Source
221
224
  getClausesOfKind() const {
222
224
    return getClausesOfKind<SpecificClause>(clauses());
223
224
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTasksClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNumTasksClause>() const
Line
Count
Source
221
206
  getClausesOfKind() const {
222
206
    return getClausesOfKind<SpecificClause>(clauses());
223
206
  }
224
225
  /// Gets a single clause of the specified kind associated with the
226
  /// current directive iff there is only one clause of this kind (and assertion
227
  /// is fired if there is more than one clause is associated with the
228
  /// directive). Returns nullptr if no clause of this kind is associated with
229
  /// the directive.
230
  template <typename SpecificClause>
231
78.5k
  const SpecificClause *getSingleClause() const {
232
78.5k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
78.5k
234
78.5k
    if (Clauses.begin() != Clauses.end()) {
235
4.65k
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
4.65k
             "There are at least 2 clauses of the specified kind");
237
4.65k
      return *Clauses.begin();
238
4.65k
    }
239
73.9k
    return nullptr;
240
73.9k
  }
clang::OMPHintClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPHintClause>() const
Line
Count
Source
231
58
  const SpecificClause *getSingleClause() const {
232
58
    auto Clauses = getClausesOfKind<SpecificClause>();
233
58
234
58
    if (Clauses.begin() != Clauses.end()) {
235
7
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
7
             "There are at least 2 clauses of the specified kind");
237
7
      return *Clauses.begin();
238
7
    }
239
51
    return nullptr;
240
51
  }
clang::OMPDeviceClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDeviceClause>() const
Line
Count
Source
231
9.09k
  const SpecificClause *getSingleClause() const {
232
9.09k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
9.09k
234
9.09k
    if (Clauses.begin() != Clauses.end()) {
235
398
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
398
             "There are at least 2 clauses of the specified kind");
237
398
      return *Clauses.begin();
238
398
    }
239
8.69k
    return nullptr;
240
8.69k
  }
clang::OMPDetachClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDetachClause>() const
Line
Count
Source
231
707
  const SpecificClause *getSingleClause() const {
232
707
    auto Clauses = getClausesOfKind<SpecificClause>();
233
707
234
707
    if (Clauses.begin() != Clauses.end()) {
235
2
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
2
             "There are at least 2 clauses of the specified kind");
237
2
      return *Clauses.begin();
238
2
    }
239
705
    return nullptr;
240
705
  }
clang::OMPNumTeamsClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNumTeamsClause>() const
Line
Count
Source
231
5.54k
  const SpecificClause *getSingleClause() const {
232
5.54k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
5.54k
234
5.54k
    if (Clauses.begin() != Clauses.end()) {
235
603
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
603
             "There are at least 2 clauses of the specified kind");
237
603
      return *Clauses.begin();
238
603
    }
239
4.94k
    return nullptr;
240
4.94k
  }
clang::OMPThreadLimitClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPThreadLimitClause>() const
Line
Count
Source
231
5.48k
  const SpecificClause *getSingleClause() const {
232
5.48k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
5.48k
234
5.48k
    if (Clauses.begin() != Clauses.end()) {
235
495
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
495
             "There are at least 2 clauses of the specified kind");
237
495
      return *Clauses.begin();
238
495
    }
239
4.98k
    return nullptr;
240
4.98k
  }
clang::OMPNumThreadsClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNumThreadsClause>() const
Line
Count
Source
231
5.96k
  const SpecificClause *getSingleClause() const {
232
5.96k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
5.96k
234
5.96k
    if (Clauses.begin() != Clauses.end()) {
235
389
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
389
             "There are at least 2 clauses of the specified kind");
237
389
      return *Clauses.begin();
238
389
    }
239
5.57k
    return nullptr;
240
5.57k
  }
clang::OMPSimdlenClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSimdlenClause>() const
Line
Count
Source
231
8.29k
  const SpecificClause *getSingleClause() const {
232
8.29k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
8.29k
234
8.29k
    if (Clauses.begin() != Clauses.end()) {
235
252
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
252
             "There are at least 2 clauses of the specified kind");
237
252
      return *Clauses.begin();
238
252
    }
239
8.03k
    return nullptr;
240
8.03k
  }
clang::OMPSafelenClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSafelenClause>() const
Line
Count
Source
231
8.18k
  const SpecificClause *getSingleClause() const {
232
8.18k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
8.18k
234
8.18k
    if (Clauses.begin() != Clauses.end()) {
235
210
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
210
             "There are at least 2 clauses of the specified kind");
237
210
      return *Clauses.begin();
238
210
    }
239
7.97k
    return nullptr;
240
7.97k
  }
clang::OMPNowaitClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNowaitClause>() const
Line
Count
Source
231
1.29k
  const SpecificClause *getSingleClause() const {
232
1.29k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
1.29k
234
1.29k
    if (Clauses.begin() != Clauses.end()) {
235
30
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
30
             "There are at least 2 clauses of the specified kind");
237
30
      return *Clauses.begin();
238
30
    }
239
1.26k
    return nullptr;
240
1.26k
  }
clang::OMPProcBindClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPProcBindClause>() const
Line
Count
Source
231
5.83k
  const SpecificClause *getSingleClause() const {
232
5.83k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
5.83k
234
5.83k
    if (Clauses.begin() != Clauses.end()) {
235
114
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
114
             "There are at least 2 clauses of the specified kind");
237
114
      return *Clauses.begin();
238
114
    }
239
5.72k
    return nullptr;
240
5.72k
  }
clang::OMPIfClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPIfClause>() const
Line
Count
Source
231
502
  const SpecificClause *getSingleClause() const {
232
502
    auto Clauses = getClausesOfKind<SpecificClause>();
233
502
234
502
    if (Clauses.begin() != Clauses.end()) {
235
136
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
136
             "There are at least 2 clauses of the specified kind");
237
136
      return *Clauses.begin();
238
136
    }
239
366
    return nullptr;
240
366
  }
clang::OMPOrderClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPOrderClause>() const
Line
Count
Source
231
10.6k
  const SpecificClause *getSingleClause() const {
232
10.6k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
10.6k
234
10.6k
    if (Clauses.begin() != Clauses.end()) {
235
5
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
5
             "There are at least 2 clauses of the specified kind");
237
5
      return *Clauses.begin();
238
5
    }
239
10.6k
    return nullptr;
240
10.6k
  }
clang::OMPOrderedClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPOrderedClause>() const
Line
Count
Source
231
4.41k
  const SpecificClause *getSingleClause() const {
232
4.41k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
4.41k
234
4.41k
    if (Clauses.begin() != Clauses.end()) {
235
53
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
53
             "There are at least 2 clauses of the specified kind");
237
53
      return *Clauses.begin();
238
53
    }
239
4.36k
    return nullptr;
240
4.36k
  }
clang::OMPScheduleClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPScheduleClause>() const
Line
Count
Source
231
4.41k
  const SpecificClause *getSingleClause() const {
232
4.41k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
4.41k
234
4.41k
    if (Clauses.begin() != Clauses.end()) {
235
1.23k
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
1.23k
             "There are at least 2 clauses of the specified kind");
237
1.23k
      return *Clauses.begin();
238
1.23k
    }
239
3.18k
    return nullptr;
240
3.18k
  }
clang::OMPFinalClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPFinalClause>() const
Line
Count
Source
231
399
  const SpecificClause *getSingleClause() const {
232
399
    auto Clauses = getClausesOfKind<SpecificClause>();
233
399
234
399
    if (Clauses.begin() != Clauses.end()) {
235
22
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
22
             "There are at least 2 clauses of the specified kind");
237
22
      return *Clauses.begin();
238
22
    }
239
377
    return nullptr;
240
377
  }
clang::OMPPriorityClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPPriorityClause>() const
Line
Count
Source
231
399
  const SpecificClause *getSingleClause() const {
232
399
    auto Clauses = getClausesOfKind<SpecificClause>();
233
399
234
399
    if (Clauses.begin() != Clauses.end()) {
235
22
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
22
             "There are at least 2 clauses of the specified kind");
237
22
      return *Clauses.begin();
238
22
    }
239
377
    return nullptr;
240
377
  }
clang::OMPUntiedClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPUntiedClause>() const
Line
Count
Source
231
175
  const SpecificClause *getSingleClause() const {
232
175
    auto Clauses = getClausesOfKind<SpecificClause>();
233
175
234
175
    if (Clauses.begin() != Clauses.end()) {
235
16
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
16
             "There are at least 2 clauses of the specified kind");
237
16
      return *Clauses.begin();
238
16
    }
239
159
    return nullptr;
240
159
  }
clang::OMPFlushClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPFlushClause>() const
Line
Count
Source
231
80
  const SpecificClause *getSingleClause() const {
232
80
    auto Clauses = getClausesOfKind<SpecificClause>();
233
80
234
80
    if (Clauses.begin() != Clauses.end()) {
235
16
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
16
             "There are at least 2 clauses of the specified kind");
237
16
      return *Clauses.begin();
238
16
    }
239
64
    return nullptr;
240
64
  }
clang::OMPDepobjClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDepobjClause>() const
Line
Count
Source
231
14
  const SpecificClause *getSingleClause() const {
232
14
    auto Clauses = getClausesOfKind<SpecificClause>();
233
14
234
14
    if (Clauses.begin() != Clauses.end()) {
235
14
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
14
             "There are at least 2 clauses of the specified kind");
237
14
      return *Clauses.begin();
238
14
    }
239
0
    return nullptr;
240
0
  }
clang::OMPDependClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDependClause>() const
Line
Count
Source
231
14
  const SpecificClause *getSingleClause() const {
232
14
    auto Clauses = getClausesOfKind<SpecificClause>();
233
14
234
14
    if (Clauses.begin() != Clauses.end()) {
235
6
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
6
             "There are at least 2 clauses of the specified kind");
237
6
      return *Clauses.begin();
238
6
    }
239
8
    return nullptr;
240
8
  }
clang::OMPDestroyClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDestroyClause>() const
Line
Count
Source
231
8
  const SpecificClause *getSingleClause() const {
232
8
    auto Clauses = getClausesOfKind<SpecificClause>();
233
8
234
8
    if (Clauses.begin() != Clauses.end()) {
235
4
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
4
             "There are at least 2 clauses of the specified kind");
237
4
      return *Clauses.begin();
238
4
    }
239
4
    return nullptr;
240
4
  }
clang::OMPUpdateClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPUpdateClause>() const
Line
Count
Source
231
4
  const SpecificClause *getSingleClause() const {
232
4
    auto Clauses = getClausesOfKind<SpecificClause>();
233
4
234
4
    if (Clauses.begin() != Clauses.end()) {
235
4
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
4
             "There are at least 2 clauses of the specified kind");
237
4
      return *Clauses.begin();
238
4
    }
239
0
    return nullptr;
240
0
  }
clang::OMPDistScheduleClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDistScheduleClause>() const
Line
Count
Source
231
4.21k
  const SpecificClause *getSingleClause() const {
232
4.21k
    auto Clauses = getClausesOfKind<SpecificClause>();
233
4.21k
234
4.21k
    if (Clauses.begin() != Clauses.end()) {
235
472
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
472
             "There are at least 2 clauses of the specified kind");
237
472
      return *Clauses.begin();
238
472
    }
239
3.74k
    return nullptr;
240
3.74k
  }
clang::OMPSIMDClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSIMDClause>() const
Line
Count
Source
231
24
  const SpecificClause *getSingleClause() const {
232
24
    auto Clauses = getClausesOfKind<SpecificClause>();
233
24
234
24
    if (Clauses.begin() != Clauses.end()) {
235
8
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
8
             "There are at least 2 clauses of the specified kind");
237
8
      return *Clauses.begin();
238
8
    }
239
16
    return nullptr;
240
16
  }
clang::OMPSeqCstClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSeqCstClause>() const
Line
Count
Source
231
452
  const SpecificClause *getSingleClause() const {
232
452
    auto Clauses = getClausesOfKind<SpecificClause>();
233
452
234
452
    if (Clauses.begin() != Clauses.end()) {
235
32
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
32
             "There are at least 2 clauses of the specified kind");
237
32
      return *Clauses.begin();
238
32
    }
239
420
    return nullptr;
240
420
  }
clang::OMPAcqRelClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPAcqRelClause>() const
Line
Count
Source
231
420
  const SpecificClause *getSingleClause() const {
232
420
    auto Clauses = getClausesOfKind<SpecificClause>();
233
420
234
420
    if (Clauses.begin() != Clauses.end()) {
235
2
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
2
             "There are at least 2 clauses of the specified kind");
237
2
      return *Clauses.begin();
238
2
    }
239
418
    return nullptr;
240
418
  }
clang::OMPAcquireClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPAcquireClause>() const
Line
Count
Source
231
418
  const SpecificClause *getSingleClause() const {
232
418
    auto Clauses = getClausesOfKind<SpecificClause>();
233
418
234
418
    if (Clauses.begin() != Clauses.end()) {
235
4
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
4
             "There are at least 2 clauses of the specified kind");
237
4
      return *Clauses.begin();
238
4
    }
239
414
    return nullptr;
240
414
  }
clang::OMPReleaseClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPReleaseClause>() const
Line
Count
Source
231
414
  const SpecificClause *getSingleClause() const {
232
414
    auto Clauses = getClausesOfKind<SpecificClause>();
233
414
234
414
    if (Clauses.begin() != Clauses.end()) {
235
6
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
6
             "There are at least 2 clauses of the specified kind");
237
6
      return *Clauses.begin();
238
6
    }
239
408
    return nullptr;
240
408
  }
clang::OMPRelaxedClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPRelaxedClause>() const
Line
Count
Source
231
408
  const SpecificClause *getSingleClause() const {
232
408
    auto Clauses = getClausesOfKind<SpecificClause>();
233
408
234
408
    if (Clauses.begin() != Clauses.end()) {
235
18
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
18
             "There are at least 2 clauses of the specified kind");
237
18
      return *Clauses.begin();
238
18
    }
239
390
    return nullptr;
240
390
  }
clang::OMPNogroupClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNogroupClause>() const
Line
Count
Source
231
224
  const SpecificClause *getSingleClause() const {
232
224
    auto Clauses = getClausesOfKind<SpecificClause>();
233
224
234
224
    if (Clauses.begin() != Clauses.end()) {
235
18
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
18
             "There are at least 2 clauses of the specified kind");
237
18
      return *Clauses.begin();
238
18
    }
239
206
    return nullptr;
240
206
  }
clang::OMPGrainsizeClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPGrainsizeClause>() const
Line
Count
Source
231
224
  const SpecificClause *getSingleClause() const {
232
224
    auto Clauses = getClausesOfKind<SpecificClause>();
233
224
234
224
    if (Clauses.begin() != Clauses.end()) {
235
18
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
18
             "There are at least 2 clauses of the specified kind");
237
18
      return *Clauses.begin();
238
18
    }
239
206
    return nullptr;
240
206
  }
clang::OMPNumTasksClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNumTasksClause>() const
Line
Count
Source
231
206
  const SpecificClause *getSingleClause() const {
232
206
    auto Clauses = getClausesOfKind<SpecificClause>();
233
206
234
206
    if (Clauses.begin() != Clauses.end()) {
235
36
      assert(std::next(Clauses.begin()) == Clauses.end() &&
236
36
             "There are at least 2 clauses of the specified kind");
237
36
      return *Clauses.begin();
238
36
    }
239
170
    return nullptr;
240
170
  }
241
242
  /// Returns true if the current directive has one or more clauses of a
243
  /// specific kind.
244
  template <typename SpecificClause>
245
53.5k
  bool hasClausesOfKind() const {
246
53.5k
    auto Clauses = getClausesOfKind<SpecificClause>();
247
53.5k
    return Clauses.begin() != Clauses.end();
248
53.5k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPDependClause>() const
Line
Count
Source
245
16.8k
  bool hasClausesOfKind() const {
246
16.8k
    auto Clauses = getClausesOfKind<SpecificClause>();
247
16.8k
    return Clauses.begin() != Clauses.end();
248
16.8k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPDetachClause>() const
Line
Count
Source
245
707
  bool hasClausesOfKind() const {
246
707
    auto Clauses = getClausesOfKind<SpecificClause>();
247
707
    return Clauses.begin() != Clauses.end();
248
707
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPNowaitClause>() const
Line
Count
Source
245
9.27k
  bool hasClausesOfKind() const {
246
9.27k
    auto Clauses = getClausesOfKind<SpecificClause>();
247
9.27k
    return Clauses.begin() != Clauses.end();
248
9.27k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPAffinityClause>() const
Line
Count
Source
245
707
  bool hasClausesOfKind() const {
246
707
    auto Clauses = getClausesOfKind<SpecificClause>();
247
707
    return Clauses.begin() != Clauses.end();
248
707
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPNumTeamsClause>() const
Line
Count
Source
245
3.68k
  bool hasClausesOfKind() const {
246
3.68k
    auto Clauses = getClausesOfKind<SpecificClause>();
247
3.68k
    return Clauses.begin() != Clauses.end();
248
3.68k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPThreadLimitClause>() const
Line
Count
Source
245
3.58k
  bool hasClausesOfKind() const {
246
3.58k
    auto Clauses = getClausesOfKind<SpecificClause>();
247
3.58k
    return Clauses.begin() != Clauses.end();
248
3.58k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPIfClause>() const
Line
Count
Source
245
2.64k
  bool hasClausesOfKind() const {
246
2.64k
    auto Clauses = getClausesOfKind<SpecificClause>();
247
2.64k
    return Clauses.begin() != Clauses.end();
248
2.64k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPNumThreadsClause>() const
Line
Count
Source
245
2.60k
  bool hasClausesOfKind() const {
246
2.60k
    auto Clauses = getClausesOfKind<SpecificClause>();
247
2.60k
    return Clauses.begin() != Clauses.end();
248
2.60k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPNontemporalClause>() const
Line
Count
Source
245
12.7k
  bool hasClausesOfKind() const {
246
12.7k
    auto Clauses = getClausesOfKind<SpecificClause>();
247
12.7k
    return Clauses.begin() != Clauses.end();
248
12.7k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPOrderedClause>() const
Line
Count
Source
245
358
  bool hasClausesOfKind() const {
246
358
    auto Clauses = getClausesOfKind<SpecificClause>();
247
358
    return Clauses.begin() != Clauses.end();
248
358
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPScheduleClause>() const
Line
Count
Source
245
355
  bool hasClausesOfKind() const {
246
355
    auto Clauses = getClausesOfKind<SpecificClause>();
247
355
    return Clauses.begin() != Clauses.end();
248
355
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPInclusiveClause>() const
Line
Count
Source
245
48
  bool hasClausesOfKind() const {
246
48
    auto Clauses = getClausesOfKind<SpecificClause>();
247
48
    return Clauses.begin() != Clauses.end();
248
48
  }
249
250
  /// Returns starting location of directive kind.
251
412k
  SourceLocation getBeginLoc() const { return StartLoc; }
252
  /// Returns ending location of directive.
253
167k
  SourceLocation getEndLoc() const { return EndLoc; }
254
255
  /// Set starting location of directive kind.
256
  ///
257
  /// \param Loc New starting location of directive.
258
  ///
259
15.8k
  void setLocStart(SourceLocation Loc) { StartLoc = Loc; }
260
  /// Set ending location of directive.
261
  ///
262
  /// \param Loc New ending location of directive.
263
  ///
264
15.8k
  void setLocEnd(SourceLocation Loc) { EndLoc = Loc; }
265
266
  /// Get number of clauses.
267
0
  unsigned getNumClauses() const {
268
0
    if (!Data)
269
0
      return 0;
270
0
    return Data->getNumClauses();
271
0
  }
272
273
  /// Returns specified clause.
274
  ///
275
  /// \param I Number of clause.
276
  ///
277
0
  OMPClause *getClause(unsigned I) const { return clauses()[I]; }
278
279
  /// Returns true if directive has associated statement.
280
813k
  bool hasAssociatedStmt() const { return Data && 
Data->hasAssociatedStmt()812k
; }
281
282
  /// Returns statement associated with the directive.
283
27.1k
  const Stmt *getAssociatedStmt() const {
284
27.1k
    return const_cast<OMPExecutableDirective *>(this)->getAssociatedStmt();
285
27.1k
  }
286
198k
  Stmt *getAssociatedStmt() {
287
198k
    assert(hasAssociatedStmt() &&
288
198k
           "Expected directive with the associated statement.");
289
198k
    return Data->getAssociatedStmt();
290
198k
  }
291
292
  /// Returns the captured statement associated with the
293
  /// component region within the (combined) directive.
294
  ///
295
  /// \param RegionKind Component region kind.
296
78.1k
  const CapturedStmt *getCapturedStmt(OpenMPDirectiveKind RegionKind) const {
297
78.1k
    assert(hasAssociatedStmt() &&
298
78.1k
           "Expected directive with the associated statement.");
299
78.1k
    SmallVector<OpenMPDirectiveKind, 4> CaptureRegions;
300
78.1k
    getOpenMPCaptureRegions(CaptureRegions, getDirectiveKind());
301
78.1k
    return Data->getCapturedStmt(RegionKind, CaptureRegions);
302
78.1k
  }
303
304
  /// Get innermost captured statement for the construct.
305
263k
  CapturedStmt *getInnermostCapturedStmt() {
306
263k
    assert(hasAssociatedStmt() &&
307
263k
           "Expected directive with the associated statement.");
308
263k
    SmallVector<OpenMPDirectiveKind, 4> CaptureRegions;
309
263k
    getOpenMPCaptureRegions(CaptureRegions, getDirectiveKind());
310
263k
    return Data->getInnermostCapturedStmt(CaptureRegions);
311
263k
  }
312
313
69.1k
  const CapturedStmt *getInnermostCapturedStmt() const {
314
69.1k
    return const_cast<OMPExecutableDirective *>(this)
315
69.1k
        ->getInnermostCapturedStmt();
316
69.1k
  }
317
318
5.46M
  OpenMPDirectiveKind getDirectiveKind() const { return Kind; }
319
320
2.84M
  static bool classof(const Stmt *S) {
321
2.84M
    return S->getStmtClass() >= firstOMPExecutableDirectiveConstant &&
322
2.61M
           S->getStmtClass() <= lastOMPExecutableDirectiveConstant;
323
2.84M
  }
324
325
172k
  child_range children() {
326
172k
    if (!Data)
327
1.28k
      return child_range(child_iterator(), child_iterator());
328
171k
    return Data->getAssociatedStmtAsRange();
329
171k
  }
330
331
0
  const_child_range children() const {
332
0
    return const_cast<OMPExecutableDirective *>(this)->children();
333
0
  }
334
335
1.62M
  ArrayRef<OMPClause *> clauses() const {
336
1.62M
    if (!Data)
337
6.27k
      return llvm::None;
338
1.62M
    return Data->getClauses();
339
1.62M
  }
340
341
  /// Returns whether or not this is a Standalone directive.
342
  ///
343
  /// Stand-alone directives are executable directives
344
  /// that have no associated user code.
345
  bool isStandaloneDirective() const;
346
347
  /// Returns the AST node representing OpenMP structured-block of this
348
  /// OpenMP executable directive,
349
  /// Prerequisite: Executable Directive must not be Standalone directive.
350
84
  const Stmt *getStructuredBlock() const {
351
84
    return const_cast<OMPExecutableDirective *>(this)->getStructuredBlock();
352
84
  }
353
  Stmt *getStructuredBlock();
354
355
128
  const Stmt *getRawStmt() const {
356
128
    return const_cast<OMPExecutableDirective *>(this)->getRawStmt();
357
128
  }
358
33.4k
  Stmt *getRawStmt() {
359
33.4k
    assert(hasAssociatedStmt() &&
360
33.4k
           "Expected directive with the associated statement.");
361
33.4k
    return Data->getRawStmt();
362
33.4k
  }
363
};
364
365
/// This represents '#pragma omp parallel' directive.
366
///
367
/// \code
368
/// #pragma omp parallel private(a,b) reduction(+: c,d)
369
/// \endcode
370
/// In this example directive '#pragma omp parallel' has clauses 'private'
371
/// with the variables 'a' and 'b' and 'reduction' with operator '+' and
372
/// variables 'c' and 'd'.
373
///
374
class OMPParallelDirective : public OMPExecutableDirective {
375
  friend class ASTStmtReader;
376
  friend class OMPExecutableDirective;
377
  /// true if the construct has inner cancel directive.
378
  bool HasCancel = false;
379
380
  /// Build directive with the given start and end location.
381
  ///
382
  /// \param StartLoc Starting location of the directive (directive keyword).
383
  /// \param EndLoc Ending Location of the directive.
384
  ///
385
  OMPParallelDirective(SourceLocation StartLoc, SourceLocation EndLoc)
386
      : OMPExecutableDirective(OMPParallelDirectiveClass,
387
23.6k
                               llvm::omp::OMPD_parallel, StartLoc, EndLoc) {}
388
389
  /// Build an empty directive.
390
  ///
391
  explicit OMPParallelDirective()
392
      : OMPExecutableDirective(OMPParallelDirectiveClass,
393
                               llvm::omp::OMPD_parallel, SourceLocation(),
394
649
                               SourceLocation()) {}
395
396
  /// Sets special task reduction descriptor.
397
23.6k
  void setTaskReductionRefExpr(Expr *E) { Data->getChildren()[0] = E; }
398
399
  /// Set cancel state.
400
24.2k
  void setHasCancel(bool Has) { HasCancel = Has; }
401
402
public:
403
  /// Creates directive with a list of \a Clauses.
404
  ///
405
  /// \param C AST context.
406
  /// \param StartLoc Starting location of the directive kind.
407
  /// \param EndLoc Ending Location of the directive.
408
  /// \param Clauses List of clauses.
409
  /// \param AssociatedStmt Statement associated with the directive.
410
  /// \param TaskRedRef Task reduction special reference expression to handle
411
  /// taskgroup descriptor.
412
  /// \param HasCancel true if this directive has inner cancel directive.
413
  ///
414
  static OMPParallelDirective *
415
  Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
416
         ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *TaskRedRef,
417
         bool HasCancel);
418
419
  /// Creates an empty directive with the place for \a N clauses.
420
  ///
421
  /// \param C AST context.
422
  /// \param NumClauses Number of clauses.
423
  ///
424
  static OMPParallelDirective *CreateEmpty(const ASTContext &C,
425
                                           unsigned NumClauses, EmptyShell);
426
427
  /// Returns special task reduction reference expression.
428
2
  Expr *getTaskReductionRefExpr() {
429
2
    return cast_or_null<Expr>(Data->getChildren()[0]);
430
2
  }
431
2
  const Expr *getTaskReductionRefExpr() const {
432
2
    return const_cast<OMPParallelDirective *>(this)->getTaskReductionRefExpr();
433
2
  }
434
435
  /// Return true if current directive has inner cancel directive.
436
1.58k
  bool hasCancel() const { return HasCancel; }
437
438
22.4k
  static bool classof(const Stmt *T) {
439
22.4k
    return T->getStmtClass() == OMPParallelDirectiveClass;
440
22.4k
  }
441
};
442
443
/// This is a common base class for loop directives ('omp simd', 'omp
444
/// for', 'omp for simd' etc.). It is responsible for the loop code generation.
445
///
446
class OMPLoopDirective : public OMPExecutableDirective {
447
  friend class ASTStmtReader;
448
  /// Number of collapsed loops as specified by 'collapse' clause.
449
  unsigned CollapsedNum = 0;
450
451
  /// Offsets to the stored exprs.
452
  /// This enumeration contains offsets to all the pointers to children
453
  /// expressions stored in OMPLoopDirective.
454
  /// The first 9 children are necessary for all the loop directives,
455
  /// the next 8 are specific to the worksharing ones, and the next 11 are
456
  /// used for combined constructs containing two pragmas associated to loops.
457
  /// After the fixed children, three arrays of length CollapsedNum are
458
  /// allocated: loop counters, their updates and final values.
459
  /// PrevLowerBound and PrevUpperBound are used to communicate blocking
460
  /// information in composite constructs which require loop blocking
461
  /// DistInc is used to generate the increment expression for the distribute
462
  /// loop when combined with a further nested loop
463
  /// PrevEnsureUpperBound is used as the EnsureUpperBound expression for the
464
  /// for loop when combined with a previous distribute loop in the same pragma
465
  /// (e.g. 'distribute parallel for')
466
  ///
467
  enum {
468
    IterationVariableOffset = 0,
469
    LastIterationOffset = 1,
470
    CalcLastIterationOffset = 2,
471
    PreConditionOffset = 3,
472
    CondOffset = 4,
473
    InitOffset = 5,
474
    IncOffset = 6,
475
    PreInitsOffset = 7,
476
    // The '...End' enumerators do not correspond to child expressions - they
477
    // specify the offset to the end (and start of the following counters/
478
    // updates/finals/dependent_counters/dependent_inits/finals_conditions
479
    // arrays).
480
    DefaultEnd = 8,
481
    // The following 8 exprs are used by worksharing and distribute loops only.
482
    IsLastIterVariableOffset = 8,
483
    LowerBoundVariableOffset = 9,
484
    UpperBoundVariableOffset = 10,
485
    StrideVariableOffset = 11,
486
    EnsureUpperBoundOffset = 12,
487
    NextLowerBoundOffset = 13,
488
    NextUpperBoundOffset = 14,
489
    NumIterationsOffset = 15,
490
    // Offset to the end for worksharing loop directives.
491
    WorksharingEnd = 16,
492
    PrevLowerBoundVariableOffset = 16,
493
    PrevUpperBoundVariableOffset = 17,
494
    DistIncOffset = 18,
495
    PrevEnsureUpperBoundOffset = 19,
496
    CombinedLowerBoundVariableOffset = 20,
497
    CombinedUpperBoundVariableOffset = 21,
498
    CombinedEnsureUpperBoundOffset = 22,
499
    CombinedInitOffset = 23,
500
    CombinedConditionOffset = 24,
501
    CombinedNextLowerBoundOffset = 25,
502
    CombinedNextUpperBoundOffset = 26,
503
    CombinedDistConditionOffset = 27,
504
    CombinedParForInDistConditionOffset = 28,
505
    // Offset to the end (and start of the following
506
    // counters/updates/finals/dependent_counters/dependent_inits/finals_conditions
507
    // arrays) for combined distribute loop directives.
508
    CombinedDistributeEnd = 29,
509
  };
510
511
  /// Get the counters storage.
512
195k
  MutableArrayRef<Expr *> getCounters() {
513
195k
    auto **Storage = reinterpret_cast<Expr **>(
514
195k
        &Data->getChildren()[getArraysOffset(getDirectiveKind())]);
515
195k
    return llvm::makeMutableArrayRef(Storage, CollapsedNum);
516
195k
  }
517
518
  /// Get the private counters storage.
519
161k
  MutableArrayRef<Expr *> getPrivateCounters() {
520
161k
    auto **Storage = reinterpret_cast<Expr **>(
521
161k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
522
161k
                             CollapsedNum]);
523
161k
    return llvm::makeMutableArrayRef(Storage, CollapsedNum);
524
161k
  }
525
526
  /// Get the updates storage.
527
140k
  MutableArrayRef<Expr *> getInits() {
528
140k
    auto **Storage = reinterpret_cast<Expr **>(
529
140k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
530
140k
                             2 * CollapsedNum]);
531
140k
    return llvm::makeMutableArrayRef(Storage, CollapsedNum);
532
140k
  }
533
534
  /// Get the updates storage.
535
148k
  MutableArrayRef<Expr *> getUpdates() {
536
148k
    auto **Storage = reinterpret_cast<Expr **>(
537
148k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
538
148k
                             3 * CollapsedNum]);
539
148k
    return llvm::makeMutableArrayRef(Storage, CollapsedNum);
540
148k
  }
541
542
  /// Get the final counter updates storage.
543
146k
  MutableArrayRef<Expr *> getFinals() {
544
146k
    auto **Storage = reinterpret_cast<Expr **>(
545
146k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
546
146k
                             4 * CollapsedNum]);
547
146k
    return llvm::makeMutableArrayRef(Storage, CollapsedNum);
548
146k
  }
549
550
  /// Get the dependent counters storage.
551
140k
  MutableArrayRef<Expr *> getDependentCounters() {
552
140k
    auto **Storage = reinterpret_cast<Expr **>(
553
140k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
554
140k
                             5 * CollapsedNum]);
555
140k
    return llvm::makeMutableArrayRef(Storage, CollapsedNum);
556
140k
  }
557
558
  /// Get the dependent inits storage.
559
140k
  MutableArrayRef<Expr *> getDependentInits() {
560
140k
    auto **Storage = reinterpret_cast<Expr **>(
561
140k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
562
140k
                             6 * CollapsedNum]);
563
140k
    return llvm::makeMutableArrayRef(Storage, CollapsedNum);
564
140k
  }
565
566
  /// Get the finals conditions storage.
567
148k
  MutableArrayRef<Expr *> getFinalsConditions() {
568
148k
    auto **Storage = reinterpret_cast<Expr **>(
569
148k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
570
148k
                             7 * CollapsedNum]);
571
148k
    return llvm::makeMutableArrayRef(Storage, CollapsedNum);
572
148k
  }
573
574
protected:
575
  /// Build instance of loop directive of class \a Kind.
576
  ///
577
  /// \param SC Statement class.
578
  /// \param Kind Kind of OpenMP directive.
579
  /// \param StartLoc Starting location of the directive (directive keyword).
580
  /// \param EndLoc Ending location of the directive.
581
  /// \param CollapsedNum Number of collapsed loops from 'collapse' clause.
582
  ///
583
  OMPLoopDirective(StmtClass SC, OpenMPDirectiveKind Kind,
584
                   SourceLocation StartLoc, SourceLocation EndLoc,
585
                   unsigned CollapsedNum)
586
      : OMPExecutableDirective(SC, Kind, StartLoc, EndLoc),
587
143k
        CollapsedNum(CollapsedNum) {}
588
589
  /// Offset to the start of children expression arrays.
590
1.39M
  static unsigned getArraysOffset(OpenMPDirectiveKind Kind) {
591
1.39M
    if (isOpenMPLoopBoundSharingDirective(Kind))
592
390k
      return CombinedDistributeEnd;
593
1.00M
    if (isOpenMPWorksharingDirective(Kind) || 
isOpenMPTaskLoopDirective(Kind)635k
||
594
425k
        isOpenMPDistributeDirective(Kind))
595
871k
      return WorksharingEnd;
596
135k
    return DefaultEnd;
597
135k
  }
598
599
  /// Children number.
600
  static unsigned numLoopChildren(unsigned CollapsedNum,
601
177k
                                  OpenMPDirectiveKind Kind) {
602
177k
    return getArraysOffset(Kind) +
603
177k
           8 * CollapsedNum; // Counters, PrivateCounters, Inits,
604
                             // Updates, Finals, DependentCounters,
605
                             // DependentInits, FinalsConditions.
606
177k
  }
607
608
137k
  void setIterationVariable(Expr *IV) {
609
137k
    Data->getChildren()[IterationVariableOffset] = IV;
610
137k
  }
611
137k
  void setLastIteration(Expr *LI) {
612
137k
    Data->getChildren()[LastIterationOffset] = LI;
613
137k
  }
614
137k
  void setCalcLastIteration(Expr *CLI) {
615
137k
    Data->getChildren()[CalcLastIterationOffset] = CLI;
616
137k
  }
617
137k
  void setPreCond(Expr *PC) { Data->getChildren()[PreConditionOffset] = PC; }
618
137k
  void setCond(Expr *Cond) { Data->getChildren()[CondOffset] = Cond; }
619
137k
  void setInit(Expr *Init) { Data->getChildren()[InitOffset] = Init; }
620
137k
  void setInc(Expr *Inc) { Data->getChildren()[IncOffset] = Inc; }
621
137k
  void setPreInits(Stmt *PreInits) {
622
137k
    Data->getChildren()[PreInitsOffset] = PreInits;
623
137k
  }
624
124k
  void setIsLastIterVariable(Expr *IL) {
625
124k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
626
124k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
627
124k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
628
124k
           "expected worksharing loop directive");
629
124k
    Data->getChildren()[IsLastIterVariableOffset] = IL;
630
124k
  }
631
124k
  void setLowerBoundVariable(Expr *LB) {
632
124k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
633
124k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
634
124k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
635
124k
           "expected worksharing loop directive");
636
124k
    Data->getChildren()[LowerBoundVariableOffset] = LB;
637
124k
  }
638
124k
  void setUpperBoundVariable(Expr *UB) {
639
124k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
640
124k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
641
124k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
642
124k
           "expected worksharing loop directive");
643
124k
    Data->getChildren()[UpperBoundVariableOffset] = UB;
644
124k
  }
645
124k
  void setStrideVariable(Expr *ST) {
646
124k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
647
124k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
648
124k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
649
124k
           "expected worksharing loop directive");
650
124k
    Data->getChildren()[StrideVariableOffset] = ST;
651
124k
  }
652
124k
  void setEnsureUpperBound(Expr *EUB) {
653
124k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
654
124k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
655
124k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
656
124k
           "expected worksharing loop directive");
657
124k
    Data->getChildren()[EnsureUpperBoundOffset] = EUB;
658
124k
  }
659
124k
  void setNextLowerBound(Expr *NLB) {
660
124k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
661
124k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
662
124k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
663
124k
           "expected worksharing loop directive");
664
124k
    Data->getChildren()[NextLowerBoundOffset] = NLB;
665
124k
  }
666
124k
  void setNextUpperBound(Expr *NUB) {
667
124k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
668
124k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
669
124k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
670
124k
           "expected worksharing loop directive");
671
124k
    Data->getChildren()[NextUpperBoundOffset] = NUB;
672
124k
  }
673
124k
  void setNumIterations(Expr *NI) {
674
124k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
675
124k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
676
124k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
677
124k
           "expected worksharing loop directive");
678
124k
    Data->getChildren()[NumIterationsOffset] = NI;
679
124k
  }
680
35.5k
  void setPrevLowerBoundVariable(Expr *PrevLB) {
681
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
682
35.5k
           "expected loop bound sharing directive");
683
35.5k
    Data->getChildren()[PrevLowerBoundVariableOffset] = PrevLB;
684
35.5k
  }
685
35.5k
  void setPrevUpperBoundVariable(Expr *PrevUB) {
686
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
687
35.5k
           "expected loop bound sharing directive");
688
35.5k
    Data->getChildren()[PrevUpperBoundVariableOffset] = PrevUB;
689
35.5k
  }
690
35.5k
  void setDistInc(Expr *DistInc) {
691
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
692
35.5k
           "expected loop bound sharing directive");
693
35.5k
    Data->getChildren()[DistIncOffset] = DistInc;
694
35.5k
  }
695
35.5k
  void setPrevEnsureUpperBound(Expr *PrevEUB) {
696
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
697
35.5k
           "expected loop bound sharing directive");
698
35.5k
    Data->getChildren()[PrevEnsureUpperBoundOffset] = PrevEUB;
699
35.5k
  }
700
35.5k
  void setCombinedLowerBoundVariable(Expr *CombLB) {
701
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
702
35.5k
           "expected loop bound sharing directive");
703
35.5k
    Data->getChildren()[CombinedLowerBoundVariableOffset] = CombLB;
704
35.5k
  }
705
35.5k
  void setCombinedUpperBoundVariable(Expr *CombUB) {
706
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
707
35.5k
           "expected loop bound sharing directive");
708
35.5k
    Data->getChildren()[CombinedUpperBoundVariableOffset] = CombUB;
709
35.5k
  }
710
35.5k
  void setCombinedEnsureUpperBound(Expr *CombEUB) {
711
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
712
35.5k
           "expected loop bound sharing directive");
713
35.5k
    Data->getChildren()[CombinedEnsureUpperBoundOffset] = CombEUB;
714
35.5k
  }
715
35.5k
  void setCombinedInit(Expr *CombInit) {
716
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
717
35.5k
           "expected loop bound sharing directive");
718
35.5k
    Data->getChildren()[CombinedInitOffset] = CombInit;
719
35.5k
  }
720
35.5k
  void setCombinedCond(Expr *CombCond) {
721
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
722
35.5k
           "expected loop bound sharing directive");
723
35.5k
    Data->getChildren()[CombinedConditionOffset] = CombCond;
724
35.5k
  }
725
35.5k
  void setCombinedNextLowerBound(Expr *CombNLB) {
726
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
727
35.5k
           "expected loop bound sharing directive");
728
35.5k
    Data->getChildren()[CombinedNextLowerBoundOffset] = CombNLB;
729
35.5k
  }
730
35.5k
  void setCombinedNextUpperBound(Expr *CombNUB) {
731
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
732
35.5k
           "expected loop bound sharing directive");
733
35.5k
    Data->getChildren()[CombinedNextUpperBoundOffset] = CombNUB;
734
35.5k
  }
735
35.5k
  void setCombinedDistCond(Expr *CombDistCond) {
736
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
737
35.5k
           "expected loop bound distribute sharing directive");
738
35.5k
    Data->getChildren()[CombinedDistConditionOffset] = CombDistCond;
739
35.5k
  }
740
35.5k
  void setCombinedParForInDistCond(Expr *CombParForInDistCond) {
741
35.5k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
742
35.5k
           "expected loop bound distribute sharing directive");
743
35.5k
    Data->getChildren()[CombinedParForInDistConditionOffset] =
744
35.5k
        CombParForInDistCond;
745
35.5k
  }
746
  void setCounters(ArrayRef<Expr *> A);
747
  void setPrivateCounters(ArrayRef<Expr *> A);
748
  void setInits(ArrayRef<Expr *> A);
749
  void setUpdates(ArrayRef<Expr *> A);
750
  void setFinals(ArrayRef<Expr *> A);
751
  void setDependentCounters(ArrayRef<Expr *> A);
752
  void setDependentInits(ArrayRef<Expr *> A);
753
  void setFinalsConditions(ArrayRef<Expr *> A);
754
755
public:
756
  /// The expressions built to support OpenMP loops in combined/composite
757
  /// pragmas (e.g. pragma omp distribute parallel for)
758
  struct DistCombinedHelperExprs {
759
    /// DistributeLowerBound - used when composing 'omp distribute' with
760
    /// 'omp for' in a same construct.
761
    Expr *LB;
762
    /// DistributeUpperBound - used when composing 'omp distribute' with
763
    /// 'omp for' in a same construct.
764
    Expr *UB;
765
    /// DistributeEnsureUpperBound - used when composing 'omp distribute'
766
    ///  with 'omp for' in a same construct, EUB depends on DistUB
767
    Expr *EUB;
768
    /// Distribute loop iteration variable init used when composing 'omp
769
    /// distribute'
770
    ///  with 'omp for' in a same construct
771
    Expr *Init;
772
    /// Distribute Loop condition used when composing 'omp distribute'
773
    ///  with 'omp for' in a same construct
774
    Expr *Cond;
775
    /// Update of LowerBound for statically scheduled omp loops for
776
    /// outer loop in combined constructs (e.g. 'distribute parallel for')
777
    Expr *NLB;
778
    /// Update of UpperBound for statically scheduled omp loops for
779
    /// outer loop in combined constructs (e.g. 'distribute parallel for')
780
    Expr *NUB;
781
    /// Distribute Loop condition used when composing 'omp distribute'
782
    ///  with 'omp for' in a same construct when schedule is chunked.
783
    Expr *DistCond;
784
    /// 'omp parallel for' loop condition used when composed with
785
    /// 'omp distribute' in the same construct and when schedule is
786
    /// chunked and the chunk size is 1.
787
    Expr *ParForInDistCond;
788
  };
789
790
  /// The expressions built for the OpenMP loop CodeGen for the
791
  /// whole collapsed loop nest.
792
  struct HelperExprs {
793
    /// Loop iteration variable.
794
    Expr *IterationVarRef;
795
    /// Loop last iteration number.
796
    Expr *LastIteration;
797
    /// Loop number of iterations.
798
    Expr *NumIterations;
799
    /// Calculation of last iteration.
800
    Expr *CalcLastIteration;
801
    /// Loop pre-condition.
802
    Expr *PreCond;
803
    /// Loop condition.
804
    Expr *Cond;
805
    /// Loop iteration variable init.
806
    Expr *Init;
807
    /// Loop increment.
808
    Expr *Inc;
809
    /// IsLastIteration - local flag variable passed to runtime.
810
    Expr *IL;
811
    /// LowerBound - local variable passed to runtime.
812
    Expr *LB;
813
    /// UpperBound - local variable passed to runtime.
814
    Expr *UB;
815
    /// Stride - local variable passed to runtime.
816
    Expr *ST;
817
    /// EnsureUpperBound -- expression UB = min(UB, NumIterations).
818
    Expr *EUB;
819
    /// Update of LowerBound for statically scheduled 'omp for' loops.
820
    Expr *NLB;
821
    /// Update of UpperBound for statically scheduled 'omp for' loops.
822
    Expr *NUB;
823
    /// PreviousLowerBound - local variable passed to runtime in the
824
    /// enclosing schedule or null if that does not apply.
825
    Expr *PrevLB;
826
    /// PreviousUpperBound - local variable passed to runtime in the
827
    /// enclosing schedule or null if that does not apply.
828
    Expr *PrevUB;
829
    /// DistInc - increment expression for distribute loop when found
830
    /// combined with a further loop level (e.g. in 'distribute parallel for')
831
    /// expression IV = IV + ST
832
    Expr *DistInc;
833
    /// PrevEUB - expression similar to EUB but to be used when loop
834
    /// scheduling uses PrevLB and PrevUB (e.g.  in 'distribute parallel for'
835
    /// when ensuring that the UB is either the calculated UB by the runtime or
836
    /// the end of the assigned distribute chunk)
837
    /// expression UB = min (UB, PrevUB)
838
    Expr *PrevEUB;
839
    /// Counters Loop counters.
840
    SmallVector<Expr *, 4> Counters;
841
    /// PrivateCounters Loop counters.
842
    SmallVector<Expr *, 4> PrivateCounters;
843
    /// Expressions for loop counters inits for CodeGen.
844
    SmallVector<Expr *, 4> Inits;
845
    /// Expressions for loop counters update for CodeGen.
846
    SmallVector<Expr *, 4> Updates;
847
    /// Final loop counter values for GodeGen.
848
    SmallVector<Expr *, 4> Finals;
849
    /// List of counters required for the generation of the non-rectangular
850
    /// loops.
851
    SmallVector<Expr *, 4> DependentCounters;
852
    /// List of initializers required for the generation of the non-rectangular
853
    /// loops.
854
    SmallVector<Expr *, 4> DependentInits;
855
    /// List of final conditions required for the generation of the
856
    /// non-rectangular loops.
857
    SmallVector<Expr *, 4> FinalsConditions;
858
    /// Init statement for all captured expressions.
859
    Stmt *PreInits;
860
861
    /// Expressions used when combining OpenMP loop pragmas
862
    DistCombinedHelperExprs DistCombinedFields;
863
864
    /// Check if all the expressions are built (does not check the
865
    /// worksharing ones).
866
96.9k
    bool builtAll() {
867
96.9k
      return IterationVarRef != nullptr && LastIteration != nullptr &&
868
96.9k
             NumIterations != nullptr && PreCond != nullptr &&
869
96.9k
             Cond != nullptr && Init != nullptr && Inc != nullptr;
870
96.9k
    }
871
872
    /// Initialize all the fields to null.
873
    /// \param Size Number of elements in the
874
    /// counters/finals/updates/dependent_counters/dependent_inits/finals_conditions
875
    /// arrays.
876
138k
    void clear(unsigned Size) {
877
138k
      IterationVarRef = nullptr;
878
138k
      LastIteration = nullptr;
879
138k
      CalcLastIteration = nullptr;
880
138k
      PreCond = nullptr;
881
138k
      Cond = nullptr;
882
138k
      Init = nullptr;
883
138k
      Inc = nullptr;
884
138k
      IL = nullptr;
885
138k
      LB = nullptr;
886
138k
      UB = nullptr;
887
138k
      ST = nullptr;
888
138k
      EUB = nullptr;
889
138k
      NLB = nullptr;
890
138k
      NUB = nullptr;
891
138k
      NumIterations = nullptr;
892
138k
      PrevLB = nullptr;
893
138k
      PrevUB = nullptr;
894
138k
      DistInc = nullptr;
895
138k
      PrevEUB = nullptr;
896
138k
      Counters.resize(Size);
897
138k
      PrivateCounters.resize(Size);
898
138k
      Inits.resize(Size);
899
138k
      Updates.resize(Size);
900
138k
      Finals.resize(Size);
901
138k
      DependentCounters.resize(Size);
902
138k
      DependentInits.resize(Size);
903
138k
      FinalsConditions.resize(Size);
904
278k
      for (unsigned i = 0; i < Size; 
++i140k
) {
905
140k
        Counters[i] = nullptr;
906
140k
        PrivateCounters[i] = nullptr;
907
140k
        Inits[i] = nullptr;
908
140k
        Updates[i] = nullptr;
909
140k
        Finals[i] = nullptr;
910
140k
        DependentCounters[i] = nullptr;
911
140k
        DependentInits[i] = nullptr;
912
140k
        FinalsConditions[i] = nullptr;
913
140k
      }
914
138k
      PreInits = nullptr;
915
138k
      DistCombinedFields.LB = nullptr;
916
138k
      DistCombinedFields.UB = nullptr;
917
138k
      DistCombinedFields.EUB = nullptr;
918
138k
      DistCombinedFields.Init = nullptr;
919
138k
      DistCombinedFields.Cond = nullptr;
920
138k
      DistCombinedFields.NLB = nullptr;
921
138k
      DistCombinedFields.NUB = nullptr;
922
138k
      DistCombinedFields.DistCond = nullptr;
923
138k
      DistCombinedFields.ParForInDistCond = nullptr;
924
138k
    }
925
  };
926
927
  /// Get number of collapsed loops.
928
1.18M
  unsigned getCollapsedNumber() const { return CollapsedNum; }
929
930
30.7k
  Expr *getIterationVariable() const {
931
30.7k
    return cast<Expr>(Data->getChildren()[IterationVariableOffset]);
932
30.7k
  }
933
13.1k
  Expr *getLastIteration() const {
934
13.1k
    return cast<Expr>(Data->getChildren()[LastIterationOffset]);
935
13.1k
  }
936
0
  Expr *getCalcLastIteration() const {
937
0
    return cast<Expr>(Data->getChildren()[CalcLastIterationOffset]);
938
0
  }
939
15.3k
  Expr *getPreCond() const {
940
15.3k
    return cast<Expr>(Data->getChildren()[PreConditionOffset]);
941
15.3k
  }
942
10.2k
  Expr *getCond() const { return cast<Expr>(Data->getChildren()[CondOffset]); }
943
10.3k
  Expr *getInit() const { return cast<Expr>(Data->getChildren()[InitOffset]); }
944
10.3k
  Expr *getInc() const { return cast<Expr>(Data->getChildren()[IncOffset]); }
945
16.2k
  const Stmt *getPreInits() const {
946
16.2k
    return Data->getChildren()[PreInitsOffset];
947
16.2k
  }
948
0
  Stmt *getPreInits() { return Data->getChildren()[PreInitsOffset]; }
949
8.86k
  Expr *getIsLastIterVariable() const {
950
8.86k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
951
8.86k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
952
8.86k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
953
8.86k
           "expected worksharing loop directive");
954
8.86k
    return cast<Expr>(Data->getChildren()[IsLastIterVariableOffset]);
955
8.86k
  }
956
9.23k
  Expr *getLowerBoundVariable() const {
957
9.23k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
958
9.23k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
959
9.23k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
960
9.23k
           "expected worksharing loop directive");
961
9.23k
    return cast<Expr>(Data->getChildren()[LowerBoundVariableOffset]);
962
9.23k
  }
963
9.23k
  Expr *getUpperBoundVariable() const {
964
9.23k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
965
9.23k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
966
9.23k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
967
9.23k
           "expected worksharing loop directive");
968
9.23k
    return cast<Expr>(Data->getChildren()[UpperBoundVariableOffset]);
969
9.23k
  }
970
9.08k
  Expr *getStrideVariable() const {
971
9.08k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
972
9.08k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
973
9.08k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
974
9.08k
           "expected worksharing loop directive");
975
9.08k
    return cast<Expr>(Data->getChildren()[StrideVariableOffset]);
976
9.08k
  }
977
6.83k
  Expr *getEnsureUpperBound() const {
978
6.83k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
979
6.83k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
980
6.83k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
981
6.83k
           "expected worksharing loop directive");
982
6.83k
    return cast<Expr>(Data->getChildren()[EnsureUpperBoundOffset]);
983
6.83k
  }
984
1.21k
  Expr *getNextLowerBound() const {
985
1.21k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
986
1.21k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
987
1.21k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
988
1.21k
           "expected worksharing loop directive");
989
1.21k
    return cast<Expr>(Data->getChildren()[NextLowerBoundOffset]);
990
1.21k
  }
991
1.21k
  Expr *getNextUpperBound() const {
992
1.21k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
993
1.21k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
994
1.21k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
995
1.21k
           "expected worksharing loop directive");
996
1.21k
    return cast<Expr>(Data->getChildren()[NextUpperBoundOffset]);
997
1.21k
  }
998
3.06k
  Expr *getNumIterations() const {
999
3.06k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1000
3.06k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1001
3.06k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1002
3.06k
           "expected worksharing loop directive");
1003
3.06k
    return cast<Expr>(Data->getChildren()[NumIterationsOffset]);
1004
3.06k
  }
1005
10.0k
  Expr *getPrevLowerBoundVariable() const {
1006
10.0k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1007
10.0k
           "expected loop bound sharing directive");
1008
10.0k
    return cast<Expr>(Data->getChildren()[PrevLowerBoundVariableOffset]);
1009
10.0k
  }
1010
10.0k
  Expr *getPrevUpperBoundVariable() const {
1011
10.0k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1012
10.0k
           "expected loop bound sharing directive");
1013
10.0k
    return cast<Expr>(Data->getChildren()[PrevUpperBoundVariableOffset]);
1014
10.0k
  }
1015
2.73k
  Expr *getDistInc() const {
1016
2.73k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1017
2.73k
           "expected loop bound sharing directive");
1018
2.73k
    return cast<Expr>(Data->getChildren()[DistIncOffset]);
1019
2.73k
  }
1020
2.52k
  Expr *getPrevEnsureUpperBound() const {
1021
2.52k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1022
2.52k
           "expected loop bound sharing directive");
1023
2.52k
    return cast<Expr>(Data->getChildren()[PrevEnsureUpperBoundOffset]);
1024
2.52k
  }
1025
5.03k
  Expr *getCombinedLowerBoundVariable() const {
1026
5.03k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1027
5.03k
           "expected loop bound sharing directive");
1028
5.03k
    return cast<Expr>(Data->getChildren()[CombinedLowerBoundVariableOffset]);
1029
5.03k
  }
1030
5.03k
  Expr *getCombinedUpperBoundVariable() const {
1031
5.03k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1032
5.03k
           "expected loop bound sharing directive");
1033
5.03k
    return cast<Expr>(Data->getChildren()[CombinedUpperBoundVariableOffset]);
1034
5.03k
  }
1035
3.00k
  Expr *getCombinedEnsureUpperBound() const {
1036
3.00k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1037
3.00k
           "expected loop bound sharing directive");
1038
3.00k
    return cast<Expr>(Data->getChildren()[CombinedEnsureUpperBoundOffset]);
1039
3.00k
  }
1040
3.00k
  Expr *getCombinedInit() const {
1041
3.00k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1042
3.00k
           "expected loop bound sharing directive");
1043
3.00k
    return cast<Expr>(Data->getChildren()[CombinedInitOffset]);
1044
3.00k
  }
1045
2.51k
  Expr *getCombinedCond() const {
1046
2.51k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1047
2.51k
           "expected loop bound sharing directive");
1048
2.51k
    return cast<Expr>(Data->getChildren()[CombinedConditionOffset]);
1049
2.51k
  }
1050
491
  Expr *getCombinedNextLowerBound() const {
1051
491
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1052
491
           "expected loop bound sharing directive");
1053
491
    return cast<Expr>(Data->getChildren()[CombinedNextLowerBoundOffset]);
1054
491
  }
1055
491
  Expr *getCombinedNextUpperBound() const {
1056
491
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1057
491
           "expected loop bound sharing directive");
1058
491
    return cast<Expr>(Data->getChildren()[CombinedNextUpperBoundOffset]);
1059
491
  }
1060
488
  Expr *getCombinedDistCond() const {
1061
488
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1062
488
           "expected loop bound distribute sharing directive");
1063
488
    return cast<Expr>(Data->getChildren()[CombinedDistConditionOffset]);
1064
488
  }
1065
221
  Expr *getCombinedParForInDistCond() const {
1066
221
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1067
221
           "expected loop bound distribute sharing directive");
1068
221
    return cast<Expr>(Data->getChildren()[CombinedParForInDistConditionOffset]);
1069
221
  }
1070
  /// Try to find the next loop sub-statement in the specified statement \p
1071
  /// CurStmt.
1072
  /// \param TryImperfectlyNestedLoops true, if we need to try to look for the
1073
  /// imperfectly nested loop.
1074
  static Stmt *tryToFindNextInnerLoop(Stmt *CurStmt,
1075
                                      bool TryImperfectlyNestedLoops);
1076
  static const Stmt *tryToFindNextInnerLoop(const Stmt *CurStmt,
1077
27.9k
                                            bool TryImperfectlyNestedLoops) {
1078
27.9k
    return tryToFindNextInnerLoop(const_cast<Stmt *>(CurStmt),
1079
27.9k
                                  TryImperfectlyNestedLoops);
1080
27.9k
  }
1081
  Stmt *getBody();
1082
20
  const Stmt *getBody() const {
1083
20
    return const_cast<OMPLoopDirective *>(this)->getBody();
1084
20
  }
1085
1086
0
  ArrayRef<Expr *> counters() { return getCounters(); }
1087
1088
57.3k
  ArrayRef<Expr *> counters() const {
1089
57.3k
    return const_cast<OMPLoopDirective *>(this)->getCounters();
1090
57.3k
  }
1091
1092
0
  ArrayRef<Expr *> private_counters() { return getPrivateCounters(); }
1093
1094
23.4k
  ArrayRef<Expr *> private_counters() const {
1095
23.4k
    return const_cast<OMPLoopDirective *>(this)->getPrivateCounters();
1096
23.4k
  }
1097
1098
0
  ArrayRef<Expr *> inits() { return getInits(); }
1099
1100
2.41k
  ArrayRef<Expr *> inits() const {
1101
2.41k
    return const_cast<OMPLoopDirective *>(this)->getInits();
1102
2.41k
  }
1103
1104
0
  ArrayRef<Expr *> updates() { return getUpdates(); }
1105
1106
10.4k
  ArrayRef<Expr *> updates() const {
1107
10.4k
    return const_cast<OMPLoopDirective *>(this)->getUpdates();
1108
10.4k
  }
1109
1110
0
  ArrayRef<Expr *> finals() { return getFinals(); }
1111
1112
8.84k
  ArrayRef<Expr *> finals() const {
1113
8.84k
    return const_cast<OMPLoopDirective *>(this)->getFinals();
1114
8.84k
  }
1115
1116
0
  ArrayRef<Expr *> dependent_counters() { return getDependentCounters(); }
1117
1118
2.41k
  ArrayRef<Expr *> dependent_counters() const {
1119
2.41k
    return const_cast<OMPLoopDirective *>(this)->getDependentCounters();
1120
2.41k
  }
1121
1122
0
  ArrayRef<Expr *> dependent_inits() { return getDependentInits(); }
1123
1124
2.41k
  ArrayRef<Expr *> dependent_inits() const {
1125
2.41k
    return const_cast<OMPLoopDirective *>(this)->getDependentInits();
1126
2.41k
  }
1127
1128
0
  ArrayRef<Expr *> finals_conditions() { return getFinalsConditions(); }
1129
1130
10.4k
  ArrayRef<Expr *> finals_conditions() const {
1131
10.4k
    return const_cast<OMPLoopDirective *>(this)->getFinalsConditions();
1132
10.4k
  }
1133
1134
44.0k
  static bool classof(const Stmt *T) {
1135
44.0k
    return T->getStmtClass() == OMPSimdDirectiveClass ||
1136
43.2k
           T->getStmtClass() == OMPForDirectiveClass ||
1137
42.0k
           T->getStmtClass() == OMPForSimdDirectiveClass ||
1138
41.0k
           T->getStmtClass() == OMPParallelForDirectiveClass ||
1139
40.2k
           T->getStmtClass() == OMPParallelForSimdDirectiveClass ||
1140
39.6k
           T->getStmtClass() == OMPTaskLoopDirectiveClass ||
1141
39.5k
           T->getStmtClass() == OMPTaskLoopSimdDirectiveClass ||
1142
39.2k
           T->getStmtClass() == OMPMasterTaskLoopDirectiveClass ||
1143
39.1k
           T->getStmtClass() == OMPMasterTaskLoopSimdDirectiveClass ||
1144
38.8k
           T->getStmtClass() == OMPParallelMasterTaskLoopDirectiveClass ||
1145
38.7k
           T->getStmtClass() == OMPParallelMasterTaskLoopSimdDirectiveClass ||
1146
38.4k
           T->getStmtClass() == OMPDistributeDirectiveClass ||
1147
38.1k
           T->getStmtClass() == OMPTargetParallelForDirectiveClass ||
1148
36.1k
           T->getStmtClass() == OMPDistributeParallelForDirectiveClass ||
1149
34.1k
           T->getStmtClass() == OMPDistributeParallelForSimdDirectiveClass ||
1150
32.3k
           T->getStmtClass() == OMPDistributeSimdDirectiveClass ||
1151
31.6k
           T->getStmtClass() == OMPTargetParallelForSimdDirectiveClass ||
1152
29.5k
           T->getStmtClass() == OMPTargetSimdDirectiveClass ||
1153
27.7k
           T->getStmtClass() == OMPTeamsDistributeDirectiveClass ||
1154
27.2k
           T->getStmtClass() == OMPTeamsDistributeSimdDirectiveClass ||
1155
26.3k
           T->getStmtClass() ==
1156
26.3k
               OMPTeamsDistributeParallelForSimdDirectiveClass ||
1157
23.6k
           T->getStmtClass() == OMPTeamsDistributeParallelForDirectiveClass ||
1158
21.8k
           T->getStmtClass() ==
1159
21.8k
               OMPTargetTeamsDistributeParallelForDirectiveClass ||
1160
19.2k
           T->getStmtClass() ==
1161
19.2k
               OMPTargetTeamsDistributeParallelForSimdDirectiveClass ||
1162
14.1k
           T->getStmtClass() == OMPTargetTeamsDistributeDirectiveClass ||
1163
12.3k
           T->getStmtClass() == OMPTargetTeamsDistributeSimdDirectiveClass;
1164
44.0k
  }
1165
};
1166
1167
/// This represents '#pragma omp simd' directive.
1168
///
1169
/// \code
1170
/// #pragma omp simd private(a,b) linear(i,j:s) reduction(+:c,d)
1171
/// \endcode
1172
/// In this example directive '#pragma omp simd' has clauses 'private'
1173
/// with the variables 'a' and 'b', 'linear' with variables 'i', 'j' and
1174
/// linear step 's', 'reduction' with operator '+' and variables 'c' and 'd'.
1175
///
1176
class OMPSimdDirective : public OMPLoopDirective {
1177
  friend class ASTStmtReader;
1178
  friend class OMPExecutableDirective;
1179
  /// Build directive with the given start and end location.
1180
  ///
1181
  /// \param StartLoc Starting location of the directive kind.
1182
  /// \param EndLoc Ending location of the directive.
1183
  /// \param CollapsedNum Number of collapsed nested loops.
1184
  ///
1185
  OMPSimdDirective(SourceLocation StartLoc, SourceLocation EndLoc,
1186
                   unsigned CollapsedNum)
1187
      : OMPLoopDirective(OMPSimdDirectiveClass, llvm::omp::OMPD_simd, StartLoc,
1188
5.71k
                         EndLoc, CollapsedNum) {}
1189
1190
  /// Build an empty directive.
1191
  ///
1192
  /// \param CollapsedNum Number of collapsed nested loops.
1193
  ///
1194
  explicit OMPSimdDirective(unsigned CollapsedNum)
1195
      : OMPLoopDirective(OMPSimdDirectiveClass, llvm::omp::OMPD_simd,
1196
159
                         SourceLocation(), SourceLocation(), CollapsedNum) {}
1197
1198
public:
1199
  /// Creates directive with a list of \a Clauses.
1200
  ///
1201
  /// \param C AST context.
1202
  /// \param StartLoc Starting location of the directive kind.
1203
  /// \param EndLoc Ending Location of the directive.
1204
  /// \param CollapsedNum Number of collapsed loops.
1205
  /// \param Clauses List of clauses.
1206
  /// \param AssociatedStmt Statement, associated with the directive.
1207
  /// \param Exprs Helper expressions for CodeGen.
1208
  ///
1209
  static OMPSimdDirective *Create(const ASTContext &C, SourceLocation StartLoc,
1210
                                  SourceLocation EndLoc, unsigned CollapsedNum,
1211
                                  ArrayRef<OMPClause *> Clauses,
1212
                                  Stmt *AssociatedStmt,
1213
                                  const HelperExprs &Exprs);
1214
1215
  /// Creates an empty directive with the place
1216
  /// for \a NumClauses clauses.
1217
  ///
1218
  /// \param C AST context.
1219
  /// \param CollapsedNum Number of collapsed nested loops.
1220
  /// \param NumClauses Number of clauses.
1221
  ///
1222
  static OMPSimdDirective *CreateEmpty(const ASTContext &C, unsigned NumClauses,
1223
                                       unsigned CollapsedNum, EmptyShell);
1224
1225
2.25k
  static bool classof(const Stmt *T) {
1226
2.25k
    return T->getStmtClass() == OMPSimdDirectiveClass;
1227
2.25k
  }
1228
};
1229
1230
/// This represents '#pragma omp for' directive.
1231
///
1232
/// \code
1233
/// #pragma omp for private(a,b) reduction(+:c,d)
1234
/// \endcode
1235
/// In this example directive '#pragma omp for' has clauses 'private' with the
1236
/// variables 'a' and 'b' and 'reduction' with operator '+' and variables 'c'
1237
/// and 'd'.
1238
///
1239
class OMPForDirective : public OMPLoopDirective {
1240
  friend class ASTStmtReader;
1241
  friend class OMPExecutableDirective;
1242
  /// true if current directive has inner cancel directive.
1243
  bool HasCancel = false;
1244
1245
  /// Build directive with the given start and end location.
1246
  ///
1247
  /// \param StartLoc Starting location of the directive kind.
1248
  /// \param EndLoc Ending location of the directive.
1249
  /// \param CollapsedNum Number of collapsed nested loops.
1250
  ///
1251
  OMPForDirective(SourceLocation StartLoc, SourceLocation EndLoc,
1252
                  unsigned CollapsedNum)
1253
      : OMPLoopDirective(OMPForDirectiveClass, llvm::omp::OMPD_for, StartLoc,
1254
6.35k
                         EndLoc, CollapsedNum) {}
1255
1256
  /// Build an empty directive.
1257
  ///
1258
  /// \param CollapsedNum Number of collapsed nested loops.
1259
  ///
1260
  explicit OMPForDirective(unsigned CollapsedNum)
1261
      : OMPLoopDirective(OMPForDirectiveClass, llvm::omp::OMPD_for,
1262
301
                         SourceLocation(), SourceLocation(), CollapsedNum) {}
1263
1264
  /// Sets special task reduction descriptor.
1265
6.35k
  void setTaskReductionRefExpr(Expr *E) {
1266
6.35k
    Data->getChildren()[numLoopChildren(getCollapsedNumber(),
1267
6.35k
                                        llvm::omp::OMPD_for)] = E;
1268
6.35k
  }
1269
1270
  /// Set cancel state.
1271
6.65k
  void setHasCancel(bool Has) { HasCancel = Has; }
1272
1273
public:
1274
  /// Creates directive with a list of \a Clauses.
1275
  ///
1276
  /// \param C AST context.
1277
  /// \param StartLoc Starting location of the directive kind.
1278
  /// \param EndLoc Ending Location of the directive.
1279
  /// \param CollapsedNum Number of collapsed loops.
1280
  /// \param Clauses List of clauses.
1281
  /// \param AssociatedStmt Statement, associated with the directive.
1282
  /// \param Exprs Helper expressions for CodeGen.
1283
  /// \param TaskRedRef Task reduction special reference expression to handle
1284
  /// taskgroup descriptor.
1285
  /// \param HasCancel true if current directive has inner cancel directive.
1286
  ///
1287
  static OMPForDirective *Create(const ASTContext &C, SourceLocation StartLoc,
1288
                                 SourceLocation EndLoc, unsigned CollapsedNum,
1289
                                 ArrayRef<OMPClause *> Clauses,
1290
                                 Stmt *AssociatedStmt, const HelperExprs &Exprs,
1291
                                 Expr *TaskRedRef, bool HasCancel);
1292
1293
  /// Creates an empty directive with the place
1294
  /// for \a NumClauses clauses.
1295
  ///
1296
  /// \param C AST context.
1297
  /// \param CollapsedNum Number of collapsed nested loops.
1298
  /// \param NumClauses Number of clauses.
1299
  ///
1300
  static OMPForDirective *CreateEmpty(const ASTContext &C, unsigned NumClauses,
1301
                                      unsigned CollapsedNum, EmptyShell);
1302
1303
  /// Returns special task reduction reference expression.
1304
2
  Expr *getTaskReductionRefExpr() {
1305
2
    return cast_or_null<Expr>(Data->getChildren()[numLoopChildren(
1306
2
        getCollapsedNumber(), llvm::omp::OMPD_for)]);
1307
2
  }
1308
2
  const Expr *getTaskReductionRefExpr() const {
1309
2
    return const_cast<OMPForDirective *>(this)->getTaskReductionRefExpr();
1310
2
  }
1311
1312
  /// Return true if current directive has inner cancel directive.
1313
991
  bool hasCancel() const { return HasCancel; }
1314
1315
2.98k
  static bool classof(const Stmt *T) {
1316
2.98k
    return T->getStmtClass() == OMPForDirectiveClass;
1317
2.98k
  }
1318
};
1319
1320
/// This represents '#pragma omp for simd' directive.
1321
///
1322
/// \code
1323
/// #pragma omp for simd private(a,b) linear(i,j:s) reduction(+:c,d)
1324
/// \endcode
1325
/// In this example directive '#pragma omp for simd' has clauses 'private'
1326
/// with the variables 'a' and 'b', 'linear' with variables 'i', 'j' and
1327
/// linear step 's', 'reduction' with operator '+' and variables 'c' and 'd'.
1328
///
1329
class OMPForSimdDirective : public OMPLoopDirective {
1330
  friend class ASTStmtReader;
1331
  friend class OMPExecutableDirective;
1332
  /// Build directive with the given start and end location.
1333
  ///
1334
  /// \param StartLoc Starting location of the directive kind.
1335
  /// \param EndLoc Ending location of the directive.
1336
  /// \param CollapsedNum Number of collapsed nested loops.
1337
  ///
1338
  OMPForSimdDirective(SourceLocation StartLoc, SourceLocation EndLoc,
1339
                      unsigned CollapsedNum)
1340
      : OMPLoopDirective(OMPForSimdDirectiveClass, llvm::omp::OMPD_for_simd,
1341
5.26k
                         StartLoc, EndLoc, CollapsedNum) {}
1342
1343
  /// Build an empty directive.
1344
  ///
1345
  /// \param CollapsedNum Number of collapsed nested loops.
1346
  ///
1347
  explicit OMPForSimdDirective(unsigned CollapsedNum)
1348
      : OMPLoopDirective(OMPForSimdDirectiveClass, llvm::omp::OMPD_for_simd,
1349
109
                         SourceLocation(), SourceLocation(), CollapsedNum) {}
1350
1351
public:
1352
  /// Creates directive with a list of \a Clauses.
1353
  ///
1354
  /// \param C AST context.
1355
  /// \param StartLoc Starting location of the directive kind.
1356
  /// \param EndLoc Ending Location of the directive.
1357
  /// \param CollapsedNum Number of collapsed loops.
1358
  /// \param Clauses List of clauses.
1359
  /// \param AssociatedStmt Statement, associated with the directive.
1360
  /// \param Exprs Helper expressions for CodeGen.
1361
  ///
1362
  static OMPForSimdDirective *
1363
  Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1364
         unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses,
1365
         Stmt *AssociatedStmt, const HelperExprs &Exprs);
1366
1367
  /// Creates an empty directive with the place
1368
  /// for \a NumClauses clauses.
1369
  ///
1370
  /// \param C AST context.
1371
  /// \param CollapsedNum Number of collapsed nested loops.
1372
  /// \param NumClauses Number of clauses.
1373
  ///
1374
  static OMPForSimdDirective *CreateEmpty(const ASTContext &C,
1375
                                          unsigned NumClauses,
1376
                                          unsigned CollapsedNum, EmptyShell);
1377
1378
2.20k
  static bool classof(const Stmt *T) {
1379
2.20k
    return T->getStmtClass() == OMPForSimdDirectiveClass;
1380
2.20k
  }
1381
};
1382
1383
/// This represents '#pragma omp sections' directive.
1384
///
1385
/// \code
1386
/// #pragma omp sections private(a,b) reduction(+:c,d)
1387
/// \endcode
1388
/// In this example directive '#pragma omp sections' has clauses 'private' with
1389
/// the variables 'a' and 'b' and 'reduction' with operator '+' and variables
1390
/// 'c' and 'd'.
1391
///
1392
class OMPSectionsDirective : public OMPExecutableDirective {
1393
  friend class ASTStmtReader;
1394
  friend class OMPExecutableDirective;
1395
1396
  /// true if current directive has inner cancel directive.
1397
  bool HasCancel = false;
1398
1399
  /// Build directive with the given start and end location.
1400
  ///
1401
  /// \param StartLoc Starting location of the directive kind.
1402
  /// \param EndLoc Ending location of the directive.
1403
  ///
1404
  OMPSectionsDirective(SourceLocation StartLoc, SourceLocation EndLoc)
1405
      : OMPExecutableDirective(OMPSectionsDirectiveClass,
1406
3.48k
                               llvm::omp::OMPD_sections, StartLoc, EndLoc) {}
1407
1408
  /// Build an empty directive.
1409
  ///
1410
  explicit OMPSectionsDirective()
1411
      : OMPExecutableDirective(OMPSectionsDirectiveClass,
1412
                               llvm::omp::OMPD_sections, SourceLocation(),
1413
58
                               SourceLocation()) {}
1414
1415
  /// Sets special task reduction descriptor.
1416
3.48k
  void setTaskReductionRefExpr(Expr *E) { Data->getChildren()[0] = E; }
1417
1418
  /// Set cancel state.
1419
3.54k
  void setHasCancel(bool Has) { HasCancel = Has; }
1420
1421
public:
1422
  /// Creates directive with a list of \a Clauses.
1423
  ///
1424
  /// \param C AST context.
1425
  /// \param StartLoc Starting location of the directive kind.
1426
  /// \param EndLoc Ending Location of the directive.
1427
  /// \param Clauses List of clauses.
1428
  /// \param AssociatedStmt Statement, associated with the directive.
1429
  /// \param TaskRedRef Task reduction special reference expression to handle
1430
  /// taskgroup descriptor.
1431
  /// \param HasCancel true if current directive has inner directive.
1432
  ///
1433
  static OMPSectionsDirective *
1434
  Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1435
         ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *TaskRedRef,
1436
         bool HasCancel);
1437
1438
  /// Creates an empty directive with the place for \a NumClauses
1439
  /// clauses.
1440
  ///
1441
  /// \param C AST context.
1442
  /// \param NumClauses Number of clauses.
1443
  ///
1444
  static OMPSectionsDirective *CreateEmpty(const ASTContext &C,
1445
                                           unsigned NumClauses, EmptyShell);
1446
1447
  /// Returns special task reduction reference expression.
1448
2
  Expr *getTaskReductionRefExpr() {
1449
2
    return cast_or_null<Expr>(Data->getChildren()[0]);
1450
2
  }
1451
2
  const Expr *getTaskReductionRefExpr() const {
1452
2
    return const_cast<OMPSectionsDirective *>(this)->getTaskReductionRefExpr();
1453
2
  }
1454
1455
  /// Return true if current directive has inner cancel directive.
1456
120
  bool hasCancel() const { return HasCancel; }
1457
1458
1.62k
  static bool classof(const Stmt *T) {
1459
1.62k
    return T->getStmtClass() == OMPSectionsDirectiveClass;
1460
1.62k
  }
1461
};
1462
1463
/// This represents '#pragma omp section' directive.
1464
///
1465
/// \code
1466
/// #pragma omp section
1467
/// \endcode
1468
///
1469
class OMPSectionDirective : public OMPExecutableDirective {
1470
  friend class ASTStmtReader;
1471
  friend class OMPExecutableDirective;
1472
1473
  /// true if current directive has inner cancel directive.
1474
  bool HasCancel = false;
1475
1476
  /// Build directive with the given start and end location.
1477
  ///
1478
  /// \param StartLoc Starting location of the directive kind.
1479
  /// \param EndLoc Ending location of the directive.
1480
  ///
1481
  OMPSectionDirective(SourceLocation StartLoc, SourceLocation EndLoc)
1482
      : OMPExecutableDirective(OMPSectionDirectiveClass,
1483
855
                               llvm::omp::OMPD_section, StartLoc, EndLoc) {}
1484
1485
  /// Build an empty directive.
1486
  ///
1487
  explicit OMPSectionDirective()
1488
      : OMPExecutableDirective(OMPSectionDirectiveClass,
1489
                               llvm::omp::OMPD_section, SourceLocation(),
1490
50
                               SourceLocation()) {}
1491
1492
public:
1493
  /// Creates directive.
1494
  ///
1495
  /// \param C AST context.
1496
  /// \param StartLoc Starting location of the directive kind.
1497
  /// \param EndLoc Ending Location of the directive.
1498
  /// \param AssociatedStmt Statement, associated with the directive.
1499
  /// \param HasCancel true if current directive has inner directive.
1500
  ///
1501
  static OMPSectionDirective *Create(const ASTContext &C,
1502
                                     SourceLocation StartLoc,
1503
                                     SourceLocation EndLoc,
1504
                                     Stmt *AssociatedStmt, bool HasCancel);
1505
1506
  /// Creates an empty directive.
1507
  ///
1508
  /// \param C AST context.
1509
  ///
1510
  static OMPSectionDirective *CreateEmpty(const ASTContext &C, EmptyShell);
1511
1512
  /// Set cancel state.
1513
1.07k
  void setHasCancel(bool Has) { HasCancel = Has; }
1514
1515
  /// Return true if current directive has inner cancel directive.
1516
50
  bool hasCancel() const { return HasCancel; }
1517
1518
656
  static bool classof(const Stmt *T) {
1519
656
    return T->getStmtClass() == OMPSectionDirectiveClass;
1520
656
  }
1521
};
1522
1523
/// This represents '#pragma omp single' directive.
1524
///
1525
/// \code
1526
/// #pragma omp single private(a,b) copyprivate(c,d)
1527
/// \endcode
1528
/// In this example directive '#pragma omp single' has clauses 'private' with
1529
/// the variables 'a' and 'b' and 'copyprivate' with variables 'c' and 'd'.
1530
///
1531
class OMPSingleDirective : public OMPExecutableDirective {
1532
  friend class ASTStmtReader;
1533
  friend class OMPExecutableDirective;
1534
  /// Build directive with the given start and end location.
1535
  ///
1536
  /// \param StartLoc Starting location of the directive kind.
1537
  /// \param EndLoc Ending location of the directive.
1538
  ///
1539
  OMPSingleDirective(SourceLocation StartLoc, SourceLocation EndLoc)
1540
      : OMPExecutableDirective(OMPSingleDirectiveClass, llvm::omp::OMPD_single,
1541
1.78k
                               StartLoc, EndLoc) {}
1542
1543
  /// Build an empty directive.
1544
  ///
1545
  explicit OMPSingleDirective()
1546
      : OMPExecutableDirective(OMPSingleDirectiveClass, llvm::omp::OMPD_single,
1547
44
                               SourceLocation(), SourceLocation()) {}
1548
1549
public:
1550
  /// Creates directive with a list of \a Clauses.
1551
  ///
1552
  /// \param C AST context.
1553
  /// \param StartLoc Starting location of the directive kind.
1554
  /// \param EndLoc Ending Location of the directive.
1555
  /// \param Clauses List of clauses.
1556
  /// \param AssociatedStmt Statement, associated with the directive.
1557
  ///
1558
  static OMPSingleDirective *
1559
  Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1560
         ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt);
1561
1562
  /// Creates an empty directive with the place for \a NumClauses
1563
  /// clauses.
1564
  ///
1565
  /// \param C AST context.
1566
  /// \param NumClauses Number of clauses.
1567
  ///
1568
  static OMPSingleDirective *CreateEmpty(const ASTContext &C,
1569
                                         unsigned NumClauses, EmptyShell);
1570
1571
609
  static bool classof(const Stmt *T) {
1572
609
    return T->getStmtClass() == OMPSingleDirectiveClass;
1573
609
  }
1574
};
1575
1576
/// This represents '#pragma omp master' directive.
1577
///
1578
/// \code
1579
/// #pragma omp master
1580
/// \endcode
1581
///
1582
class OMPMasterDirective : public OMPExecutableDirective {
1583
  friend class ASTStmtReader;
1584
  friend class OMPExecutableDirective;
1585
  /// Build directive with the given start and end location.
1586
  ///
1587
  /// \param StartLoc Starting location of the directive kind.
1588
  /// \param EndLoc Ending location of the directive.
1589
  ///
1590
  OMPMasterDirective(SourceLocation StartLoc, SourceLocation EndLoc)
1591
      : OMPExecutableDirective(OMPMasterDirectiveClass, llvm::omp::OMPD_master,
1592
1.07k
                               StartLoc, EndLoc) {}
1593
1594
  /// Build an empty directive.
1595
  ///
1596
  explicit OMPMasterDirective()
1597
      : OMPExecutableDirective(OMPMasterDirectiveClass, llvm::omp::OMPD_master,
1598
11
                               SourceLocation(), SourceLocation()) {}
1599
1600
public:
1601
  /// Creates directive.
1602
  ///
1603
  /// \param C AST context.
1604
  /// \param StartLoc Starting location of the directive kind.
1605
  /// \param EndLoc Ending Location of the directive.
1606
  /// \param AssociatedStmt Statement, associated with the directive.
1607
  ///
1608
  static OMPMasterDirective *Create(const ASTContext &C,
1609
                                    SourceLocation StartLoc,
1610
                                    SourceLocation EndLoc,
1611
                                    Stmt *AssociatedStmt);
1612
1613
  /// Creates an empty directive.
1614
  ///
1615
  /// \param C AST context.
1616
  ///
1617
  static OMPMasterDirective *CreateEmpty(const ASTContext &C, EmptyShell);
1618
1619
363
  static bool classof(const Stmt *T) {
1620
363
    return T->getStmtClass() == OMPMasterDirectiveClass;
1621
363
  }
1622
};
1623
1624
/// This represents '#pragma omp critical' directive.
1625
///
1626
/// \code
1627
/// #pragma omp critical
1628
/// \endcode
1629
///
1630
class OMPCriticalDirective : public OMPExecutableDirective {
1631
  friend class ASTStmtReader;
1632
  friend class OMPExecutableDirective;
1633
  /// Name