Coverage Report

Created: 2021-09-21 08:58

/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
/// Representation of an OpenMP canonical loop.
32
///
33
/// OpenMP 1.0 C/C++, section 2.4.1 for Construct; canonical-shape
34
/// OpenMP 2.0 C/C++, section 2.4.1 for Construct; canonical-shape
35
/// OpenMP 2.5, section 2.5.1 Loop Construct; canonical form
36
/// OpenMP 3.1, section 2.5.1 Loop Construct; canonical form
37
/// OpenMP 4.0, section 2.6 Canonical Loop Form
38
/// OpenMP 4.5, section 2.6 Canonical Loop Form
39
/// OpenMP 5.0, section 2.9.1 Canonical Loop Form
40
/// OpenMP 5.1, section 2.11.1 Canonical Loop Nest Form
41
///
42
/// An OpenMP canonical loop is a for-statement or range-based for-statement
43
/// with additional requirements that ensure that the number of iterations is
44
/// known before entering the loop and allow skipping to an arbitrary iteration.
45
/// The OMPCanonicalLoop AST node wraps a ForStmt or CXXForRangeStmt that is
46
/// known to fulfill OpenMP's canonical loop requirements because of being
47
/// associated to an OMPLoopBasedDirective. That is, the general structure is:
48
///
49
///  OMPLoopBasedDirective
50
/// [`- CapturedStmt   ]
51
/// [   `- CapturedDecl]
52
///        ` OMPCanonicalLoop
53
///          `- ForStmt/CXXForRangeStmt
54
///             `- Stmt
55
///
56
/// One or multiple CapturedStmt/CapturedDecl pairs may be inserted by some
57
/// directives such as OMPParallelForDirective, but others do not need them
58
/// (such as OMPTileDirective). In  The OMPCanonicalLoop and
59
/// ForStmt/CXXForRangeStmt pair is repeated for loop associated with the
60
/// directive. A OMPCanonicalLoop must not appear in the AST unless associated
61
/// with a OMPLoopBasedDirective. In an imperfectly nested loop nest, the
62
/// OMPCanonicalLoop may also be wrapped in a CompoundStmt:
63
///
64
/// [...]
65
///  ` OMPCanonicalLoop
66
///    `- ForStmt/CXXForRangeStmt
67
///       `- CompoundStmt
68
///          |- Leading in-between code (if any)
69
///          |- OMPCanonicalLoop
70
///          |  `- ForStmt/CXXForRangeStmt
71
///          |     `- ...
72
///          `- Trailing in-between code (if any)
73
///
74
/// The leading/trailing in-between code must not itself be a OMPCanonicalLoop
75
/// to avoid confusion which loop belongs to the nesting.
76
///
77
/// There are three different kinds of iteration variables for different
78
/// purposes:
79
/// * Loop user variable: The user-accessible variable with different value for
80
///   each iteration.
81
/// * Loop iteration variable: The variable used to identify a loop iteration;
82
///   for range-based for-statement, this is the hidden iterator '__begin'. For
83
///   other loops, it is identical to the loop user variable. Must be a
84
///   random-access iterator, pointer or integer type.
85
/// * Logical iteration counter: Normalized loop counter starting at 0 and
86
///   incrementing by one at each iteration. Allows abstracting over the type
87
///   of the loop iteration variable and is always an unsigned integer type
88
///   appropriate to represent the range of the loop iteration variable. Its
89
///   value corresponds to the logical iteration number in the OpenMP
90
///   specification.
91
///
92
/// This AST node provides two captured statements:
93
/// * The distance function which computes the number of iterations.
94
/// * The loop user variable function that computes the loop user variable when
95
///   given a logical iteration number.
96
///
97
/// These captured statements provide the link between C/C++ semantics and the
98
/// logical iteration counters used by the OpenMPIRBuilder which is
99
/// language-agnostic and therefore does not know e.g. how to advance a
100
/// random-access iterator. The OpenMPIRBuilder will use this information to
101
/// apply simd, workshare-loop, distribute, taskloop and loop directives to the
102
/// loop. For compatibility with the non-OpenMPIRBuilder codegen path, an
103
/// OMPCanonicalLoop can itself also be wrapped into the CapturedStmts of an
104
/// OMPLoopDirective and skipped when searching for the associated syntactical
105
/// loop.
106
///
107
/// Example:
108
/// <code>
109
///   std::vector<std::string> Container{1,2,3};
110
///   for (std::string Str : Container)
111
///      Body(Str);
112
/// </code>
113
/// which is syntactic sugar for approximately:
114
/// <code>
115
///   auto &&__range = Container;
116
///   auto __begin = std::begin(__range);
117
///   auto __end = std::end(__range);
118
///   for (; __begin != __end; ++__begin) {
119
///     std::String Str = *__begin;
120
///     Body(Str);
121
///   }
122
/// </code>
123
/// In this example, the loop user variable is `Str`, the loop iteration
124
/// variable is `__begin` of type `std::vector<std::string>::iterator` and the
125
/// logical iteration number type is `size_t` (unsigned version of
126
/// `std::vector<std::string>::iterator::difference_type` aka `ptrdiff_t`).
127
/// Therefore, the distance function will be
128
/// <code>
129
///   [&](size_t &Result) { Result = __end - __begin; }
130
/// </code>
131
/// and the loop variable function is
132
/// <code>
133
///   [&,__begin](std::vector<std::string>::iterator &Result, size_t Logical) {
134
///     Result = __begin + Logical;
135
///   }
136
/// </code>
137
/// The variable `__begin`, aka the loop iteration variable, is captured by
138
/// value because it is modified in the loop body, but both functions require
139
/// the initial value. The OpenMP specification explicitly leaves unspecified
140
/// when the loop expressions are evaluated such that a capture by reference is
141
/// sufficient.
142
class OMPCanonicalLoop : public Stmt {
143
  friend class ASTStmtReader;
144
  friend class ASTStmtWriter;
145
146
  /// Children of this AST node.
147
  enum {
148
    LOOP_STMT,
149
    DISTANCE_FUNC,
150
    LOOPVAR_FUNC,
151
    LOOPVAR_REF,
152
    LastSubStmt = LOOPVAR_REF
153
  };
154
155
private:
156
  /// This AST node's children.
157
  Stmt *SubStmts[LastSubStmt + 1] = {};
158
159
104
  OMPCanonicalLoop() : Stmt(StmtClass::OMPCanonicalLoopClass) {}
160
161
public:
162
  /// Create a new OMPCanonicalLoop.
163
  static OMPCanonicalLoop *create(const ASTContext &Ctx, Stmt *LoopStmt,
164
                                  CapturedStmt *DistanceFunc,
165
                                  CapturedStmt *LoopVarFunc,
166
82
                                  DeclRefExpr *LoopVarRef) {
167
82
    OMPCanonicalLoop *S = new (Ctx) OMPCanonicalLoop();
168
82
    S->setLoopStmt(LoopStmt);
169
82
    S->setDistanceFunc(DistanceFunc);
170
82
    S->setLoopVarFunc(LoopVarFunc);
171
82
    S->setLoopVarRef(LoopVarRef);
172
82
    return S;
173
82
  }
174
175
  /// Create an empty OMPCanonicalLoop for deserialization.
176
22
  static OMPCanonicalLoop *createEmpty(const ASTContext &Ctx) {
177
22
    return new (Ctx) OMPCanonicalLoop();
178
22
  }
179
180
357k
  static bool classof(const Stmt *S) {
181
357k
    return S->getStmtClass() == StmtClass::OMPCanonicalLoopClass;
182
357k
  }
183
184
324
  SourceLocation getBeginLoc() const { return getLoopStmt()->getBeginLoc(); }
185
38
  SourceLocation getEndLoc() const { return getLoopStmt()->getEndLoc(); }
186
187
  /// Return this AST node's children.
188
  /// @{
189
157
  child_range children() {
190
157
    return child_range(&SubStmts[0], &SubStmts[0] + LastSubStmt + 1);
191
157
  }
192
0
  const_child_range children() const {
193
0
    return const_child_range(&SubStmts[0], &SubStmts[0] + LastSubStmt + 1);
194
0
  }
195
  /// @}
196
197
  /// The wrapped syntactic loop statement (ForStmt or CXXForRangeStmt).
198
  /// @{
199
130
  Stmt *getLoopStmt() { return SubStmts[LOOP_STMT]; }
200
440
  const Stmt *getLoopStmt() const { return SubStmts[LOOP_STMT]; }
201
82
  void setLoopStmt(Stmt *S) {
202
82
    assert((isa<ForStmt>(S) || isa<CXXForRangeStmt>(S)) &&
203
82
           "Canonical loop must be a for loop (range-based or otherwise)");
204
0
    SubStmts[LOOP_STMT] = S;
205
82
  }
206
  /// @}
207
208
  /// The function that computes the number of loop iterations. Can be evaluated
209
  /// before entering the loop but after the syntactical loop's init
210
  /// statement(s).
211
  ///
212
  /// Function signature: void(LogicalTy &Result)
213
  /// Any values necessary to compute the distance are captures of the closure.
214
  /// @{
215
0
  CapturedStmt *getDistanceFunc() {
216
0
    return cast<CapturedStmt>(SubStmts[DISTANCE_FUNC]);
217
0
  }
218
32
  const CapturedStmt *getDistanceFunc() const {
219
32
    return cast<CapturedStmt>(SubStmts[DISTANCE_FUNC]);
220
32
  }
221
82
  void setDistanceFunc(CapturedStmt *S) {
222
82
    assert(S && "Expected non-null captured statement");
223
0
    SubStmts[DISTANCE_FUNC] = S;
224
82
  }
225
  /// @}
226
227
  /// The function that computes the loop user variable from a logical iteration
228
  /// counter. Can be evaluated as first statement in the loop.
229
  ///
230
  /// Function signature: void(LoopVarTy &Result, LogicalTy Number)
231
  /// Any other values required to compute the loop user variable (such as start
232
  /// value, step size) are captured by the closure. In particular, the initial
233
  /// value of loop iteration variable is captured by value to be unaffected by
234
  /// previous iterations.
235
  /// @{
236
0
  CapturedStmt *getLoopVarFunc() {
237
0
    return cast<CapturedStmt>(SubStmts[LOOPVAR_FUNC]);
238
0
  }
239
32
  const CapturedStmt *getLoopVarFunc() const {
240
32
    return cast<CapturedStmt>(SubStmts[LOOPVAR_FUNC]);
241
32
  }
242
82
  void setLoopVarFunc(CapturedStmt *S) {
243
82
    assert(S && "Expected non-null captured statement");
244
0
    SubStmts[LOOPVAR_FUNC] = S;
245
82
  }
246
  /// @}
247
248
  /// Reference to the loop user variable as accessed in the loop body.
249
  /// @{
250
0
  DeclRefExpr *getLoopVarRef() {
251
0
    return cast<DeclRefExpr>(SubStmts[LOOPVAR_REF]);
252
0
  }
253
32
  const DeclRefExpr *getLoopVarRef() const {
254
32
    return cast<DeclRefExpr>(SubStmts[LOOPVAR_REF]);
255
32
  }
256
82
  void setLoopVarRef(DeclRefExpr *E) {
257
82
    assert(E && "Expected non-null loop variable");
258
0
    SubStmts[LOOPVAR_REF] = E;
259
82
  }
260
  /// @}
261
};
262
263
/// This is a basic class for representing single OpenMP executable
264
/// directive.
265
///
266
class OMPExecutableDirective : public Stmt {
267
  friend class ASTStmtReader;
268
  friend class ASTStmtWriter;
269
270
  /// Kind of the directive.
271
  OpenMPDirectiveKind Kind = llvm::omp::OMPD_unknown;
272
  /// Starting location of the directive (directive keyword).
273
  SourceLocation StartLoc;
274
  /// Ending location of the directive.
275
  SourceLocation EndLoc;
276
277
  /// Get the clauses storage.
278
0
  MutableArrayRef<OMPClause *> getClauses() {
279
0
    if (!Data)
280
0
      return llvm::None;
281
0
    return Data->getClauses();
282
0
  }
283
284
protected:
285
  /// Data, associated with the directive.
286
  OMPChildren *Data = nullptr;
287
288
  /// Build instance of directive of class \a K.
289
  ///
290
  /// \param SC Statement class.
291
  /// \param K Kind of OpenMP directive.
292
  /// \param StartLoc Starting location of the directive (directive keyword).
293
  /// \param EndLoc Ending location of the directive.
294
  ///
295
  OMPExecutableDirective(StmtClass SC, OpenMPDirectiveKind K,
296
                         SourceLocation StartLoc, SourceLocation EndLoc)
297
      : Stmt(SC), Kind(K), StartLoc(std::move(StartLoc)),
298
310k
        EndLoc(std::move(EndLoc)) {}
299
300
  template <typename T, typename... Params>
301
  static T *createDirective(const ASTContext &C, ArrayRef<OMPClause *> Clauses,
302
                            Stmt *AssociatedStmt, unsigned NumChildren,
303
291k
                            Params &&... P) {
304
291k
    void *Mem =
305
291k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
291k
                                                 NumChildren),
307
291k
                   alignof(T));
308
309
291k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
291k
                                     AssociatedStmt, NumChildren);
311
291k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
291k
    Inst->Data = Data;
313
291k
    return Inst;
314
291k
  }
Unexecuted instantiation: clang::OMPMetaDirective* clang::OMPExecutableDirective::createDirective<clang::OMPMetaDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
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
303
24.0k
                            Params &&... P) {
304
24.0k
    void *Mem =
305
24.0k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
24.0k
                                                 NumChildren),
307
24.0k
                   alignof(T));
308
309
24.0k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
24.0k
                                     AssociatedStmt, NumChildren);
311
24.0k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
24.0k
    Inst->Data = Data;
313
24.0k
    return Inst;
314
24.0k
  }
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
303
5.73k
                            Params &&... P) {
304
5.73k
    void *Mem =
305
5.73k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
5.73k
                                                 NumChildren),
307
5.73k
                   alignof(T));
308
309
5.73k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
5.73k
                                     AssociatedStmt, NumChildren);
311
5.73k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
5.73k
    Inst->Data = Data;
313
5.73k
    return Inst;
314
5.73k
  }
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
303
6.49k
                            Params &&... P) {
304
6.49k
    void *Mem =
305
6.49k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
6.49k
                                                 NumChildren),
307
6.49k
                   alignof(T));
308
309
6.49k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
6.49k
                                     AssociatedStmt, NumChildren);
311
6.49k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
6.49k
    Inst->Data = Data;
313
6.49k
    return Inst;
314
6.49k
  }
clang::OMPTileDirective* clang::OMPExecutableDirective::createDirective<clang::OMPTileDirective, 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
303
63
                            Params &&... P) {
304
63
    void *Mem =
305
63
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
63
                                                 NumChildren),
307
63
                   alignof(T));
308
309
63
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
63
                                     AssociatedStmt, NumChildren);
311
63
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
63
    Inst->Data = Data;
313
63
    return Inst;
314
63
  }
clang::OMPUnrollDirective* clang::OMPExecutableDirective::createDirective<clang::OMPUnrollDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
303
86
                            Params &&... P) {
304
86
    void *Mem =
305
86
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
86
                                                 NumChildren),
307
86
                   alignof(T));
308
309
86
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
86
                                     AssociatedStmt, NumChildren);
311
86
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
86
    Inst->Data = Data;
313
86
    return Inst;
314
86
  }
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
303
5.27k
                            Params &&... P) {
304
5.27k
    void *Mem =
305
5.27k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
5.27k
                                                 NumChildren),
307
5.27k
                   alignof(T));
308
309
5.27k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
5.27k
                                     AssociatedStmt, NumChildren);
311
5.27k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
5.27k
    Inst->Data = Data;
313
5.27k
    return Inst;
314
5.27k
  }
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
303
3.48k
                            Params &&... P) {
304
3.48k
    void *Mem =
305
3.48k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
3.48k
                                                 NumChildren),
307
3.48k
                   alignof(T));
308
309
3.48k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
3.48k
                                     AssociatedStmt, NumChildren);
311
3.48k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
3.48k
    Inst->Data = Data;
313
3.48k
    return Inst;
314
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
303
855
                            Params &&... P) {
304
855
    void *Mem =
305
855
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
855
                                                 NumChildren),
307
855
                   alignof(T));
308
309
855
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
855
                                     AssociatedStmt, NumChildren);
311
855
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
855
    Inst->Data = Data;
313
855
    return Inst;
314
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
303
1.79k
                            Params &&... P) {
304
1.79k
    void *Mem =
305
1.79k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
1.79k
                                                 NumChildren),
307
1.79k
                   alignof(T));
308
309
1.79k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
1.79k
                                     AssociatedStmt, NumChildren);
311
1.79k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
1.79k
    Inst->Data = Data;
313
1.79k
    return Inst;
314
1.79k
  }
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
303
1.08k
                            Params &&... P) {
304
1.08k
    void *Mem =
305
1.08k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
1.08k
                                                 NumChildren),
307
1.08k
                   alignof(T));
308
309
1.08k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
1.08k
                                     AssociatedStmt, NumChildren);
311
1.08k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
1.08k
    Inst->Data = Data;
313
1.08k
    return Inst;
314
1.08k
  }
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
303
1.62k
                            Params &&... P) {
304
1.62k
    void *Mem =
305
1.62k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
1.62k
                                                 NumChildren),
307
1.62k
                   alignof(T));
308
309
1.62k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
1.62k
                                     AssociatedStmt, NumChildren);
311
1.62k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
1.62k
    Inst->Data = Data;
313
1.62k
    return Inst;
314
1.62k
  }
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
303
4.50k
                            Params &&... P) {
304
4.50k
    void *Mem =
305
4.50k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
4.50k
                                                 NumChildren),
307
4.50k
                   alignof(T));
308
309
4.50k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
4.50k
                                     AssociatedStmt, NumChildren);
311
4.50k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
4.50k
    Inst->Data = Data;
313
4.50k
    return Inst;
314
4.50k
  }
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
303
5.66k
                            Params &&... P) {
304
5.66k
    void *Mem =
305
5.66k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
5.66k
                                                 NumChildren),
307
5.66k
                   alignof(T));
308
309
5.66k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
5.66k
                                     AssociatedStmt, NumChildren);
311
5.66k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
5.66k
    Inst->Data = Data;
313
5.66k
    return Inst;
314
5.66k
  }
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
303
2.82k
                            Params &&... P) {
304
2.82k
    void *Mem =
305
2.82k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
2.82k
                                                 NumChildren),
307
2.82k
                   alignof(T));
308
309
2.82k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
2.82k
                                     AssociatedStmt, NumChildren);
311
2.82k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
2.82k
    Inst->Data = Data;
313
2.82k
    return Inst;
314
2.82k
  }
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
303
3.30k
                            Params &&... P) {
304
3.30k
    void *Mem =
305
3.30k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
3.30k
                                                 NumChildren),
307
3.30k
                   alignof(T));
308
309
3.30k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
3.30k
                                     AssociatedStmt, NumChildren);
311
3.30k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
3.30k
    Inst->Data = Data;
313
3.30k
    return Inst;
314
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
303
3.59k
                            Params &&... P) {
304
3.59k
    void *Mem =
305
3.59k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
3.59k
                                                 NumChildren),
307
3.59k
                   alignof(T));
308
309
3.59k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
3.59k
                                     AssociatedStmt, NumChildren);
311
3.59k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
3.59k
    Inst->Data = Data;
313
3.59k
    return Inst;
314
3.59k
  }
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
303
2.52k
                            Params &&... P) {
304
2.52k
    void *Mem =
305
2.52k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
2.52k
                                                 NumChildren),
307
2.52k
                   alignof(T));
308
309
2.52k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
2.52k
                                     AssociatedStmt, NumChildren);
311
2.52k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
2.52k
    Inst->Data = Data;
313
2.52k
    return Inst;
314
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
303
624
                            Params &&... P) {
304
624
    void *Mem =
305
624
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
624
                                                 NumChildren),
307
624
                   alignof(T));
308
309
624
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
624
                                     AssociatedStmt, NumChildren);
311
624
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
624
    Inst->Data = Data;
313
624
    return Inst;
314
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
303
917
                            Params &&... P) {
304
917
    void *Mem =
305
917
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
917
                                                 NumChildren),
307
917
                   alignof(T));
308
309
917
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
917
                                     AssociatedStmt, NumChildren);
311
917
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
917
    Inst->Data = Data;
313
917
    return Inst;
314
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
303
238
                            Params &&... P) {
304
238
    void *Mem =
305
238
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
238
                                                 NumChildren),
307
238
                   alignof(T));
308
309
238
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
238
                                     AssociatedStmt, NumChildren);
311
238
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
238
    Inst->Data = Data;
313
238
    return Inst;
314
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
303
98
                            Params &&... P) {
304
98
    void *Mem =
305
98
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
98
                                                 NumChildren),
307
98
                   alignof(T));
308
309
98
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
98
                                     AssociatedStmt, NumChildren);
311
98
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
98
    Inst->Data = Data;
313
98
    return Inst;
314
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
303
1.22k
                            Params &&... P) {
304
1.22k
    void *Mem =
305
1.22k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
1.22k
                                                 NumChildren),
307
1.22k
                   alignof(T));
308
309
1.22k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
1.22k
                                     AssociatedStmt, NumChildren);
311
1.22k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
1.22k
    Inst->Data = Data;
313
1.22k
    return Inst;
314
1.22k
  }
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
303
3.55k
                            Params &&... P) {
304
3.55k
    void *Mem =
305
3.55k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
3.55k
                                                 NumChildren),
307
3.55k
                   alignof(T));
308
309
3.55k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
3.55k
                                     AssociatedStmt, NumChildren);
311
3.55k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
3.55k
    Inst->Data = Data;
313
3.55k
    return Inst;
314
3.55k
  }
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
303
53.7k
                            Params &&... P) {
304
53.7k
    void *Mem =
305
53.7k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
53.7k
                                                 NumChildren),
307
53.7k
                   alignof(T));
308
309
53.7k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
53.7k
                                     AssociatedStmt, NumChildren);
311
53.7k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
53.7k
    Inst->Data = Data;
313
53.7k
    return Inst;
314
53.7k
  }
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
303
7.45k
                            Params &&... P) {
304
7.45k
    void *Mem =
305
7.45k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
7.45k
                                                 NumChildren),
307
7.45k
                   alignof(T));
308
309
7.45k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
7.45k
                                     AssociatedStmt, NumChildren);
311
7.45k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
7.45k
    Inst->Data = Data;
313
7.45k
    return Inst;
314
7.45k
  }
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
303
7.45k
                            Params &&... P) {
304
7.45k
    void *Mem =
305
7.45k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
7.45k
                                                 NumChildren),
307
7.45k
                   alignof(T));
308
309
7.45k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
7.45k
                                     AssociatedStmt, NumChildren);
311
7.45k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
7.45k
    Inst->Data = Data;
313
7.45k
    return Inst;
314
7.45k
  }
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
303
5.43k
                            Params &&... P) {
304
5.43k
    void *Mem =
305
5.43k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
5.43k
                                                 NumChildren),
307
5.43k
                   alignof(T));
308
309
5.43k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
5.43k
                                     AssociatedStmt, NumChildren);
311
5.43k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
5.43k
    Inst->Data = Data;
313
5.43k
    return Inst;
314
5.43k
  }
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
303
1.80k
                            Params &&... P) {
304
1.80k
    void *Mem =
305
1.80k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
1.80k
                                                 NumChildren),
307
1.80k
                   alignof(T));
308
309
1.80k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
1.80k
                                     AssociatedStmt, NumChildren);
311
1.80k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
1.80k
    Inst->Data = Data;
313
1.80k
    return Inst;
314
1.80k
  }
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
303
1.77k
                            Params &&... P) {
304
1.77k
    void *Mem =
305
1.77k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
1.77k
                                                 NumChildren),
307
1.77k
                   alignof(T));
308
309
1.77k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
1.77k
                                     AssociatedStmt, NumChildren);
311
1.77k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
1.77k
    Inst->Data = Data;
313
1.77k
    return Inst;
314
1.77k
  }
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
303
18.3k
                            Params &&... P) {
304
18.3k
    void *Mem =
305
18.3k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
18.3k
                                                 NumChildren),
307
18.3k
                   alignof(T));
308
309
18.3k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
18.3k
                                     AssociatedStmt, NumChildren);
311
18.3k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
18.3k
    Inst->Data = Data;
313
18.3k
    return Inst;
314
18.3k
  }
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
303
4.83k
                            Params &&... P) {
304
4.83k
    void *Mem =
305
4.83k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
4.83k
                                                 NumChildren),
307
4.83k
                   alignof(T));
308
309
4.83k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
4.83k
                                     AssociatedStmt, NumChildren);
311
4.83k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
4.83k
    Inst->Data = Data;
313
4.83k
    return Inst;
314
4.83k
  }
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
303
4.30k
                            Params &&... P) {
304
4.30k
    void *Mem =
305
4.30k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
4.30k
                                                 NumChildren),
307
4.30k
                   alignof(T));
308
309
4.30k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
4.30k
                                     AssociatedStmt, NumChildren);
311
4.30k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
4.30k
    Inst->Data = Data;
313
4.30k
    return Inst;
314
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
303
3.39k
                            Params &&... P) {
304
3.39k
    void *Mem =
305
3.39k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
3.39k
                                                 NumChildren),
307
3.39k
                   alignof(T));
308
309
3.39k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
3.39k
                                     AssociatedStmt, NumChildren);
311
3.39k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
3.39k
    Inst->Data = Data;
313
3.39k
    return Inst;
314
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
303
4.28k
                            Params &&... P) {
304
4.28k
    void *Mem =
305
4.28k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
4.28k
                                                 NumChildren),
307
4.28k
                   alignof(T));
308
309
4.28k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
4.28k
                                     AssociatedStmt, NumChildren);
311
4.28k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
4.28k
    Inst->Data = Data;
313
4.28k
    return Inst;
314
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
303
2.74k
                            Params &&... P) {
304
2.74k
    void *Mem =
305
2.74k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
2.74k
                                                 NumChildren),
307
2.74k
                   alignof(T));
308
309
2.74k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
2.74k
                                     AssociatedStmt, NumChildren);
311
2.74k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
2.74k
    Inst->Data = Data;
313
2.74k
    return Inst;
314
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
303
3.64k
                            Params &&... P) {
304
3.64k
    void *Mem =
305
3.64k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
3.64k
                                                 NumChildren),
307
3.64k
                   alignof(T));
308
309
3.64k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
3.64k
                                     AssociatedStmt, NumChildren);
311
3.64k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
3.64k
    Inst->Data = Data;
313
3.64k
    return Inst;
314
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
303
1.68k
                            Params &&... P) {
304
1.68k
    void *Mem =
305
1.68k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
1.68k
                                                 NumChildren),
307
1.68k
                   alignof(T));
308
309
1.68k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
1.68k
                                     AssociatedStmt, NumChildren);
311
1.68k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
1.68k
    Inst->Data = Data;
313
1.68k
    return Inst;
314
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
303
3.53k
                            Params &&... P) {
304
3.53k
    void *Mem =
305
3.53k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
3.53k
                                                 NumChildren),
307
3.53k
                   alignof(T));
308
309
3.53k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
3.53k
                                     AssociatedStmt, NumChildren);
311
3.53k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
3.53k
    Inst->Data = Data;
313
3.53k
    return Inst;
314
3.53k
  }
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
303
4.81k
                            Params &&... P) {
304
4.81k
    void *Mem =
305
4.81k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
4.81k
                                                 NumChildren),
307
4.81k
                   alignof(T));
308
309
4.81k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
4.81k
                                     AssociatedStmt, NumChildren);
311
4.81k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
4.81k
    Inst->Data = Data;
313
4.81k
    return Inst;
314
4.81k
  }
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
303
5.76k
                            Params &&... P) {
304
5.76k
    void *Mem =
305
5.76k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
5.76k
                                                 NumChildren),
307
5.76k
                   alignof(T));
308
309
5.76k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
5.76k
                                     AssociatedStmt, NumChildren);
311
5.76k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
5.76k
    Inst->Data = Data;
313
5.76k
    return Inst;
314
5.76k
  }
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
303
4.38k
                            Params &&... P) {
304
4.38k
    void *Mem =
305
4.38k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
4.38k
                                                 NumChildren),
307
4.38k
                   alignof(T));
308
309
4.38k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
4.38k
                                     AssociatedStmt, NumChildren);
311
4.38k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
4.38k
    Inst->Data = Data;
313
4.38k
    return Inst;
314
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
303
7.59k
                            Params &&... P) {
304
7.59k
    void *Mem =
305
7.59k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
7.59k
                                                 NumChildren),
307
7.59k
                   alignof(T));
308
309
7.59k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
7.59k
                                     AssociatedStmt, NumChildren);
311
7.59k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
7.59k
    Inst->Data = Data;
313
7.59k
    return Inst;
314
7.59k
  }
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
303
7.72k
                            Params &&... P) {
304
7.72k
    void *Mem =
305
7.72k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
7.72k
                                                 NumChildren),
307
7.72k
                   alignof(T));
308
309
7.72k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
7.72k
                                     AssociatedStmt, NumChildren);
311
7.72k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
7.72k
    Inst->Data = Data;
313
7.72k
    return Inst;
314
7.72k
  }
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
303
3.95k
                            Params &&... P) {
304
3.95k
    void *Mem =
305
3.95k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
3.95k
                                                 NumChildren),
307
3.95k
                   alignof(T));
308
309
3.95k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
3.95k
                                     AssociatedStmt, NumChildren);
311
3.95k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
3.95k
    Inst->Data = Data;
313
3.95k
    return Inst;
314
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
303
4.50k
                            Params &&... P) {
304
4.50k
    void *Mem =
305
4.50k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
4.50k
                                                 NumChildren),
307
4.50k
                   alignof(T));
308
309
4.50k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
4.50k
                                     AssociatedStmt, NumChildren);
311
4.50k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
4.50k
    Inst->Data = Data;
313
4.50k
    return Inst;
314
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
303
5.33k
                            Params &&... P) {
304
5.33k
    void *Mem =
305
5.33k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
5.33k
                                                 NumChildren),
307
5.33k
                   alignof(T));
308
309
5.33k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
5.33k
                                     AssociatedStmt, NumChildren);
311
5.33k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
5.33k
    Inst->Data = Data;
313
5.33k
    return Inst;
314
5.33k
  }
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
303
4.52k
                            Params &&... P) {
304
4.52k
    void *Mem =
305
4.52k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
4.52k
                                                 NumChildren),
307
4.52k
                   alignof(T));
308
309
4.52k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
4.52k
                                     AssociatedStmt, NumChildren);
311
4.52k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
4.52k
    Inst->Data = Data;
313
4.52k
    return Inst;
314
4.52k
  }
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
303
7.36k
                            Params &&... P) {
304
7.36k
    void *Mem =
305
7.36k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
7.36k
                                                 NumChildren),
307
7.36k
                   alignof(T));
308
309
7.36k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
7.36k
                                     AssociatedStmt, NumChildren);
311
7.36k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
7.36k
    Inst->Data = Data;
313
7.36k
    return Inst;
314
7.36k
  }
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
303
6.62k
                            Params &&... P) {
304
6.62k
    void *Mem =
305
6.62k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
6.62k
                                                 NumChildren),
307
6.62k
                   alignof(T));
308
309
6.62k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
6.62k
                                     AssociatedStmt, NumChildren);
311
6.62k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
6.62k
    Inst->Data = Data;
313
6.62k
    return Inst;
314
6.62k
  }
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
303
7.00k
                            Params &&... P) {
304
7.00k
    void *Mem =
305
7.00k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
7.00k
                                                 NumChildren),
307
7.00k
                   alignof(T));
308
309
7.00k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
7.00k
                                     AssociatedStmt, NumChildren);
311
7.00k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
7.00k
    Inst->Data = Data;
313
7.00k
    return Inst;
314
7.00k
  }
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
303
8.81k
                            Params &&... P) {
304
8.81k
    void *Mem =
305
8.81k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
8.81k
                                                 NumChildren),
307
8.81k
                   alignof(T));
308
309
8.81k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
8.81k
                                     AssociatedStmt, NumChildren);
311
8.81k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
8.81k
    Inst->Data = Data;
313
8.81k
    return Inst;
314
8.81k
  }
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
303
8.36k
                            Params &&... P) {
304
8.36k
    void *Mem =
305
8.36k
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
8.36k
                                                 NumChildren),
307
8.36k
                   alignof(T));
308
309
8.36k
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
8.36k
                                     AssociatedStmt, NumChildren);
311
8.36k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
8.36k
    Inst->Data = Data;
313
8.36k
    return Inst;
314
8.36k
  }
clang::OMPInteropDirective* clang::OMPExecutableDirective::createDirective<clang::OMPInteropDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
303
143
                            Params &&... P) {
304
143
    void *Mem =
305
143
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
143
                                                 NumChildren),
307
143
                   alignof(T));
308
309
143
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
143
                                     AssociatedStmt, NumChildren);
311
143
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
143
    Inst->Data = Data;
313
143
    return Inst;
314
143
  }
clang::OMPDispatchDirective* clang::OMPExecutableDirective::createDirective<clang::OMPDispatchDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
303
126
                            Params &&... P) {
304
126
    void *Mem =
305
126
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
126
                                                 NumChildren),
307
126
                   alignof(T));
308
309
126
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
126
                                     AssociatedStmt, NumChildren);
311
126
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
126
    Inst->Data = Data;
313
126
    return Inst;
314
126
  }
clang::OMPMaskedDirective* clang::OMPExecutableDirective::createDirective<clang::OMPMaskedDirective, clang::SourceLocation&, clang::SourceLocation&>(clang::ASTContext const&, llvm::ArrayRef<clang::OMPClause*>, clang::Stmt*, unsigned int, clang::SourceLocation&, clang::SourceLocation&)
Line
Count
Source
303
120
                            Params &&... P) {
304
120
    void *Mem =
305
120
        C.Allocate(sizeof(T) + OMPChildren::size(Clauses.size(), AssociatedStmt,
306
120
                                                 NumChildren),
307
120
                   alignof(T));
308
309
120
    auto *Data = OMPChildren::Create(reinterpret_cast<T *>(Mem) + 1, Clauses,
310
120
                                     AssociatedStmt, NumChildren);
311
120
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
312
120
    Inst->Data = Data;
313
120
    return Inst;
314
120
  }
315
316
  template <typename T, typename... Params>
317
  static T *createEmptyDirective(const ASTContext &C, unsigned NumClauses,
318
                                 bool HasAssociatedStmt, unsigned NumChildren,
319
6.52k
                                 Params &&... P) {
320
6.52k
    void *Mem =
321
6.52k
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
6.52k
                                                 NumChildren),
323
6.52k
                   alignof(T));
324
6.52k
    auto *Data =
325
6.52k
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
6.52k
                                 HasAssociatedStmt, NumChildren);
327
6.52k
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
6.52k
    Inst->Data = Data;
329
6.52k
    return Inst;
330
6.52k
  }
clang::OMPSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
169
                                 Params &&... P) {
320
169
    void *Mem =
321
169
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
169
                                                 NumChildren),
323
169
                   alignof(T));
324
169
    auto *Data =
325
169
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
169
                                 HasAssociatedStmt, NumChildren);
327
169
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
169
    Inst->Data = Data;
329
169
    return Inst;
330
169
  }
clang::OMPForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
355
                                 Params &&... P) {
320
355
    void *Mem =
321
355
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
355
                                                 NumChildren),
323
355
                   alignof(T));
324
355
    auto *Data =
325
355
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
355
                                 HasAssociatedStmt, NumChildren);
327
355
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
355
    Inst->Data = Data;
329
355
    return Inst;
330
355
  }
clang::OMPTileDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTileDirective, clang::SourceLocation, clang::SourceLocation, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, clang::SourceLocation&&, clang::SourceLocation&&, unsigned int&)
Line
Count
Source
319
24
                                 Params &&... P) {
320
24
    void *Mem =
321
24
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
24
                                                 NumChildren),
323
24
                   alignof(T));
324
24
    auto *Data =
325
24
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
24
                                 HasAssociatedStmt, NumChildren);
327
24
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
24
    Inst->Data = Data;
329
24
    return Inst;
330
24
  }
clang::OMPUnrollDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPUnrollDirective, clang::SourceLocation, clang::SourceLocation>(clang::ASTContext const&, unsigned int, bool, unsigned int, clang::SourceLocation&&, clang::SourceLocation&&)
Line
Count
Source
319
24
                                 Params &&... P) {
320
24
    void *Mem =
321
24
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
24
                                                 NumChildren),
323
24
                   alignof(T));
324
24
    auto *Data =
325
24
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
24
                                 HasAssociatedStmt, NumChildren);
327
24
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
24
    Inst->Data = Data;
329
24
    return Inst;
330
24
  }
clang::OMPForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
111
                                 Params &&... P) {
320
111
    void *Mem =
321
111
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
111
                                                 NumChildren),
323
111
                   alignof(T));
324
111
    auto *Data =
325
111
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
111
                                 HasAssociatedStmt, NumChildren);
327
111
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
111
    Inst->Data = Data;
329
111
    return Inst;
330
111
  }
clang::OMPParallelForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
102
                                 Params &&... P) {
320
102
    void *Mem =
321
102
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
102
                                                 NumChildren),
323
102
                   alignof(T));
324
102
    auto *Data =
325
102
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
102
                                 HasAssociatedStmt, NumChildren);
327
102
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
102
    Inst->Data = Data;
329
102
    return Inst;
330
102
  }
clang::OMPParallelForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
118
                                 Params &&... P) {
320
118
    void *Mem =
321
118
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
118
                                                 NumChildren),
323
118
                   alignof(T));
324
118
    auto *Data =
325
118
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
118
                                 HasAssociatedStmt, NumChildren);
327
118
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
118
    Inst->Data = Data;
329
118
    return Inst;
330
118
  }
clang::OMPTargetParallelForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetParallelForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
437
                                 Params &&... P) {
320
437
    void *Mem =
321
437
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
437
                                                 NumChildren),
323
437
                   alignof(T));
324
437
    auto *Data =
325
437
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
437
                                 HasAssociatedStmt, NumChildren);
327
437
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
437
    Inst->Data = Data;
329
437
    return Inst;
330
437
  }
clang::OMPTaskLoopDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTaskLoopDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
36
                                 Params &&... P) {
320
36
    void *Mem =
321
36
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
36
                                                 NumChildren),
323
36
                   alignof(T));
324
36
    auto *Data =
325
36
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
36
                                 HasAssociatedStmt, NumChildren);
327
36
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
36
    Inst->Data = Data;
329
36
    return Inst;
330
36
  }
clang::OMPTaskLoopSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTaskLoopSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
46
                                 Params &&... P) {
320
46
    void *Mem =
321
46
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
46
                                                 NumChildren),
323
46
                   alignof(T));
324
46
    auto *Data =
325
46
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
46
                                 HasAssociatedStmt, NumChildren);
327
46
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
46
    Inst->Data = Data;
329
46
    return Inst;
330
46
  }
clang::OMPMasterTaskLoopDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPMasterTaskLoopDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
32
                                 Params &&... P) {
320
32
    void *Mem =
321
32
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
32
                                                 NumChildren),
323
32
                   alignof(T));
324
32
    auto *Data =
325
32
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
32
                                 HasAssociatedStmt, NumChildren);
327
32
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
32
    Inst->Data = Data;
329
32
    return Inst;
330
32
  }
clang::OMPMasterTaskLoopSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPMasterTaskLoopSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
46
                                 Params &&... P) {
320
46
    void *Mem =
321
46
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
46
                                                 NumChildren),
323
46
                   alignof(T));
324
46
    auto *Data =
325
46
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
46
                                 HasAssociatedStmt, NumChildren);
327
46
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
46
    Inst->Data = Data;
329
46
    return Inst;
330
46
  }
clang::OMPParallelMasterTaskLoopDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelMasterTaskLoopDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
30
                                 Params &&... P) {
320
30
    void *Mem =
321
30
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
30
                                                 NumChildren),
323
30
                   alignof(T));
324
30
    auto *Data =
325
30
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
30
                                 HasAssociatedStmt, NumChildren);
327
30
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
30
    Inst->Data = Data;
329
30
    return Inst;
330
30
  }
clang::OMPParallelMasterTaskLoopSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelMasterTaskLoopSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
44
                                 Params &&... P) {
320
44
    void *Mem =
321
44
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
44
                                                 NumChildren),
323
44
                   alignof(T));
324
44
    auto *Data =
325
44
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
44
                                 HasAssociatedStmt, NumChildren);
327
44
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
44
    Inst->Data = Data;
329
44
    return Inst;
330
44
  }
clang::OMPDistributeDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPDistributeDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
140
                                 Params &&... P) {
320
140
    void *Mem =
321
140
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
140
                                                 NumChildren),
323
140
                   alignof(T));
324
140
    auto *Data =
325
140
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
140
                                 HasAssociatedStmt, NumChildren);
327
140
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
140
    Inst->Data = Data;
329
140
    return Inst;
330
140
  }
clang::OMPDistributeParallelForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPDistributeParallelForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
280
                                 Params &&... P) {
320
280
    void *Mem =
321
280
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
280
                                                 NumChildren),
323
280
                   alignof(T));
324
280
    auto *Data =
325
280
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
280
                                 HasAssociatedStmt, NumChildren);
327
280
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
280
    Inst->Data = Data;
329
280
    return Inst;
330
280
  }
clang::OMPDistributeParallelForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPDistributeParallelForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
262
                                 Params &&... P) {
320
262
    void *Mem =
321
262
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
262
                                                 NumChildren),
323
262
                   alignof(T));
324
262
    auto *Data =
325
262
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
262
                                 HasAssociatedStmt, NumChildren);
327
262
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
262
    Inst->Data = Data;
329
262
    return Inst;
330
262
  }
clang::OMPDistributeSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPDistributeSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
166
                                 Params &&... P) {
320
166
    void *Mem =
321
166
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
166
                                                 NumChildren),
323
166
                   alignof(T));
324
166
    auto *Data =
325
166
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
166
                                 HasAssociatedStmt, NumChildren);
327
166
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
166
    Inst->Data = Data;
329
166
    return Inst;
330
166
  }
clang::OMPTargetParallelForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetParallelForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
523
                                 Params &&... P) {
320
523
    void *Mem =
321
523
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
523
                                                 NumChildren),
323
523
                   alignof(T));
324
523
    auto *Data =
325
523
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
523
                                 HasAssociatedStmt, NumChildren);
327
523
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
523
    Inst->Data = Data;
329
523
    return Inst;
330
523
  }
clang::OMPTargetSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
495
                                 Params &&... P) {
320
495
    void *Mem =
321
495
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
495
                                                 NumChildren),
323
495
                   alignof(T));
324
495
    auto *Data =
325
495
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
495
                                 HasAssociatedStmt, NumChildren);
327
495
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
495
    Inst->Data = Data;
329
495
    return Inst;
330
495
  }
clang::OMPTeamsDistributeDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTeamsDistributeDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
142
                                 Params &&... P) {
320
142
    void *Mem =
321
142
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
142
                                                 NumChildren),
323
142
                   alignof(T));
324
142
    auto *Data =
325
142
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
142
                                 HasAssociatedStmt, NumChildren);
327
142
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
142
    Inst->Data = Data;
329
142
    return Inst;
330
142
  }
clang::OMPTeamsDistributeSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTeamsDistributeSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
206
                                 Params &&... P) {
320
206
    void *Mem =
321
206
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
206
                                                 NumChildren),
323
206
                   alignof(T));
324
206
    auto *Data =
325
206
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
206
                                 HasAssociatedStmt, NumChildren);
327
206
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
206
    Inst->Data = Data;
329
206
    return Inst;
330
206
  }
clang::OMPTeamsDistributeParallelForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTeamsDistributeParallelForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
370
                                 Params &&... P) {
320
370
    void *Mem =
321
370
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
370
                                                 NumChildren),
323
370
                   alignof(T));
324
370
    auto *Data =
325
370
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
370
                                 HasAssociatedStmt, NumChildren);
327
370
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
370
    Inst->Data = Data;
329
370
    return Inst;
330
370
  }
clang::OMPTeamsDistributeParallelForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTeamsDistributeParallelForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
334
                                 Params &&... P) {
320
334
    void *Mem =
321
334
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
334
                                                 NumChildren),
323
334
                   alignof(T));
324
334
    auto *Data =
325
334
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
334
                                 HasAssociatedStmt, NumChildren);
327
334
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
334
    Inst->Data = Data;
329
334
    return Inst;
330
334
  }
clang::OMPTargetTeamsDistributeDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetTeamsDistributeDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
475
                                 Params &&... P) {
320
475
    void *Mem =
321
475
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
475
                                                 NumChildren),
323
475
                   alignof(T));
324
475
    auto *Data =
325
475
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
475
                                 HasAssociatedStmt, NumChildren);
327
475
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
475
    Inst->Data = Data;
329
475
    return Inst;
330
475
  }
clang::OMPTargetTeamsDistributeParallelForDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetTeamsDistributeParallelForDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
445
                                 Params &&... P) {
320
445
    void *Mem =
321
445
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
445
                                                 NumChildren),
323
445
                   alignof(T));
324
445
    auto *Data =
325
445
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
445
                                 HasAssociatedStmt, NumChildren);
327
445
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
445
    Inst->Data = Data;
329
445
    return Inst;
330
445
  }
clang::OMPTargetTeamsDistributeParallelForSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetTeamsDistributeParallelForSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
569
                                 Params &&... P) {
320
569
    void *Mem =
321
569
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
569
                                                 NumChildren),
323
569
                   alignof(T));
324
569
    auto *Data =
325
569
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
569
                                 HasAssociatedStmt, NumChildren);
327
569
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
569
    Inst->Data = Data;
329
569
    return Inst;
330
569
  }
clang::OMPTargetTeamsDistributeSimdDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetTeamsDistributeSimdDirective, unsigned int&>(clang::ASTContext const&, unsigned int, bool, unsigned int, unsigned int&)
Line
Count
Source
319
547
                                 Params &&... P) {
320
547
    void *Mem =
321
547
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
322
547
                                                 NumChildren),
323
547
                   alignof(T));
324
547
    auto *Data =
325
547
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
326
547
                                 HasAssociatedStmt, NumChildren);
327
547
    auto *Inst = new (Mem) T(std::forward<Params>(P)...);
328
547
    Inst->Data = Data;
329
547
    return Inst;
330
547
  }
331
332
  template <typename T>
333
  static T *createEmptyDirective(const ASTContext &C, unsigned NumClauses,
334
                                 bool HasAssociatedStmt = false,
335
10.6k
                                 unsigned NumChildren = 0) {
336
10.6k
    void *Mem =
337
10.6k
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
10.6k
                                                 NumChildren),
339
10.6k
                   alignof(T));
340
10.6k
    auto *Data =
341
10.6k
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
10.6k
                                 HasAssociatedStmt, NumChildren);
343
10.6k
    auto *Inst = new (Mem) T;
344
10.6k
    Inst->Data = Data;
345
10.6k
    return Inst;
346
10.6k
  }
Unexecuted instantiation: clang::OMPMetaDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPMetaDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
clang::OMPParallelDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
740
                                 unsigned NumChildren = 0) {
336
740
    void *Mem =
337
740
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
740
                                                 NumChildren),
339
740
                   alignof(T));
340
740
    auto *Data =
341
740
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
740
                                 HasAssociatedStmt, NumChildren);
343
740
    auto *Inst = new (Mem) T;
344
740
    Inst->Data = Data;
345
740
    return Inst;
346
740
  }
clang::OMPSectionsDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPSectionsDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
58
                                 unsigned NumChildren = 0) {
336
58
    void *Mem =
337
58
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
58
                                                 NumChildren),
339
58
                   alignof(T));
340
58
    auto *Data =
341
58
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
58
                                 HasAssociatedStmt, NumChildren);
343
58
    auto *Inst = new (Mem) T;
344
58
    Inst->Data = Data;
345
58
    return Inst;
346
58
  }
clang::OMPSectionDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPSectionDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
50
                                 unsigned NumChildren = 0) {
336
50
    void *Mem =
337
50
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
50
                                                 NumChildren),
339
50
                   alignof(T));
340
50
    auto *Data =
341
50
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
50
                                 HasAssociatedStmt, NumChildren);
343
50
    auto *Inst = new (Mem) T;
344
50
    Inst->Data = Data;
345
50
    return Inst;
346
50
  }
clang::OMPSingleDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPSingleDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
45
                                 unsigned NumChildren = 0) {
336
45
    void *Mem =
337
45
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
45
                                                 NumChildren),
339
45
                   alignof(T));
340
45
    auto *Data =
341
45
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
45
                                 HasAssociatedStmt, NumChildren);
343
45
    auto *Inst = new (Mem) T;
344
45
    Inst->Data = Data;
345
45
    return Inst;
346
45
  }
clang::OMPMasterDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPMasterDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
17
                                 unsigned NumChildren = 0) {
336
17
    void *Mem =
337
17
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
17
                                                 NumChildren),
339
17
                   alignof(T));
340
17
    auto *Data =
341
17
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
17
                                 HasAssociatedStmt, NumChildren);
343
17
    auto *Inst = new (Mem) T;
344
17
    Inst->Data = Data;
345
17
    return Inst;
346
17
  }
clang::OMPCriticalDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPCriticalDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
73
                                 unsigned NumChildren = 0) {
336
73
    void *Mem =
337
73
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
73
                                                 NumChildren),
339
73
                   alignof(T));
340
73
    auto *Data =
341
73
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
73
                                 HasAssociatedStmt, NumChildren);
343
73
    auto *Inst = new (Mem) T;
344
73
    Inst->Data = Data;
345
73
    return Inst;
346
73
  }
clang::OMPParallelMasterDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelMasterDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
63
                                 unsigned NumChildren = 0) {
336
63
    void *Mem =
337
63
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
63
                                                 NumChildren),
339
63
                   alignof(T));
340
63
    auto *Data =
341
63
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
63
                                 HasAssociatedStmt, NumChildren);
343
63
    auto *Inst = new (Mem) T;
344
63
    Inst->Data = Data;
345
63
    return Inst;
346
63
  }
clang::OMPParallelSectionsDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPParallelSectionsDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
32
                                 unsigned NumChildren = 0) {
336
32
    void *Mem =
337
32
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
32
                                                 NumChildren),
339
32
                   alignof(T));
340
32
    auto *Data =
341
32
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
32
                                 HasAssociatedStmt, NumChildren);
343
32
    auto *Inst = new (Mem) T;
344
32
    Inst->Data = Data;
345
32
    return Inst;
346
32
  }
clang::OMPTaskDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTaskDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
185
                                 unsigned NumChildren = 0) {
336
185
    void *Mem =
337
185
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
185
                                                 NumChildren),
339
185
                   alignof(T));
340
185
    auto *Data =
341
185
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
185
                                 HasAssociatedStmt, NumChildren);
343
185
    auto *Inst = new (Mem) T;
344
185
    Inst->Data = Data;
345
185
    return Inst;
346
185
  }
clang::OMPTaskgroupDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTaskgroupDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
88
                                 unsigned NumChildren = 0) {
336
88
    void *Mem =
337
88
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
88
                                                 NumChildren),
339
88
                   alignof(T));
340
88
    auto *Data =
341
88
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
88
                                 HasAssociatedStmt, NumChildren);
343
88
    auto *Inst = new (Mem) T;
344
88
    Inst->Data = Data;
345
88
    return Inst;
346
88
  }
clang::OMPCancelDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPCancelDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
162
                                 unsigned NumChildren = 0) {
336
162
    void *Mem =
337
162
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
162
                                                 NumChildren),
339
162
                   alignof(T));
340
162
    auto *Data =
341
162
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
162
                                 HasAssociatedStmt, NumChildren);
343
162
    auto *Inst = new (Mem) T;
344
162
    Inst->Data = Data;
345
162
    return Inst;
346
162
  }
clang::OMPFlushDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPFlushDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
50
                                 unsigned NumChildren = 0) {
336
50
    void *Mem =
337
50
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
50
                                                 NumChildren),
339
50
                   alignof(T));
340
50
    auto *Data =
341
50
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
50
                                 HasAssociatedStmt, NumChildren);
343
50
    auto *Inst = new (Mem) T;
344
50
    Inst->Data = Data;
345
50
    return Inst;
346
50
  }
clang::OMPDepobjDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPDepobjDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
28
                                 unsigned NumChildren = 0) {
336
28
    void *Mem =
337
28
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
28
                                                 NumChildren),
339
28
                   alignof(T));
340
28
    auto *Data =
341
28
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
28
                                 HasAssociatedStmt, NumChildren);
343
28
    auto *Inst = new (Mem) T;
344
28
    Inst->Data = Data;
345
28
    return Inst;
346
28
  }
clang::OMPScanDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPScanDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
24
                                 unsigned NumChildren = 0) {
336
24
    void *Mem =
337
24
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
24
                                                 NumChildren),
339
24
                   alignof(T));
340
24
    auto *Data =
341
24
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
24
                                 HasAssociatedStmt, NumChildren);
343
24
    auto *Inst = new (Mem) T;
344
24
    Inst->Data = Data;
345
24
    return Inst;
346
24
  }
clang::OMPOrderedDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPOrderedDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
82
                                 unsigned NumChildren = 0) {
336
82
    void *Mem =
337
82
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
82
                                                 NumChildren),
339
82
                   alignof(T));
340
82
    auto *Data =
341
82
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
82
                                 HasAssociatedStmt, NumChildren);
343
82
    auto *Inst = new (Mem) T;
344
82
    Inst->Data = Data;
345
82
    return Inst;
346
82
  }
clang::OMPAtomicDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPAtomicDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
682
                                 unsigned NumChildren = 0) {
336
682
    void *Mem =
337
682
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
682
                                                 NumChildren),
339
682
                   alignof(T));
340
682
    auto *Data =
341
682
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
682
                                 HasAssociatedStmt, NumChildren);
343
682
    auto *Inst = new (Mem) T;
344
682
    Inst->Data = Data;
345
682
    return Inst;
346
682
  }
clang::OMPTargetDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
4.57k
                                 unsigned NumChildren = 0) {
336
4.57k
    void *Mem =
337
4.57k
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
4.57k
                                                 NumChildren),
339
4.57k
                   alignof(T));
340
4.57k
    auto *Data =
341
4.57k
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
4.57k
                                 HasAssociatedStmt, NumChildren);
343
4.57k
    auto *Inst = new (Mem) T;
344
4.57k
    Inst->Data = Data;
345
4.57k
    return Inst;
346
4.57k
  }
clang::OMPTargetParallelDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetParallelDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
623
                                 unsigned NumChildren = 0) {
336
623
    void *Mem =
337
623
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
623
                                                 NumChildren),
339
623
                   alignof(T));
340
623
    auto *Data =
341
623
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
623
                                 HasAssociatedStmt, NumChildren);
343
623
    auto *Inst = new (Mem) T;
344
623
    Inst->Data = Data;
345
623
    return Inst;
346
623
  }
clang::OMPTargetDataDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetDataDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
254
                                 unsigned NumChildren = 0) {
336
254
    void *Mem =
337
254
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
254
                                                 NumChildren),
339
254
                   alignof(T));
340
254
    auto *Data =
341
254
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
254
                                 HasAssociatedStmt, NumChildren);
343
254
    auto *Inst = new (Mem) T;
344
254
    Inst->Data = Data;
345
254
    return Inst;
346
254
  }
clang::OMPTargetEnterDataDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetEnterDataDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
289
                                 unsigned NumChildren = 0) {
336
289
    void *Mem =
337
289
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
289
                                                 NumChildren),
339
289
                   alignof(T));
340
289
    auto *Data =
341
289
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
289
                                 HasAssociatedStmt, NumChildren);
343
289
    auto *Inst = new (Mem) T;
344
289
    Inst->Data = Data;
345
289
    return Inst;
346
289
  }
clang::OMPTargetExitDataDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetExitDataDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
277
                                 unsigned NumChildren = 0) {
336
277
    void *Mem =
337
277
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
277
                                                 NumChildren),
339
277
                   alignof(T));
340
277
    auto *Data =
341
277
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
277
                                 HasAssociatedStmt, NumChildren);
343
277
    auto *Inst = new (Mem) T;
344
277
    Inst->Data = Data;
345
277
    return Inst;
346
277
  }
clang::OMPTeamsDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTeamsDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
956
                                 unsigned NumChildren = 0) {
336
956
    void *Mem =
337
956
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
956
                                                 NumChildren),
339
956
                   alignof(T));
340
956
    auto *Data =
341
956
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
956
                                 HasAssociatedStmt, NumChildren);
343
956
    auto *Inst = new (Mem) T;
344
956
    Inst->Data = Data;
345
956
    return Inst;
346
956
  }
clang::OMPTargetUpdateDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetUpdateDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
404
                                 unsigned NumChildren = 0) {
336
404
    void *Mem =
337
404
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
404
                                                 NumChildren),
339
404
                   alignof(T));
340
404
    auto *Data =
341
404
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
404
                                 HasAssociatedStmt, NumChildren);
343
404
    auto *Inst = new (Mem) T;
344
404
    Inst->Data = Data;
345
404
    return Inst;
346
404
  }
clang::OMPTargetTeamsDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPTargetTeamsDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
731
                                 unsigned NumChildren = 0) {
336
731
    void *Mem =
337
731
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
731
                                                 NumChildren),
339
731
                   alignof(T));
340
731
    auto *Data =
341
731
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
731
                                 HasAssociatedStmt, NumChildren);
343
731
    auto *Inst = new (Mem) T;
344
731
    Inst->Data = Data;
345
731
    return Inst;
346
731
  }
clang::OMPInteropDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPInteropDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
48
                                 unsigned NumChildren = 0) {
336
48
    void *Mem =
337
48
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
48
                                                 NumChildren),
339
48
                   alignof(T));
340
48
    auto *Data =
341
48
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
48
                                 HasAssociatedStmt, NumChildren);
343
48
    auto *Inst = new (Mem) T;
344
48
    Inst->Data = Data;
345
48
    return Inst;
346
48
  }
clang::OMPDispatchDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPDispatchDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
40
                                 unsigned NumChildren = 0) {
336
40
    void *Mem =
337
40
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
40
                                                 NumChildren),
339
40
                   alignof(T));
340
40
    auto *Data =
341
40
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
40
                                 HasAssociatedStmt, NumChildren);
343
40
    auto *Inst = new (Mem) T;
344
40
    Inst->Data = Data;
345
40
    return Inst;
346
40
  }
clang::OMPMaskedDirective* clang::OMPExecutableDirective::createEmptyDirective<clang::OMPMaskedDirective>(clang::ASTContext const&, unsigned int, bool, unsigned int)
Line
Count
Source
335
30
                                 unsigned NumChildren = 0) {
336
30
    void *Mem =
337
30
        C.Allocate(sizeof(T) + OMPChildren::size(NumClauses, HasAssociatedStmt,
338
30
                                                 NumChildren),
339
30
                   alignof(T));
340
30
    auto *Data =
341
30
        OMPChildren::CreateEmpty(reinterpret_cast<T *>(Mem) + 1, NumClauses,
342
30
                                 HasAssociatedStmt, NumChildren);
343
30
    auto *Inst = new (Mem) T;
344
30
    Inst->Data = Data;
345
30
    return Inst;
346
30
  }
347
348
public:
349
  /// Iterates over expressions/statements used in the construct.
350
  class used_clauses_child_iterator
351
      : public llvm::iterator_adaptor_base<
352
            used_clauses_child_iterator, ArrayRef<OMPClause *>::iterator,
353
            std::forward_iterator_tag, Stmt *, ptrdiff_t, Stmt *, Stmt *> {
354
    ArrayRef<OMPClause *>::iterator End;
355
    OMPClause::child_iterator ChildI, ChildEnd;
356
357
65.2k
    void MoveToNext() {
358
65.2k
      if (ChildI != ChildEnd)
359
25.8k
        return;
360
52.6k
      
while (39.4k
this->I != End) {
361
18.2k
        ++this->I;
362
18.2k
        if (this->I != End) {
363
10.3k
          ChildI = (*this->I)->used_children().begin();
364
10.3k
          ChildEnd = (*this->I)->used_children().end();
365
10.3k
          if (ChildI != ChildEnd)
366
5.11k
            return;
367
10.3k
        }
368
18.2k
      }
369
39.4k
    }
370
371
  public:
372
    explicit used_clauses_child_iterator(ArrayRef<OMPClause *> Clauses)
373
        : used_clauses_child_iterator::iterator_adaptor_base(Clauses.begin()),
374
48.4k
          End(Clauses.end()) {
375
48.4k
      if (this->I != End) {
376
21.3k
        ChildI = (*this->I)->used_children().begin();
377
21.3k
        ChildEnd = (*this->I)->used_children().end();
378
21.3k
        MoveToNext();
379
21.3k
      }
380
48.4k
    }
381
30.8k
    Stmt *operator*() const { return *ChildI; }
382
0
    Stmt *operator->() const { return **this; }
383
384
58.4k
    used_clauses_child_iterator &operator++() {
385
58.4k
      ++ChildI;
386
58.4k
      if (ChildI != ChildEnd)
387
14.5k
        return *this;
388
43.9k
      if (this->I != End) {
389
43.9k
        ++this->I;
390
43.9k
        if (this->I != End) {
391
17.5k
          ChildI = (*this->I)->used_children().begin();
392
17.5k
          ChildEnd = (*this->I)->used_children().end();
393
17.5k
        }
394
43.9k
      }
395
43.9k
      MoveToNext();
396
43.9k
      return *this;
397
58.4k
    }
398
  };
399
400
  static llvm::iterator_range<used_clauses_child_iterator>
401
24.2k
  used_clauses_children(ArrayRef<OMPClause *> Clauses) {
402
24.2k
    return {used_clauses_child_iterator(Clauses),
403
24.2k
            used_clauses_child_iterator(llvm::makeArrayRef(Clauses.end(), 0))};
404
24.2k
  }
405
406
  /// Iterates over a filtered subrange of clauses applied to a
407
  /// directive.
408
  ///
409
  /// This iterator visits only clauses of type SpecificClause.
410
  template <typename SpecificClause>
411
  class specific_clause_iterator
412
      : public llvm::iterator_adaptor_base<
413
            specific_clause_iterator<SpecificClause>,
414
            ArrayRef<OMPClause *>::const_iterator, std::forward_iterator_tag,
415
            const SpecificClause *, ptrdiff_t, const SpecificClause *,
416
            const SpecificClause *> {
417
    ArrayRef<OMPClause *>::const_iterator End;
418
419
1.72M
    void SkipToNextClause() {
420
2.67M
      while (this->I != End && 
!isa<SpecificClause>(*this->I)1.01M
)
421
949k
        ++this->I;
422
1.72M
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause>::SkipToNextClause()
Line
Count
Source
419
22.0k
    void SkipToNextClause() {
420
36.9k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)15.7k
)
421
14.9k
        ++this->I;
422
22.0k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCollapseClause>::SkipToNextClause()
Line
Count
Source
419
294k
    void SkipToNextClause() {
420
398k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)108k
)
421
103k
        ++this->I;
422
294k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause>::SkipToNextClause()
Line
Count
Source
419
160k
    void SkipToNextClause() {
420
239k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)79.8k
)
421
78.5k
        ++this->I;
422
160k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPHintClause>::SkipToNextClause()
Line
Count
Source
419
220
    void SkipToNextClause() {
420
220
      while (this->I != End && 
!isa<SpecificClause>(*this->I)12
)
421
0
        ++this->I;
422
220
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSizesClause>::SkipToNextClause()
Line
Count
Source
419
162
    void SkipToNextClause() {
420
162
      while (this->I != End && 
!isa<SpecificClause>(*this->I)70
)
421
0
        ++this->I;
422
162
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFullClause>::SkipToNextClause()
Line
Count
Source
419
233
    void SkipToNextClause() {
420
301
      while (this->I != End && 
!isa<SpecificClause>(*this->I)84
)
421
68
        ++this->I;
422
233
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPartialClause>::SkipToNextClause()
Line
Count
Source
419
282
    void SkipToNextClause() {
420
295
      while (this->I != End && 
!isa<SpecificClause>(*this->I)81
)
421
13
        ++this->I;
422
282
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause>::SkipToNextClause()
Line
Count
Source
419
3.47k
    void SkipToNextClause() {
420
7.95k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)4.48k
)
421
4.48k
        ++this->I;
422
3.47k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause>::SkipToNextClause()
Line
Count
Source
419
42.6k
    void SkipToNextClause() {
420
71.1k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)29.4k
)
421
28.4k
        ++this->I;
422
42.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDeviceClause>::SkipToNextClause()
Line
Count
Source
419
20.7k
    void SkipToNextClause() {
420
35.3k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)15.0k
)
421
14.5k
        ++this->I;
422
20.7k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause>::SkipToNextClause()
Line
Count
Source
419
1.78k
    void SkipToNextClause() {
420
4.01k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)2.25k
)
421
2.23k
        ++this->I;
422
1.78k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause>::SkipToNextClause()
Line
Count
Source
419
41.1k
    void SkipToNextClause() {
420
70.0k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)28.9k
)
421
28.9k
        ++this->I;
422
41.1k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause>::SkipToNextClause()
Line
Count
Source
419
34.3k
    void SkipToNextClause() {
420
52.2k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)20.5k
)
421
17.9k
        ++this->I;
422
34.3k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause>::SkipToNextClause()
Line
Count
Source
419
60.0k
    void SkipToNextClause() {
420
91.9k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)37.3k
)
421
31.8k
        ++this->I;
422
60.0k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause>::SkipToNextClause()
Line
Count
Source
419
25.4k
    void SkipToNextClause() {
420
41.7k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)17.2k
)
421
16.2k
        ++this->I;
422
25.4k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause>::SkipToNextClause()
Line
Count
Source
419
30.9k
    void SkipToNextClause() {
420
50.7k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)21.2k
)
421
19.8k
        ++this->I;
422
30.9k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause>::SkipToNextClause()
Line
Count
Source
419
142k
    void SkipToNextClause() {
420
198k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)77.2k
)
421
55.3k
        ++this->I;
422
142k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause>::SkipToNextClause()
Line
Count
Source
419
18.6k
    void SkipToNextClause() {
420
31.3k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)12.7k
)
421
12.6k
        ++this->I;
422
18.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause>::SkipToNextClause()
Line
Count
Source
419
29.9k
    void SkipToNextClause() {
420
44.4k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)21.5k
)
421
14.5k
        ++this->I;
422
29.9k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause>::SkipToNextClause()
Line
Count
Source
419
27.4k
    void SkipToNextClause() {
420
46.7k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)19.5k
)
421
19.3k
        ++this->I;
422
27.4k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause>::SkipToNextClause()
Line
Count
Source
419
141k
    void SkipToNextClause() {
420
229k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)90.4k
)
421
88.0k
        ++this->I;
422
141k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause>::SkipToNextClause()
Line
Count
Source
419
145k
    void SkipToNextClause() {
420
233k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)91.7k
)
421
88.8k
        ++this->I;
422
145k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause>::SkipToNextClause()
Line
Count
Source
419
227k
    void SkipToNextClause() {
420
368k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)147k
)
421
141k
        ++this->I;
422
227k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause>::SkipToNextClause()
Line
Count
Source
419
127k
    void SkipToNextClause() {
420
209k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)84.6k
)
421
82.1k
        ++this->I;
422
127k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSimdlenClause>::SkipToNextClause()
Line
Count
Source
419
17.5k
    void SkipToNextClause() {
420
29.9k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)12.7k
)
421
12.4k
        ++this->I;
422
17.5k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSafelenClause>::SkipToNextClause()
Line
Count
Source
419
17.4k
    void SkipToNextClause() {
420
29.9k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)12.7k
)
421
12.5k
        ++this->I;
422
17.4k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause>::SkipToNextClause()
Line
Count
Source
419
27.0k
    void SkipToNextClause() {
420
45.8k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)19.0k
)
421
18.7k
        ++this->I;
422
27.0k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause>::SkipToNextClause()
Line
Count
Source
419
2.05k
    void SkipToNextClause() {
420
2.48k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)454
)
421
428
        ++this->I;
422
2.05k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPProcBindClause>::SkipToNextClause()
Line
Count
Source
419
12.5k
    void SkipToNextClause() {
420
20.2k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)7.76k
)
421
7.67k
        ++this->I;
422
12.5k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderClause>::SkipToNextClause()
Line
Count
Source
419
22.5k
    void SkipToNextClause() {
420
38.7k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)16.2k
)
421
16.2k
        ++this->I;
422
22.5k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause>::SkipToNextClause()
Line
Count
Source
419
11.6k
    void SkipToNextClause() {
420
16.9k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)6.82k
)
421
5.25k
        ++this->I;
422
11.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause>::SkipToNextClause()
Line
Count
Source
419
142
    void SkipToNextClause() {
420
161
      while (this->I != End && 
!isa<SpecificClause>(*this->I)47
)
421
19
        ++this->I;
422
142
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFilterClause>::SkipToNextClause()
Line
Count
Source
419
110
    void SkipToNextClause() {
420
110
      while (this->I != End && 
!isa<SpecificClause>(*this->I)30
)
421
0
        ++this->I;
422
110
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFinalClause>::SkipToNextClause()
Line
Count
Source
419
840
    void SkipToNextClause() {
420
1.44k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)625
)
421
603
        ++this->I;
422
840
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPriorityClause>::SkipToNextClause()
Line
Count
Source
419
840
    void SkipToNextClause() {
420
1.44k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)625
)
421
603
        ++this->I;
422
840
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause>::SkipToNextClause()
Line
Count
Source
419
862
    void SkipToNextClause() {
420
1.44k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)625
)
421
581
        ++this->I;
422
862
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUntiedClause>::SkipToNextClause()
Line
Count
Source
419
382
    void SkipToNextClause() {
420
605
      while (this->I != End && 
!isa<SpecificClause>(*this->I)239
)
421
223
        ++this->I;
422
382
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause>::SkipToNextClause()
Line
Count
Source
419
78
    void SkipToNextClause() {
420
81
      while (this->I != End && 
!isa<SpecificClause>(*this->I)29
)
421
3
        ++this->I;
422
78
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFlushClause>::SkipToNextClause()
Line
Count
Source
419
176
    void SkipToNextClause() {
420
224
      while (this->I != End && 
!isa<SpecificClause>(*this->I)64
)
421
48
        ++this->I;
422
176
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDepobjClause>::SkipToNextClause()
Line
Count
Source
419
42
    void SkipToNextClause() {
420
56
      while (this->I != End && 
!isa<SpecificClause>(*this->I)28
)
421
14
        ++this->I;
422
42
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDestroyClause>::SkipToNextClause()
Line
Count
Source
419
20
    void SkipToNextClause() {
420
32
      while (this->I != End && 
!isa<SpecificClause>(*this->I)16
)
421
12
        ++this->I;
422
20
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUpdateClause>::SkipToNextClause()
Line
Count
Source
419
12
    void SkipToNextClause() {
420
16
      while (this->I != End && 
!isa<SpecificClause>(*this->I)8
)
421
4
        ++this->I;
422
12
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInclusiveClause>::SkipToNextClause()
Line
Count
Source
419
96
    void SkipToNextClause() {
420
120
      while (this->I != End && 
!isa<SpecificClause>(*this->I)48
)
421
24
        ++this->I;
422
96
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDistScheduleClause>::SkipToNextClause()
Line
Count
Source
419
9.43k
    void SkipToNextClause() {
420
15.3k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)6.38k
)
421
5.93k
        ++this->I;
422
9.43k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSIMDClause>::SkipToNextClause()
Line
Count
Source
419
112
    void SkipToNextClause() {
420
128
      while (this->I != End && 
!isa<SpecificClause>(*this->I)32
)
421
16
        ++this->I;
422
112
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSeqCstClause>::SkipToNextClause()
Line
Count
Source
419
1.15k
    void SkipToNextClause() {
420
1.67k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)564
)
421
524
        ++this->I;
422
1.15k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcqRelClause>::SkipToNextClause()
Line
Count
Source
419
1.03k
    void SkipToNextClause() {
420
1.51k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)488
)
421
484
        ++this->I;
422
1.03k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcquireClause>::SkipToNextClause()
Line
Count
Source
419
1.02k
    void SkipToNextClause() {
420
1.50k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)480
)
421
474
        ++this->I;
422
1.02k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReleaseClause>::SkipToNextClause()
Line
Count
Source
419
1.01k
    void SkipToNextClause() {
420
1.47k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)468
)
421
460
        ++this->I;
422
1.01k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPRelaxedClause>::SkipToNextClause()
Line
Count
Source
419
1.01k
    void SkipToNextClause() {
420
1.44k
      while (this->I != End && 
!isa<SpecificClause>(*this->I)452
)
421
430
        ++this->I;
422
1.01k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause>::SkipToNextClause()
Line
Count
Source
419
216
    void SkipToNextClause() {
420
300
      while (this->I != End && 
!isa<SpecificClause>(*this->I)156
)
421
84
        ++this->I;
422
216
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause>::SkipToNextClause()
Line
Count
Source
419
148
    void SkipToNextClause() {
420
300
      while (this->I != End && 
!isa<SpecificClause>(*this->I)156
)
421
152
        ++this->I;
422
148
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNogroupClause>::SkipToNextClause()
Line
Count
Source
419
470
    void SkipToNextClause() {
420
838
      while (this->I != End && 
!isa<SpecificClause>(*this->I)386
)
421
368
        ++this->I;
422
470
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPGrainsizeClause>::SkipToNextClause()
Line
Count
Source
419
470
    void SkipToNextClause() {
420
838
      while (this->I != End && 
!isa<SpecificClause>(*this->I)386
)
421
368
        ++this->I;
422
470
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTasksClause>::SkipToNextClause()
Line
Count
Source
419
452
    void SkipToNextClause() {
420
754
      while (this->I != End && 
!isa<SpecificClause>(*this->I)338
)
421
302
        ++this->I;
422
452
    }
423
424
  public:
425
    explicit specific_clause_iterator(ArrayRef<OMPClause *> Clauses)
426
        : specific_clause_iterator::iterator_adaptor_base(Clauses.begin()),
427
1.67M
          End(Clauses.end()) {
428
1.67M
      SkipToNextClause();
429
1.67M
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
21.5k
          End(Clauses.end()) {
428
21.5k
      SkipToNextClause();
429
21.5k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCollapseClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
294k
          End(Clauses.end()) {
428
294k
      SkipToNextClause();
429
294k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
160k
          End(Clauses.end()) {
428
160k
      SkipToNextClause();
429
160k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPHintClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
208
          End(Clauses.end()) {
428
208
      SkipToNextClause();
429
208
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSizesClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
162
          End(Clauses.end()) {
428
162
      SkipToNextClause();
429
162
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFullClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
220
          End(Clauses.end()) {
428
220
      SkipToNextClause();
429
220
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPartialClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
214
          End(Clauses.end()) {
428
214
      SkipToNextClause();
429
214
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
3.47k
          End(Clauses.end()) {
428
3.47k
      SkipToNextClause();
429
3.47k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
42.6k
          End(Clauses.end()) {
428
42.6k
      SkipToNextClause();
429
42.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDeviceClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
20.3k
          End(Clauses.end()) {
428
20.3k
      SkipToNextClause();
429
20.3k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
1.76k
          End(Clauses.end()) {
428
1.76k
      SkipToNextClause();
429
1.76k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
41.0k
          End(Clauses.end()) {
428
41.0k
      SkipToNextClause();
429
41.0k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
32.7k
          End(Clauses.end()) {
428
32.7k
      SkipToNextClause();
429
32.7k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
57.6k
          End(Clauses.end()) {
428
57.6k
      SkipToNextClause();
429
57.6k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
24.8k
          End(Clauses.end()) {
428
24.8k
      SkipToNextClause();
429
24.8k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
30.0k
          End(Clauses.end()) {
428
30.0k
      SkipToNextClause();
429
30.0k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
120k
          End(Clauses.end()) {
428
120k
      SkipToNextClause();
429
120k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
18.5k
          End(Clauses.end()) {
428
18.5k
      SkipToNextClause();
429
18.5k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
22.9k
          End(Clauses.end()) {
428
22.9k
      SkipToNextClause();
429
22.9k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
27.2k
          End(Clauses.end()) {
428
27.2k
      SkipToNextClause();
429
27.2k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
138k
          End(Clauses.end()) {
428
138k
      SkipToNextClause();
429
138k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
142k
          End(Clauses.end()) {
428
142k
      SkipToNextClause();
429
142k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
221k
          End(Clauses.end()) {
428
221k
      SkipToNextClause();
429
221k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
125k
          End(Clauses.end()) {
428
125k
      SkipToNextClause();
429
125k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSimdlenClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
17.2k
          End(Clauses.end()) {
428
17.2k
      SkipToNextClause();
429
17.2k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSafelenClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
17.2k
          End(Clauses.end()) {
428
17.2k
      SkipToNextClause();
429
17.2k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
26.7k
          End(Clauses.end()) {
428
26.7k
      SkipToNextClause();
429
26.7k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
2.03k
          End(Clauses.end()) {
428
2.03k
      SkipToNextClause();
429
2.03k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPProcBindClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
12.4k
          End(Clauses.end()) {
428
12.4k
      SkipToNextClause();
429
12.4k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
22.5k
          End(Clauses.end()) {
428
22.5k
      SkipToNextClause();
429
22.5k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
10.3k
          End(Clauses.end()) {
428
10.3k
      SkipToNextClause();
429
10.3k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
114
          End(Clauses.end()) {
428
114
      SkipToNextClause();
429
114
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFilterClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
80
          End(Clauses.end()) {
428
80
      SkipToNextClause();
429
80
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFinalClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
818
          End(Clauses.end()) {
428
818
      SkipToNextClause();
429
818
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPriorityClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
818
          End(Clauses.end()) {
428
818
      SkipToNextClause();
429
818
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
818
          End(Clauses.end()) {
428
818
      SkipToNextClause();
429
818
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUntiedClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
366
          End(Clauses.end()) {
428
366
      SkipToNextClause();
429
366
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
52
          End(Clauses.end()) {
428
52
      SkipToNextClause();
429
52
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFlushClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
160
          End(Clauses.end()) {
428
160
      SkipToNextClause();
429
160
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDepobjClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
28
          End(Clauses.end()) {
428
28
      SkipToNextClause();
429
28
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDestroyClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
16
          End(Clauses.end()) {
428
16
      SkipToNextClause();
429
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUpdateClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
8
          End(Clauses.end()) {
428
8
      SkipToNextClause();
429
8
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInclusiveClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
96
          End(Clauses.end()) {
428
96
      SkipToNextClause();
429
96
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDistScheduleClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
8.99k
          End(Clauses.end()) {
428
8.99k
      SkipToNextClause();
429
8.99k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSIMDClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
96
          End(Clauses.end()) {
428
96
      SkipToNextClause();
429
96
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSeqCstClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
1.11k
          End(Clauses.end()) {
428
1.11k
      SkipToNextClause();
429
1.11k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcqRelClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
1.03k
          End(Clauses.end()) {
428
1.03k
      SkipToNextClause();
429
1.03k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcquireClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
1.02k
          End(Clauses.end()) {
428
1.02k
      SkipToNextClause();
429
1.02k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReleaseClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
1.01k
          End(Clauses.end()) {
428
1.01k
      SkipToNextClause();
429
1.01k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPRelaxedClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
994
          End(Clauses.end()) {
428
994
      SkipToNextClause();
429
994
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
144
          End(Clauses.end()) {
428
144
      SkipToNextClause();
429
144
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
144
          End(Clauses.end()) {
428
144
      SkipToNextClause();
429
144
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNogroupClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
452
          End(Clauses.end()) {
428
452
      SkipToNextClause();
429
452
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPGrainsizeClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
452
          End(Clauses.end()) {
428
452
      SkipToNextClause();
429
452
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTasksClause>::specific_clause_iterator(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
427
416
          End(Clauses.end()) {
428
416
      SkipToNextClause();
429
416
    }
430
431
60.8k
    const SpecificClause *operator*() const {
432
60.8k
      return cast<SpecificClause>(*this->I);
433
60.8k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCollapseClause>::operator*() const
Line
Count
Source
431
5.06k
    const SpecificClause *operator*() const {
432
5.06k
      return cast<SpecificClause>(*this->I);
433
5.06k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause>::operator*() const
Line
Count
Source
431
1.29k
    const SpecificClause *operator*() const {
432
1.29k
      return cast<SpecificClause>(*this->I);
433
1.29k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPHintClause>::operator*() const
Line
Count
Source
431
12
    const SpecificClause *operator*() const {
432
12
      return cast<SpecificClause>(*this->I);
433
12
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSizesClause>::operator*() const
Line
Count
Source
431
70
    const SpecificClause *operator*() const {
432
70
      return cast<SpecificClause>(*this->I);
433
70
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFullClause>::operator*() const
Line
Count
Source
431
13
    const SpecificClause *operator*() const {
432
13
      return cast<SpecificClause>(*this->I);
433
13
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPartialClause>::operator*() const
Line
Count
Source
431
68
    const SpecificClause *operator*() const {
432
68
      return cast<SpecificClause>(*this->I);
433
68
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDeviceClause>::operator*() const
Line
Count
Source
431
422
    const SpecificClause *operator*() const {
432
422
      return cast<SpecificClause>(*this->I);
433
422
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause>::operator*() const
Line
Count
Source
431
2
    const SpecificClause *operator*() const {
432
2
      return cast<SpecificClause>(*this->I);
433
2
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause>::operator*() const
Line
Count
Source
431
18
    const SpecificClause *operator*() const {
432
18
      return cast<SpecificClause>(*this->I);
433
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause>::operator*() const
Line
Count
Source
431
56
    const SpecificClause *operator*() const {
432
56
      return cast<SpecificClause>(*this->I);
433
56
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause>::operator*() const
Line
Count
Source
431
1.59k
    const SpecificClause *operator*() const {
432
1.59k
      return cast<SpecificClause>(*this->I);
433
1.59k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause>::operator*() const
Line
Count
Source
431
4.88k
    const SpecificClause *operator*() const {
432
4.88k
      return cast<SpecificClause>(*this->I);
433
4.88k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause>::operator*() const
Line
Count
Source
431
677
    const SpecificClause *operator*() const {
432
677
      return cast<SpecificClause>(*this->I);
433
677
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause>::operator*() const
Line
Count
Source
431
907
    const SpecificClause *operator*() const {
432
907
      return cast<SpecificClause>(*this->I);
433
907
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause>::operator*() const
Line
Count
Source
431
21.9k
    const SpecificClause *operator*() const {
432
21.9k
      return cast<SpecificClause>(*this->I);
433
21.9k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause>::operator*() const
Line
Count
Source
431
92
    const SpecificClause *operator*() const {
432
92
      return cast<SpecificClause>(*this->I);
433
92
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause>::operator*() const
Line
Count
Source
431
6.98k
    const SpecificClause *operator*() const {
432
6.98k
      return cast<SpecificClause>(*this->I);
433
6.98k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause>::operator*() const
Line
Count
Source
431
138
    const SpecificClause *operator*() const {
432
138
      return cast<SpecificClause>(*this->I);
433
138
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause>::operator*() const
Line
Count
Source
431
2.38k
    const SpecificClause *operator*() const {
432
2.38k
      return cast<SpecificClause>(*this->I);
433
2.38k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause>::operator*() const
Line
Count
Source
431
2.89k
    const SpecificClause *operator*() const {
432
2.89k
      return cast<SpecificClause>(*this->I);
433
2.89k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause>::operator*() const
Line
Count
Source
431
5.13k
    const SpecificClause *operator*() const {
432
5.13k
      return cast<SpecificClause>(*this->I);
433
5.13k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause>::operator*() const
Line
Count
Source
431
2.47k
    const SpecificClause *operator*() const {
432
2.47k
      return cast<SpecificClause>(*this->I);
433
2.47k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSimdlenClause>::operator*() const
Line
Count
Source
431
248
    const SpecificClause *operator*() const {
432
248
      return cast<SpecificClause>(*this->I);
433
248
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSafelenClause>::operator*() const
Line
Count
Source
431
226
    const SpecificClause *operator*() const {
432
226
      return cast<SpecificClause>(*this->I);
433
226
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause>::operator*() const
Line
Count
Source
431
314
    const SpecificClause *operator*() const {
432
314
      return cast<SpecificClause>(*this->I);
433
314
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause>::operator*() const
Line
Count
Source
431
26
    const SpecificClause *operator*() const {
432
26
      return cast<SpecificClause>(*this->I);
433
26
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause>::operator*() const
Line
Count
Source
431
30
    const SpecificClause *operator*() const {
432
30
      return cast<SpecificClause>(*this->I);
433
30
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPProcBindClause>::operator*() const
Line
Count
Source
431
87
    const SpecificClause *operator*() const {
432
87
      return cast<SpecificClause>(*this->I);
433
87
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderClause>::operator*() const
Line
Count
Source
431
5
    const SpecificClause *operator*() const {
432
5
      return cast<SpecificClause>(*this->I);
433
5
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause>::operator*() const
Line
Count
Source
431
1.40k
    const SpecificClause *operator*() const {
432
1.40k
      return cast<SpecificClause>(*this->I);
433
1.40k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause>::operator*() const
Line
Count
Source
431
28
    const SpecificClause *operator*() const {
432
28
      return cast<SpecificClause>(*this->I);
433
28
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFilterClause>::operator*() const
Line
Count
Source
431
30
    const SpecificClause *operator*() const {
432
30
      return cast<SpecificClause>(*this->I);
433
30
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFinalClause>::operator*() const
Line
Count
Source
431
22
    const SpecificClause *operator*() const {
432
22
      return cast<SpecificClause>(*this->I);
433
22
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPriorityClause>::operator*() const
Line
Count
Source
431
22
    const SpecificClause *operator*() const {
432
22
      return cast<SpecificClause>(*this->I);
433
22
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause>::operator*() const
Line
Count
Source
431
458
    const SpecificClause *operator*() const {
432
458
      return cast<SpecificClause>(*this->I);
433
458
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause>::operator*() const
Line
Count
Source
431
44
    const SpecificClause *operator*() const {
432
44
      return cast<SpecificClause>(*this->I);
433
44
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUntiedClause>::operator*() const
Line
Count
Source
431
16
    const SpecificClause *operator*() const {
432
16
      return cast<SpecificClause>(*this->I);
433
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause>::operator*() const
Line
Count
Source
431
26
    const SpecificClause *operator*() const {
432
26
      return cast<SpecificClause>(*this->I);
433
26
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFlushClause>::operator*() const
Line
Count
Source
431
16
    const SpecificClause *operator*() const {
432
16
      return cast<SpecificClause>(*this->I);
433
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDepobjClause>::operator*() const
Line
Count
Source
431
14
    const SpecificClause *operator*() const {
432
14
      return cast<SpecificClause>(*this->I);
433
14
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDestroyClause>::operator*() const
Line
Count
Source
431
4
    const SpecificClause *operator*() const {
432
4
      return cast<SpecificClause>(*this->I);
433
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUpdateClause>::operator*() const
Line
Count
Source
431
4
    const SpecificClause *operator*() const {
432
4
      return cast<SpecificClause>(*this->I);
433
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDistScheduleClause>::operator*() const
Line
Count
Source
431
447
    const SpecificClause *operator*() const {
432
447
      return cast<SpecificClause>(*this->I);
433
447
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSIMDClause>::operator*() const
Line
Count
Source
431
16
    const SpecificClause *operator*() const {
432
16
      return cast<SpecificClause>(*this->I);
433
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSeqCstClause>::operator*() const
Line
Count
Source
431
40
    const SpecificClause *operator*() const {
432
40
      return cast<SpecificClause>(*this->I);
433
40
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcqRelClause>::operator*() const
Line
Count
Source
431
4
    const SpecificClause *operator*() const {
432
4
      return cast<SpecificClause>(*this->I);
433
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcquireClause>::operator*() const
Line
Count
Source
431
6
    const SpecificClause *operator*() const {
432
6
      return cast<SpecificClause>(*this->I);
433
6
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReleaseClause>::operator*() const
Line
Count
Source
431
8
    const SpecificClause *operator*() const {
432
8
      return cast<SpecificClause>(*this->I);
433
8
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPRelaxedClause>::operator*() const
Line
Count
Source
431
22
    const SpecificClause *operator*() const {
432
22
      return cast<SpecificClause>(*this->I);
433
22
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause>::operator*() const
Line
Count
Source
431
72
    const SpecificClause *operator*() const {
432
72
      return cast<SpecificClause>(*this->I);
433
72
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause>::operator*() const
Line
Count
Source
431
4
    const SpecificClause *operator*() const {
432
4
      return cast<SpecificClause>(*this->I);
433
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNogroupClause>::operator*() const
Line
Count
Source
431
18
    const SpecificClause *operator*() const {
432
18
      return cast<SpecificClause>(*this->I);
433
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPGrainsizeClause>::operator*() const
Line
Count
Source
431
18
    const SpecificClause *operator*() const {
432
18
      return cast<SpecificClause>(*this->I);
433
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTasksClause>::operator*() const
Line
Count
Source
431
36
    const SpecificClause *operator*() const {
432
36
      return cast<SpecificClause>(*this->I);
433
36
    }
434
    const SpecificClause *operator->() const { return **this; }
435
436
51.9k
    specific_clause_iterator &operator++() {
437
51.9k
      ++this->I;
438
51.9k
      SkipToNextClause();
439
51.9k
      return *this;
440
51.9k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPHintClause>::operator++()
Line
Count
Source
436
12
    specific_clause_iterator &operator++() {
437
12
      ++this->I;
438
12
      SkipToNextClause();
439
12
      return *this;
440
12
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFullClause>::operator++()
Line
Count
Source
436
13
    specific_clause_iterator &operator++() {
437
13
      ++this->I;
438
13
      SkipToNextClause();
439
13
      return *this;
440
13
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPartialClause>::operator++()
Line
Count
Source
436
68
    specific_clause_iterator &operator++() {
437
68
      ++this->I;
438
68
      SkipToNextClause();
439
68
      return *this;
440
68
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause>::operator++()
Line
Count
Source
436
253
    specific_clause_iterator &operator++() {
437
253
      ++this->I;
438
253
      SkipToNextClause();
439
253
      return *this;
440
253
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDeviceClause>::operator++()
Line
Count
Source
436
422
    specific_clause_iterator &operator++() {
437
422
      ++this->I;
438
422
      SkipToNextClause();
439
422
      return *this;
440
422
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause>::operator++()
Line
Count
Source
436
2
    specific_clause_iterator &operator++() {
437
2
      ++this->I;
438
2
      SkipToNextClause();
439
2
      return *this;
440
2
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause>::operator++()
Line
Count
Source
436
18
    specific_clause_iterator &operator++() {
437
18
      ++this->I;
438
18
      SkipToNextClause();
439
18
      return *this;
440
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause>::operator++()
Line
Count
Source
436
56
    specific_clause_iterator &operator++() {
437
56
      ++this->I;
438
56
      SkipToNextClause();
439
56
      return *this;
440
56
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause>::operator++()
Line
Count
Source
436
1.59k
    specific_clause_iterator &operator++() {
437
1.59k
      ++this->I;
438
1.59k
      SkipToNextClause();
439
1.59k
      return *this;
440
1.59k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause>::operator++()
Line
Count
Source
436
2.36k
    specific_clause_iterator &operator++() {
437
2.36k
      ++this->I;
438
2.36k
      SkipToNextClause();
439
2.36k
      return *this;
440
2.36k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause>::operator++()
Line
Count
Source
436
677
    specific_clause_iterator &operator++() {
437
677
      ++this->I;
438
677
      SkipToNextClause();
439
677
      return *this;
440
677
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause>::operator++()
Line
Count
Source
436
907
    specific_clause_iterator &operator++() {
437
907
      ++this->I;
438
907
      SkipToNextClause();
439
907
      return *this;
440
907
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause>::operator++()
Line
Count
Source
436
21.9k
    specific_clause_iterator &operator++() {
437
21.9k
      ++this->I;
438
21.9k
      SkipToNextClause();
439
21.9k
      return *this;
440
21.9k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause>::operator++()
Line
Count
Source
436
92
    specific_clause_iterator &operator++() {
437
92
      ++this->I;
438
92
      SkipToNextClause();
439
92
      return *this;
440
92
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause>::operator++()
Line
Count
Source
436
6.98k
    specific_clause_iterator &operator++() {
437
6.98k
      ++this->I;
438
6.98k
      SkipToNextClause();
439
6.98k
      return *this;
440
6.98k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause>::operator++()
Line
Count
Source
436
138
    specific_clause_iterator &operator++() {
437
138
      ++this->I;
438
138
      SkipToNextClause();
439
138
      return *this;
440
138
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause>::operator++()
Line
Count
Source
436
2.38k
    specific_clause_iterator &operator++() {
437
2.38k
      ++this->I;
438
2.38k
      SkipToNextClause();
439
2.38k
      return *this;
440
2.38k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause>::operator++()
Line
Count
Source
436
2.82k
    specific_clause_iterator &operator++() {
437
2.82k
      ++this->I;
438
2.82k
      SkipToNextClause();
439
2.82k
      return *this;
440
2.82k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause>::operator++()
Line
Count
Source
436
5.09k
    specific_clause_iterator &operator++() {
437
5.09k
      ++this->I;
438
5.09k
      SkipToNextClause();
439
5.09k
      return *this;
440
5.09k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause>::operator++()
Line
Count
Source
436
2.47k
    specific_clause_iterator &operator++() {
437
2.47k
      ++this->I;
438
2.47k
      SkipToNextClause();
439
2.47k
      return *this;
440
2.47k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSimdlenClause>::operator++()
Line
Count
Source
436
248
    specific_clause_iterator &operator++() {
437
248
      ++this->I;
438
248
      SkipToNextClause();
439
248
      return *this;
440
248
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSafelenClause>::operator++()
Line
Count
Source
436
226
    specific_clause_iterator &operator++() {
437
226
      ++this->I;
438
226
      SkipToNextClause();
439
226
      return *this;
440
226
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause>::operator++()
Line
Count
Source
436
314
    specific_clause_iterator &operator++() {
437
314
      ++this->I;
438
314
      SkipToNextClause();
439
314
      return *this;
440
314
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause>::operator++()
Line
Count
Source
436
26
    specific_clause_iterator &operator++() {
437
26
      ++this->I;
438
26
      SkipToNextClause();
439
26
      return *this;
440
26
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause>::operator++()
Line
Count
Source
436
30
    specific_clause_iterator &operator++() {
437
30
      ++this->I;
438
30
      SkipToNextClause();
439
30
      return *this;
440
30
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPProcBindClause>::operator++()
Line
Count
Source
436
87
    specific_clause_iterator &operator++() {
437
87
      ++this->I;
438
87
      SkipToNextClause();
439
87
      return *this;
440
87
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderClause>::operator++()
Line
Count
Source
436
5
    specific_clause_iterator &operator++() {
437
5
      ++this->I;
438
5
      SkipToNextClause();
439
5
      return *this;
440
5
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause>::operator++()
Line
Count
Source
436
1.33k
    specific_clause_iterator &operator++() {
437
1.33k
      ++this->I;
438
1.33k
      SkipToNextClause();
439
1.33k
      return *this;
440
1.33k
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause>::operator++()
Line
Count
Source
436
28
    specific_clause_iterator &operator++() {
437
28
      ++this->I;
438
28
      SkipToNextClause();
439
28
      return *this;
440
28
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFilterClause>::operator++()
Line
Count
Source
436
30
    specific_clause_iterator &operator++() {
437
30
      ++this->I;
438
30
      SkipToNextClause();
439
30
      return *this;
440
30
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFinalClause>::operator++()
Line
Count
Source
436
22
    specific_clause_iterator &operator++() {
437
22
      ++this->I;
438
22
      SkipToNextClause();
439
22
      return *this;
440
22
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPriorityClause>::operator++()
Line
Count
Source
436
22
    specific_clause_iterator &operator++() {
437
22
      ++this->I;
438
22
      SkipToNextClause();
439
22
      return *this;
440
22
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause>::operator++()
Line
Count
Source
436
458
    specific_clause_iterator &operator++() {
437
458
      ++this->I;
438
458
      SkipToNextClause();
439
458
      return *this;
440
458
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause>::operator++()
Line
Count
Source
436
44
    specific_clause_iterator &operator++() {
437
44
      ++this->I;
438
44
      SkipToNextClause();
439
44
      return *this;
440
44
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUntiedClause>::operator++()
Line
Count
Source
436
16
    specific_clause_iterator &operator++() {
437
16
      ++this->I;
438
16
      SkipToNextClause();
439
16
      return *this;
440
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause>::operator++()
Line
Count
Source
436
26
    specific_clause_iterator &operator++() {
437
26
      ++this->I;
438
26
      SkipToNextClause();
439
26
      return *this;
440
26
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFlushClause>::operator++()
Line
Count
Source
436
16
    specific_clause_iterator &operator++() {
437
16
      ++this->I;
438
16
      SkipToNextClause();
439
16
      return *this;
440
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDepobjClause>::operator++()
Line
Count
Source
436
14
    specific_clause_iterator &operator++() {
437
14
      ++this->I;
438
14
      SkipToNextClause();
439
14
      return *this;
440
14
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDestroyClause>::operator++()
Line
Count
Source
436
4
    specific_clause_iterator &operator++() {
437
4
      ++this->I;
438
4
      SkipToNextClause();
439
4
      return *this;
440
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUpdateClause>::operator++()
Line
Count
Source
436
4
    specific_clause_iterator &operator++() {
437
4
      ++this->I;
438
4
      SkipToNextClause();
439
4
      return *this;
440
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDistScheduleClause>::operator++()
Line
Count
Source
436
447
    specific_clause_iterator &operator++() {
437
447
      ++this->I;
438
447
      SkipToNextClause();
439
447
      return *this;
440
447
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSIMDClause>::operator++()
Line
Count
Source
436
16
    specific_clause_iterator &operator++() {
437
16
      ++this->I;
438
16
      SkipToNextClause();
439
16
      return *this;
440
16
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSeqCstClause>::operator++()
Line
Count
Source
436
40
    specific_clause_iterator &operator++() {
437
40
      ++this->I;
438
40
      SkipToNextClause();
439
40
      return *this;
440
40
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcqRelClause>::operator++()
Line
Count
Source
436
4
    specific_clause_iterator &operator++() {
437
4
      ++this->I;
438
4
      SkipToNextClause();
439
4
      return *this;
440
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcquireClause>::operator++()
Line
Count
Source
436
6
    specific_clause_iterator &operator++() {
437
6
      ++this->I;
438
6
      SkipToNextClause();
439
6
      return *this;
440
6
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReleaseClause>::operator++()
Line
Count
Source
436
8
    specific_clause_iterator &operator++() {
437
8
      ++this->I;
438
8
      SkipToNextClause();
439
8
      return *this;
440
8
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPRelaxedClause>::operator++()
Line
Count
Source
436
22
    specific_clause_iterator &operator++() {
437
22
      ++this->I;
438
22
      SkipToNextClause();
439
22
      return *this;
440
22
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause>::operator++()
Line
Count
Source
436
72
    specific_clause_iterator &operator++() {
437
72
      ++this->I;
438
72
      SkipToNextClause();
439
72
      return *this;
440
72
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause>::operator++()
Line
Count
Source
436
4
    specific_clause_iterator &operator++() {
437
4
      ++this->I;
438
4
      SkipToNextClause();
439
4
      return *this;
440
4
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNogroupClause>::operator++()
Line
Count
Source
436
18
    specific_clause_iterator &operator++() {
437
18
      ++this->I;
438
18
      SkipToNextClause();
439
18
      return *this;
440
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPGrainsizeClause>::operator++()
Line
Count
Source
436
18
    specific_clause_iterator &operator++() {
437
18
      ++this->I;
438
18
      SkipToNextClause();
439
18
      return *this;
440
18
    }
clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTasksClause>::operator++()
Line
Count
Source
436
36
    specific_clause_iterator &operator++() {
437
36
      ++this->I;
438
36
      SkipToNextClause();
439
36
      return *this;
440
36
    }
441
  };
442
443
  template <typename SpecificClause>
444
  static llvm::iterator_range<specific_clause_iterator<SpecificClause>>
445
838k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
838k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
838k
            specific_clause_iterator<SpecificClause>(
448
838k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
838k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDependClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
10.7k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
10.7k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
10.7k
            specific_clause_iterator<SpecificClause>(
448
10.7k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
10.7k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCollapseClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPCollapseClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
147k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
147k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
147k
            specific_clause_iterator<SpecificClause>(
448
147k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
147k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPOrderedClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
80.2k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
80.2k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
80.2k
            specific_clause_iterator<SpecificClause>(
448
80.2k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
80.2k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPHintClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPHintClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
104
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
104
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
104
            specific_clause_iterator<SpecificClause>(
448
104
                llvm::makeArrayRef(Clauses.end(), 0))};
449
104
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSizesClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSizesClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
81
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
81
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
81
            specific_clause_iterator<SpecificClause>(
448
81
                llvm::makeArrayRef(Clauses.end(), 0))};
449
81
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFullClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFullClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
110
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
110
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
110
            specific_clause_iterator<SpecificClause>(
448
110
                llvm::makeArrayRef(Clauses.end(), 0))};
449
110
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPartialClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPPartialClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
107
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
107
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
107
            specific_clause_iterator<SpecificClause>(
448
107
                llvm::makeArrayRef(Clauses.end(), 0))};
449
107
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDetachClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
1.73k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
1.73k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
1.73k
            specific_clause_iterator<SpecificClause>(
448
1.73k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
1.73k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNowaitClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
21.3k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
21.3k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
21.3k
            specific_clause_iterator<SpecificClause>(
448
21.3k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
21.3k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDeviceClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDeviceClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
10.1k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
10.1k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
10.1k
            specific_clause_iterator<SpecificClause>(
448
10.1k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
10.1k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAffinityClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
881
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
881
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
881
            specific_clause_iterator<SpecificClause>(
448
881
                llvm::makeArrayRef(Clauses.end(), 0))};
449
881
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUsesAllocatorsClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
20.5k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
20.5k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
20.5k
            specific_clause_iterator<SpecificClause>(
448
20.5k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
20.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNumTeamsClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
16.3k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
16.3k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
16.3k
            specific_clause_iterator<SpecificClause>(
448
16.3k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
16.3k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPIfClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
28.8k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
28.8k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
28.8k
            specific_clause_iterator<SpecificClause>(
448
28.8k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
28.8k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNumThreadsClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
12.4k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
12.4k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
12.4k
            specific_clause_iterator<SpecificClause>(
448
12.4k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
12.4k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPThreadLimitClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
15.0k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
15.0k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
15.0k
            specific_clause_iterator<SpecificClause>(
448
15.0k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
15.0k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFirstprivateClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
60.4k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
60.4k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
60.4k
            specific_clause_iterator<SpecificClause>(
448
60.4k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
60.4k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPIsDevicePtrClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
9.27k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
9.27k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
9.27k
            specific_clause_iterator<SpecificClause>(
448
9.27k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
9.27k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPMapClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
11.4k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
11.4k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
11.4k
            specific_clause_iterator<SpecificClause>(
448
11.4k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
11.4k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNontemporalClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
13.6k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
13.6k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
13.6k
            specific_clause_iterator<SpecificClause>(
448
13.6k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
13.6k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPPrivateClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
69.4k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
69.4k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
69.4k
            specific_clause_iterator<SpecificClause>(
448
69.4k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
69.4k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPLastprivateClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
71.1k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
71.1k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
71.1k
            specific_clause_iterator<SpecificClause>(
448
71.1k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
71.1k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPReductionClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
110k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
110k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
110k
            specific_clause_iterator<SpecificClause>(
448
110k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
110k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPLinearClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
62.5k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
62.5k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
62.5k
            specific_clause_iterator<SpecificClause>(
448
62.5k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
62.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSimdlenClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSimdlenClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
8.62k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
8.62k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
8.62k
            specific_clause_iterator<SpecificClause>(
448
8.62k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
8.62k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSafelenClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSafelenClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
8.62k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
8.62k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
8.62k
            specific_clause_iterator<SpecificClause>(
448
8.62k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
8.62k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAlignedClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
13.3k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
13.3k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
13.3k
            specific_clause_iterator<SpecificClause>(
448
13.3k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
13.3k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPCopyinClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
1.01k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
1.01k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
1.01k
            specific_clause_iterator<SpecificClause>(
448
1.01k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
1.01k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPProcBindClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPProcBindClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
6.24k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
6.24k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
6.24k
            specific_clause_iterator<SpecificClause>(
448
6.24k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
6.24k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPOrderClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
11.2k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
11.2k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
11.2k
            specific_clause_iterator<SpecificClause>(
448
11.2k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
11.2k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPScheduleClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
5.18k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
5.18k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
5.18k
            specific_clause_iterator<SpecificClause>(
448
5.18k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
5.18k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPCopyprivateClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
57
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
57
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
57
            specific_clause_iterator<SpecificClause>(
448
57
                llvm::makeArrayRef(Clauses.end(), 0))};
449
57
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFilterClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFilterClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
40
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
40
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
40
            specific_clause_iterator<SpecificClause>(
448
40
                llvm::makeArrayRef(Clauses.end(), 0))};
449
40
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFinalClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFinalClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
409
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
409
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
409
            specific_clause_iterator<SpecificClause>(
448
409
                llvm::makeArrayRef(Clauses.end(), 0))};
449
409
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPriorityClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPPriorityClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
409
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
409
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
409
            specific_clause_iterator<SpecificClause>(
448
409
                llvm::makeArrayRef(Clauses.end(), 0))};
449
409
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPInReductionClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
409
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
409
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
409
            specific_clause_iterator<SpecificClause>(
448
409
                llvm::makeArrayRef(Clauses.end(), 0))};
449
409
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUntiedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUntiedClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
183
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
183
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
183
            specific_clause_iterator<SpecificClause>(
448
183
                llvm::makeArrayRef(Clauses.end(), 0))};
449
183
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPTaskReductionClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
26
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
26
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
26
            specific_clause_iterator<SpecificClause>(
448
26
                llvm::makeArrayRef(Clauses.end(), 0))};
449
26
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFlushClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFlushClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
80
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
80
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
80
            specific_clause_iterator<SpecificClause>(
448
80
                llvm::makeArrayRef(Clauses.end(), 0))};
449
80
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDepobjClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDepobjClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
14
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
14
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
14
            specific_clause_iterator<SpecificClause>(
448
14
                llvm::makeArrayRef(Clauses.end(), 0))};
449
14
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDestroyClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDestroyClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
8
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
8
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
8
            specific_clause_iterator<SpecificClause>(
448
8
                llvm::makeArrayRef(Clauses.end(), 0))};
449
8
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUpdateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUpdateClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
4
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
4
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
4
            specific_clause_iterator<SpecificClause>(
448
4
                llvm::makeArrayRef(Clauses.end(), 0))};
449
4
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInclusiveClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPInclusiveClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
48
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
48
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
48
            specific_clause_iterator<SpecificClause>(
448
48
                llvm::makeArrayRef(Clauses.end(), 0))};
449
48
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDistScheduleClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDistScheduleClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
4.49k
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
4.49k
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
4.49k
            specific_clause_iterator<SpecificClause>(
448
4.49k
                llvm::makeArrayRef(Clauses.end(), 0))};
449
4.49k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSIMDClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSIMDClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
48
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
48
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
48
            specific_clause_iterator<SpecificClause>(
448
48
                llvm::makeArrayRef(Clauses.end(), 0))};
449
48
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPSeqCstClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPSeqCstClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
555
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
555
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
555
            specific_clause_iterator<SpecificClause>(
448
555
                llvm::makeArrayRef(Clauses.end(), 0))};
449
555
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcqRelClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAcqRelClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
515
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
515
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
515
            specific_clause_iterator<SpecificClause>(
448
515
                llvm::makeArrayRef(Clauses.end(), 0))};
449
515
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAcquireClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAcquireClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
511
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
511
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
511
            specific_clause_iterator<SpecificClause>(
448
511
                llvm::makeArrayRef(Clauses.end(), 0))};
449
511
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReleaseClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPReleaseClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
505
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
505
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
505
            specific_clause_iterator<SpecificClause>(
448
505
                llvm::makeArrayRef(Clauses.end(), 0))};
449
505
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPRelaxedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPRelaxedClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
497
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
497
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
497
            specific_clause_iterator<SpecificClause>(
448
497
                llvm::makeArrayRef(Clauses.end(), 0))};
449
497
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUseDevicePtrClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
72
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
72
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
72
            specific_clause_iterator<SpecificClause>(
448
72
                llvm::makeArrayRef(Clauses.end(), 0))};
449
72
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUseDeviceAddrClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
72
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
72
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
72
            specific_clause_iterator<SpecificClause>(
448
72
                llvm::makeArrayRef(Clauses.end(), 0))};
449
72
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNogroupClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNogroupClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
226
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
226
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
226
            specific_clause_iterator<SpecificClause>(
448
226
                llvm::makeArrayRef(Clauses.end(), 0))};
449
226
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPGrainsizeClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPGrainsizeClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
226
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
226
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
226
            specific_clause_iterator<SpecificClause>(
448
226
                llvm::makeArrayRef(Clauses.end(), 0))};
449
226
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTasksClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNumTasksClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
445
208
  getClausesOfKind(ArrayRef<OMPClause *> Clauses) {
446
208
    return {specific_clause_iterator<SpecificClause>(Clauses),
447
208
            specific_clause_iterator<SpecificClause>(
448
208
                llvm::makeArrayRef(Clauses.end(), 0))};
449
208
  }
450
451
  template <typename SpecificClause>
452
  llvm::iterator_range<specific_clause_iterator<SpecificClause>>
453
552k
  getClausesOfKind() const {
454
552k
    return getClausesOfKind<SpecificClause>(clauses());
455
552k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDependClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDependClause>() const
Line
Count
Source
453
10.7k
  getClausesOfKind() const {
454
10.7k
    return getClausesOfKind<SpecificClause>(clauses());
455
10.7k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPOrderedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPOrderedClause>() const
Line
Count
Source
453
22.2k
  getClausesOfKind() const {
454
22.2k
    return getClausesOfKind<SpecificClause>(clauses());
455
22.2k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPDetachClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPDetachClause>() const
Line
Count
Source
453
869
  getClausesOfKind() const {
454
869
    return getClausesOfKind<SpecificClause>(clauses());
455
869
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNowaitClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNowaitClause>() const
Line
Count
Source
453
19.9k
  getClausesOfKind() const {
454
19.9k
    return getClausesOfKind<SpecificClause>(clauses());
455
19.9k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAffinityClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAffinityClause>() const
Line
Count
Source
453
881
  getClausesOfKind() const {
454
881
    return getClausesOfKind<SpecificClause>(clauses());
455
881
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUsesAllocatorsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUsesAllocatorsClause>() const
Line
Count
Source
453
20.5k
  getClausesOfKind() const {
454
20.5k
    return getClausesOfKind<SpecificClause>(clauses());
455
20.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumTeamsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNumTeamsClause>() const
Line
Count
Source
453
9.62k
  getClausesOfKind() const {
454
9.62k
    return getClausesOfKind<SpecificClause>(clauses());
455
9.62k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIfClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPIfClause>() const
Line
Count
Source
453
28.2k
  getClausesOfKind() const {
454
28.2k
    return getClausesOfKind<SpecificClause>(clauses());
455
28.2k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNumThreadsClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNumThreadsClause>() const
Line
Count
Source
453
5.83k
  getClausesOfKind() const {
454
5.83k
    return getClausesOfKind<SpecificClause>(clauses());
455
5.83k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPThreadLimitClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPThreadLimitClause>() const
Line
Count
Source
453
8.77k
  getClausesOfKind() const {
454
8.77k
    return getClausesOfKind<SpecificClause>(clauses());
455
8.77k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFirstprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFirstprivateClause>() const
Line
Count
Source
453
60.4k
  getClausesOfKind() const {
454
60.4k
    return getClausesOfKind<SpecificClause>(clauses());
455
60.4k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPIsDevicePtrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPIsDevicePtrClause>() const
Line
Count
Source
453
9.27k
  getClausesOfKind() const {
454
9.27k
    return getClausesOfKind<SpecificClause>(clauses());
455
9.27k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPMapClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPMapClause>() const
Line
Count
Source
453
11.4k
  getClausesOfKind() const {
454
11.4k
    return getClausesOfKind<SpecificClause>(clauses());
455
11.4k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPNontemporalClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPNontemporalClause>() const
Line
Count
Source
453
13.6k
  getClausesOfKind() const {
454
13.6k
    return getClausesOfKind<SpecificClause>(clauses());
455
13.6k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPPrivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPPrivateClause>() const
Line
Count
Source
453
69.4k
  getClausesOfKind() const {
454
69.4k
    return getClausesOfKind<SpecificClause>(clauses());
455
69.4k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLastprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPLastprivateClause>() const
Line
Count
Source
453
71.1k
  getClausesOfKind() const {
454
71.1k
    return getClausesOfKind<SpecificClause>(clauses());
455
71.1k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPReductionClause>() const
Line
Count
Source
453
110k
  getClausesOfKind() const {
454
110k
    return getClausesOfKind<SpecificClause>(clauses());
455
110k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPLinearClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPLinearClause>() const
Line
Count
Source
453
62.5k
  getClausesOfKind() const {
454
62.5k
    return getClausesOfKind<SpecificClause>(clauses());
455
62.5k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPScheduleClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPScheduleClause>() const
Line
Count
Source
453
407
  getClausesOfKind() const {
454
407
    return getClausesOfKind<SpecificClause>(clauses());
455
407
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPAlignedClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPAlignedClause>() const
Line
Count
Source
453
13.3k
  getClausesOfKind() const {
454
13.3k
    return getClausesOfKind<SpecificClause>(clauses());
455
13.3k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyinClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPCopyinClause>() const
Line
Count
Source
453
1.01k
  getClausesOfKind() const {
454
1.01k
    return getClausesOfKind<SpecificClause>(clauses());
455
1.01k
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPFullClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPFullClause>() const
Line
Count
Source
453
18
  getClausesOfKind() const {
454
18
    return getClausesOfKind<SpecificClause>(clauses());
455
18
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPCopyprivateClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPCopyprivateClause>() const
Line
Count
Source
453
57
  getClausesOfKind() const {
454
57
    return getClausesOfKind<SpecificClause>(clauses());
455
57
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPInReductionClause>() const
Line
Count
Source
453
409
  getClausesOfKind() const {
454
409
    return getClausesOfKind<SpecificClause>(clauses());
455
409
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPTaskReductionClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPTaskReductionClause>() const
Line
Count
Source
453
26
  getClausesOfKind() const {
454
26
    return getClausesOfKind<SpecificClause>(clauses());
455
26
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPInclusiveClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPInclusiveClause>() const
Line
Count
Source
453
48
  getClausesOfKind() const {
454
48
    return getClausesOfKind<SpecificClause>(clauses());
455
48
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDevicePtrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUseDevicePtrClause>() const
Line
Count
Source
453
72
  getClausesOfKind() const {
454
72
    return getClausesOfKind<SpecificClause>(clauses());
455
72
  }
llvm::iterator_range<clang::OMPExecutableDirective::specific_clause_iterator<clang::OMPUseDeviceAddrClause> > clang::OMPExecutableDirective::getClausesOfKind<clang::OMPUseDeviceAddrClause>() const
Line
Count
Source
453
72
  getClausesOfKind() const {
454
72
    return getClausesOfKind<SpecificClause>(clauses());
455
72
  }
456
457
  /// Gets a single clause of the specified kind associated with the
458
  /// current directive iff there is only one clause of this kind (and assertion
459
  /// is fired if there is more than one clause is associated with the
460
  /// directive). Returns nullptr if no clause of this kind is associated with
461
  /// the directive.
462
  template <typename SpecificClause>
463
86.1k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
86.1k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
86.1k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
6.49k
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
6.49k
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
6.49k
    }
471
79.6k
    return nullptr;
472
86.1k
  }
clang::OMPHintClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPHintClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
104
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
104
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
104
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
12
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
12
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
12
    }
471
92
    return nullptr;
472
104
  }
clang::OMPFullClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPFullClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
92
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
92
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
92
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
13
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
13
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
13
    }
471
79
    return nullptr;
472
92
  }
clang::OMPPartialClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPPartialClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
107
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
107
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
107
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
68
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
68
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
68
    }
471
39
    return nullptr;
472
107
  }
clang::OMPDeviceClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDeviceClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
10.1k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
10.1k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
10.1k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
422
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
422
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
422
    }
471
9.74k
    return nullptr;
472
10.1k
  }
clang::OMPDetachClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDetachClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
869
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
869
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
869
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
2
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
2
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
2
    }
471
867
    return nullptr;
472
869
  }
clang::OMPNumTeamsClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNumTeamsClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
6.73k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
6.73k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
6.73k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
1.59k
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
1.59k
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
1.59k
    }
471
5.14k
    return nullptr;
472
6.73k
  }
clang::OMPNumThreadsClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNumThreadsClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
6.57k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
6.57k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
6.57k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
677
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
677
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
677
    }
471
5.89k
    return nullptr;
472
6.57k
  }
clang::OMPThreadLimitClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPThreadLimitClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
6.22k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
6.22k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
6.22k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
907
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
907
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
907
    }
471
5.32k
    return nullptr;
472
6.22k
  }
clang::OMPSimdlenClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSimdlenClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
8.62k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
8.62k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
8.62k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
248
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
248
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
248
    }
471
8.37k
    return nullptr;
472
8.62k
  }
clang::OMPSafelenClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSafelenClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
8.62k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
8.62k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
8.62k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
226
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
226
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
226
    }
471
8.40k
    return nullptr;
472
8.62k
  }
clang::OMPNowaitClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNowaitClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
1.40k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
1.40k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
1.40k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
30
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
30
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
30
    }
471
1.37k
    return nullptr;
472
1.40k
  }
clang::OMPProcBindClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPProcBindClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
6.24k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
6.24k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
6.24k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
87
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
87
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
87
    }
471
6.15k
    return nullptr;
472
6.24k
  }
clang::OMPIfClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPIfClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
616
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
616
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
616
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
140
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
140
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
140
    }
471
476
    return nullptr;
472
616
  }
clang::OMPOrderClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPOrderClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
11.2k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
11.2k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
11.2k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
5
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
5
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
5
    }
471
11.2k
    return nullptr;
472
11.2k
  }
clang::OMPOrderedClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPOrderedClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
4.77k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
4.77k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
4.77k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
85
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
85
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
85
    }
471
4.68k
    return nullptr;
472
4.77k
  }
clang::OMPScheduleClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPScheduleClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
4.77k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
4.77k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
4.77k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
1.22k
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
1.22k
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
1.22k
    }
471
3.54k
    return nullptr;
472
4.77k
  }
clang::OMPFilterClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPFilterClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
40
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
40
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
40
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
30
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
30
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
30
    }
471
10
    return nullptr;
472
40
  }
clang::OMPFinalClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPFinalClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
409
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
409
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
409
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
22
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
22
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
22
    }
471
387
    return nullptr;
472
409
  }
clang::OMPPriorityClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPPriorityClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
409
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
409
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
409
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
22
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
22
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
22
    }
471
387
    return nullptr;
472
409
  }
clang::OMPUntiedClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPUntiedClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
183
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
183
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
183
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
16
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
16
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
16
    }
471
167
    return nullptr;
472
183
  }
clang::OMPFlushClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPFlushClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
80
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
80
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
80
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
16
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
16
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
16
    }
471
64
    return nullptr;
472
80
  }
clang::OMPDepobjClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDepobjClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
14
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
14
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
14
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
14
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
14
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
14
    }
471
0
    return nullptr;
472
14
  }
clang::OMPDependClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDependClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
14
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
14
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
14
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
6
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
6
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
6
    }
471
8
    return nullptr;
472
14
  }
clang::OMPDestroyClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDestroyClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
8
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
8
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
8
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
4
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
4
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
4
    }
471
4
    return nullptr;
472
8
  }
clang::OMPUpdateClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPUpdateClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
4
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
4
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
4
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
4
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
4
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
4
    }
471
0
    return nullptr;
472
4
  }
clang::OMPDistScheduleClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDistScheduleClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
4.49k
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
4.49k
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
4.49k
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
447
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
447
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
447
    }
471
4.04k
    return nullptr;
472
4.49k
  }
clang::OMPSIMDClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSIMDClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
48
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
48
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
48
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
16
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
16
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
16
    }
471
32
    return nullptr;
472
48
  }
clang::OMPSeqCstClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSeqCstClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
555
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
555
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
555
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
40
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
40
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
40
    }
471
515
    return nullptr;
472
555
  }
clang::OMPAcqRelClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPAcqRelClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
515
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
515
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
515
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
4
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
4
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
4
    }
471
511
    return nullptr;
472
515
  }
clang::OMPAcquireClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPAcquireClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
511
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
511
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
511
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
6
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
6
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
6
    }
471
505
    return nullptr;
472
511
  }
clang::OMPReleaseClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPReleaseClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
505
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
505
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
505
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
8
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
8
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
8
    }
471
497
    return nullptr;
472
505
  }
clang::OMPRelaxedClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPRelaxedClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
497
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
497
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
497
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
22
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
22
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
22
    }
471
475
    return nullptr;
472
497
  }
clang::OMPNogroupClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNogroupClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
226
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
226
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
226
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
18
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
18
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
18
    }
471
208
    return nullptr;
472
226
  }
clang::OMPGrainsizeClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPGrainsizeClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
226
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
226
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
226
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
18
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
18
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
18
    }
471
208
    return nullptr;
472
226
  }
clang::OMPNumTasksClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNumTasksClause>(llvm::ArrayRef<clang::OMPClause*>)
Line
Count
Source
463
208
  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
464
208
    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
465
466
208
    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
467
36
      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
468
36
             "There are at least 2 clauses of the specified kind");
469
0
      return *ClausesOfKind.begin();
470
36
    }
471
172
    return nullptr;
472
208
  }
473
474
  template <typename SpecificClause>
475
85.9k
  const SpecificClause *getSingleClause() const {
476
85.9k
    return getSingleClause<SpecificClause>(clauses());
477
85.9k
  }
clang::OMPHintClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPHintClause>() const
Line
Count
Source
475
104
  const SpecificClause *getSingleClause() const {
476
104
    return getSingleClause<SpecificClause>(clauses());
477
104
  }
clang::OMPDeviceClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDeviceClause>() const
Line
Count
Source
475
10.1k
  const SpecificClause *getSingleClause() const {
476
10.1k
    return getSingleClause<SpecificClause>(clauses());
477
10.1k
  }
clang::OMPDetachClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDetachClause>() const
Line
Count
Source
475
869
  const SpecificClause *getSingleClause() const {
476
869
    return getSingleClause<SpecificClause>(clauses());
477
869
  }
clang::OMPNumTeamsClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNumTeamsClause>() const
Line
Count
Source
475
6.73k
  const SpecificClause *getSingleClause() const {
476
6.73k
    return getSingleClause<SpecificClause>(clauses());
477
6.73k
  }
clang::OMPNumThreadsClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNumThreadsClause>() const
Line
Count
Source
475
6.57k
  const SpecificClause *getSingleClause() const {
476
6.57k
    return getSingleClause<SpecificClause>(clauses());
477
6.57k
  }
clang::OMPThreadLimitClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPThreadLimitClause>() const
Line
Count
Source
475
6.22k
  const SpecificClause *getSingleClause() const {
476
6.22k
    return getSingleClause<SpecificClause>(clauses());
477
6.22k
  }
clang::OMPSimdlenClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSimdlenClause>() const
Line
Count
Source
475
8.62k
  const SpecificClause *getSingleClause() const {
476
8.62k
    return getSingleClause<SpecificClause>(clauses());
477
8.62k
  }
clang::OMPSafelenClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSafelenClause>() const
Line
Count
Source
475
8.62k
  const SpecificClause *getSingleClause() const {
476
8.62k
    return getSingleClause<SpecificClause>(clauses());
477
8.62k
  }
clang::OMPNowaitClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNowaitClause>() const
Line
Count
Source
475
1.40k
  const SpecificClause *getSingleClause() const {
476
1.40k
    return getSingleClause<SpecificClause>(clauses());
477
1.40k
  }
clang::OMPProcBindClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPProcBindClause>() const
Line
Count
Source
475
6.24k
  const SpecificClause *getSingleClause() const {
476
6.24k
    return getSingleClause<SpecificClause>(clauses());
477
6.24k
  }
clang::OMPIfClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPIfClause>() const
Line
Count
Source
475
616
  const SpecificClause *getSingleClause() const {
476
616
    return getSingleClause<SpecificClause>(clauses());
477
616
  }
clang::OMPOrderClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPOrderClause>() const
Line
Count
Source
475
11.2k
  const SpecificClause *getSingleClause() const {
476
11.2k
    return getSingleClause<SpecificClause>(clauses());
477
11.2k
  }
clang::OMPPartialClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPPartialClause>() const
Line
Count
Source
475
15
  const SpecificClause *getSingleClause() const {
476
15
    return getSingleClause<SpecificClause>(clauses());
477
15
  }
clang::OMPOrderedClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPOrderedClause>() const
Line
Count
Source
475
4.77k
  const SpecificClause *getSingleClause() const {
476
4.77k
    return getSingleClause<SpecificClause>(clauses());
477
4.77k
  }
clang::OMPScheduleClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPScheduleClause>() const
Line
Count
Source
475
4.77k
  const SpecificClause *getSingleClause() const {
476
4.77k
    return getSingleClause<SpecificClause>(clauses());
477
4.77k
  }
clang::OMPFilterClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPFilterClause>() const
Line
Count
Source
475
40
  const SpecificClause *getSingleClause() const {
476
40
    return getSingleClause<SpecificClause>(clauses());
477
40
  }
clang::OMPFinalClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPFinalClause>() const
Line
Count
Source
475
409
  const SpecificClause *getSingleClause() const {
476
409
    return getSingleClause<SpecificClause>(clauses());
477
409
  }
clang::OMPPriorityClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPPriorityClause>() const
Line
Count
Source
475
409
  const SpecificClause *getSingleClause() const {
476
409
    return getSingleClause<SpecificClause>(clauses());
477
409
  }
clang::OMPUntiedClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPUntiedClause>() const
Line
Count
Source
475
183
  const SpecificClause *getSingleClause() const {
476
183
    return getSingleClause<SpecificClause>(clauses());
477
183
  }
clang::OMPFlushClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPFlushClause>() const
Line
Count
Source
475
80
  const SpecificClause *getSingleClause() const {
476
80
    return getSingleClause<SpecificClause>(clauses());
477
80
  }
clang::OMPDepobjClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDepobjClause>() const
Line
Count
Source
475
14
  const SpecificClause *getSingleClause() const {
476
14
    return getSingleClause<SpecificClause>(clauses());
477
14
  }
clang::OMPDependClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDependClause>() const
Line
Count
Source
475
14
  const SpecificClause *getSingleClause() const {
476
14
    return getSingleClause<SpecificClause>(clauses());
477
14
  }
clang::OMPDestroyClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDestroyClause>() const
Line
Count
Source
475
8
  const SpecificClause *getSingleClause() const {
476
8
    return getSingleClause<SpecificClause>(clauses());
477
8
  }
clang::OMPUpdateClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPUpdateClause>() const
Line
Count
Source
475
4
  const SpecificClause *getSingleClause() const {
476
4
    return getSingleClause<SpecificClause>(clauses());
477
4
  }
clang::OMPDistScheduleClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPDistScheduleClause>() const
Line
Count
Source
475
4.49k
  const SpecificClause *getSingleClause() const {
476
4.49k
    return getSingleClause<SpecificClause>(clauses());
477
4.49k
  }
clang::OMPSIMDClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSIMDClause>() const
Line
Count
Source
475
48
  const SpecificClause *getSingleClause() const {
476
48
    return getSingleClause<SpecificClause>(clauses());
477
48
  }
clang::OMPSeqCstClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPSeqCstClause>() const
Line
Count
Source
475
555
  const SpecificClause *getSingleClause() const {
476
555
    return getSingleClause<SpecificClause>(clauses());
477
555
  }
clang::OMPAcqRelClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPAcqRelClause>() const
Line
Count
Source
475
515
  const SpecificClause *getSingleClause() const {
476
515
    return getSingleClause<SpecificClause>(clauses());
477
515
  }
clang::OMPAcquireClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPAcquireClause>() const
Line
Count
Source
475
511
  const SpecificClause *getSingleClause() const {
476
511
    return getSingleClause<SpecificClause>(clauses());
477
511
  }
clang::OMPReleaseClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPReleaseClause>() const
Line
Count
Source
475
505
  const SpecificClause *getSingleClause() const {
476
505
    return getSingleClause<SpecificClause>(clauses());
477
505
  }
clang::OMPRelaxedClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPRelaxedClause>() const
Line
Count
Source
475
497
  const SpecificClause *getSingleClause() const {
476
497
    return getSingleClause<SpecificClause>(clauses());
477
497
  }
clang::OMPNogroupClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNogroupClause>() const
Line
Count
Source
475
226
  const SpecificClause *getSingleClause() const {
476
226
    return getSingleClause<SpecificClause>(clauses());
477
226
  }
clang::OMPGrainsizeClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPGrainsizeClause>() const
Line
Count
Source
475
226
  const SpecificClause *getSingleClause() const {
476
226
    return getSingleClause<SpecificClause>(clauses());
477
226
  }
clang::OMPNumTasksClause const* clang::OMPExecutableDirective::getSingleClause<clang::OMPNumTasksClause>() const
Line
Count
Source
475
208
  const SpecificClause *getSingleClause() const {
476
208
    return getSingleClause<SpecificClause>(clauses());
477
208
  }
478
479
  /// Returns true if the current directive has one or more clauses of a
480
  /// specific kind.
481
  template <typename SpecificClause>
482
72.6k
  bool hasClausesOfKind() const {
483
72.6k
    auto Clauses = getClausesOfKind<SpecificClause>();
484
72.6k
    return Clauses.begin() != Clauses.end();
485
72.6k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPDependClause>() const
Line
Count
Source
482
9.85k
  bool hasClausesOfKind() const {
483
9.85k
    auto Clauses = getClausesOfKind<SpecificClause>();
484
9.85k
    return Clauses.begin() != Clauses.end();
485
9.85k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPDetachClause>() const
Line
Count
Source
482
869
  bool hasClausesOfKind() const {
483
869
    auto Clauses = getClausesOfKind<SpecificClause>();
484
869
    return Clauses.begin() != Clauses.end();
485
869
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPNowaitClause>() const
Line
Count
Source
482
19.9k
  bool hasClausesOfKind() const {
483
19.9k
    auto Clauses = getClausesOfKind<SpecificClause>();
484
19.9k
    return Clauses.begin() != Clauses.end();
485
19.9k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPAffinityClause>() const
Line
Count
Source
482
869
  bool hasClausesOfKind() const {
483
869
    auto Clauses = getClausesOfKind<SpecificClause>();
484
869
    return Clauses.begin() != Clauses.end();
485
869
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPNumTeamsClause>() const
Line
Count
Source
482
9.62k
  bool hasClausesOfKind() const {
483
9.62k
    auto Clauses = getClausesOfKind<SpecificClause>();
484
9.62k
    return Clauses.begin() != Clauses.end();
485
9.62k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPIfClause>() const
Line
Count
Source
482
2.85k
  bool hasClausesOfKind() const {
483
2.85k
    auto Clauses = getClausesOfKind<SpecificClause>();
484
2.85k
    return Clauses.begin() != Clauses.end();
485
2.85k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPNumThreadsClause>() const
Line
Count
Source
482
5.83k
  bool hasClausesOfKind() const {
483
5.83k
    auto Clauses = getClausesOfKind<SpecificClause>();
484
5.83k
    return Clauses.begin() != Clauses.end();
485
5.83k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPThreadLimitClause>() const
Line
Count
Source
482
8.77k
  bool hasClausesOfKind() const {
483
8.77k
    auto Clauses = getClausesOfKind<SpecificClause>();
484
8.77k
    return Clauses.begin() != Clauses.end();
485
8.77k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPNontemporalClause>() const
Line
Count
Source
482
13.4k
  bool hasClausesOfKind() const {
483
13.4k
    auto Clauses = getClausesOfKind<SpecificClause>();
484
13.4k
    return Clauses.begin() != Clauses.end();
485
13.4k
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPOrderedClause>() const
Line
Count
Source
482
238
  bool hasClausesOfKind() const {
483
238
    auto Clauses = getClausesOfKind<SpecificClause>();
484
238
    return Clauses.begin() != Clauses.end();
485
238
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPScheduleClause>() const
Line
Count
Source
482
235
  bool hasClausesOfKind() const {
483
235
    auto Clauses = getClausesOfKind<SpecificClause>();
484
235
    return Clauses.begin() != Clauses.end();
485
235
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPFullClause>() const
Line
Count
Source
482
18
  bool hasClausesOfKind() const {
483
18
    auto Clauses = getClausesOfKind<SpecificClause>();
484
18
    return Clauses.begin() != Clauses.end();
485
18
  }
bool clang::OMPExecutableDirective::hasClausesOfKind<clang::OMPInclusiveClause>() const
Line
Count
Source
482
48
  bool hasClausesOfKind() const {
483
48
    auto Clauses = getClausesOfKind<SpecificClause>();
484
48
    return Clauses.begin() != Clauses.end();
485
48
  }
486
487
  /// Returns starting location of directive kind.
488
444k
  SourceLocation getBeginLoc() const { return StartLoc; }
489
  /// Returns ending location of directive.
490
177k
  SourceLocation getEndLoc() const { return EndLoc; }
491
492
  /// Set starting location of directive kind.
493
  ///
494
  /// \param Loc New starting location of directive.
495
  ///
496
17.2k
  void setLocStart(SourceLocation Loc) { StartLoc = Loc; }
497
  /// Set ending location of directive.
498
  ///
499
  /// \param Loc New ending location of directive.
500
  ///
501
17.2k
  void setLocEnd(SourceLocation Loc) { EndLoc = Loc; }
502
503
  /// Get number of clauses.
504
0
  unsigned getNumClauses() const {
505
0
    if (!Data)
506
0
      return 0;
507
0
    return Data->getNumClauses();
508
0
  }
509
510
  /// Returns specified clause.
511
  ///
512
  /// \param I Number of clause.
513
  ///
514
0
  OMPClause *getClause(unsigned I) const { return clauses()[I]; }
515
516
  /// Returns true if directive has associated statement.
517
850k
  bool hasAssociatedStmt() const { return Data && 
Data->hasAssociatedStmt()848k
; }
518
519
  /// Returns statement associated with the directive.
520
29.1k
  const Stmt *getAssociatedStmt() const {
521
29.1k
    return const_cast<OMPExecutableDirective *>(this)->getAssociatedStmt();
522
29.1k
  }
523
207k
  Stmt *getAssociatedStmt() {
524
207k
    assert(hasAssociatedStmt() &&
525
207k
           "Expected directive with the associated statement.");
526
0
    return Data->getAssociatedStmt();
527
207k
  }
528
529
  /// Returns the captured statement associated with the
530
  /// component region within the (combined) directive.
531
  ///
532
  /// \param RegionKind Component region kind.
533
84.4k
  const CapturedStmt *getCapturedStmt(OpenMPDirectiveKind RegionKind) const {
534
84.4k
    assert(hasAssociatedStmt() &&
535
84.4k
           "Expected directive with the associated statement.");
536
0
    SmallVector<OpenMPDirectiveKind, 4> CaptureRegions;
537
84.4k
    getOpenMPCaptureRegions(CaptureRegions, getDirectiveKind());
538
84.4k
    return Data->getCapturedStmt(RegionKind, CaptureRegions);
539
84.4k
  }
540
541
  /// Get innermost captured statement for the construct.
542
171k
  CapturedStmt *getInnermostCapturedStmt() {
543
171k
    assert(hasAssociatedStmt() &&
544
171k
           "Expected directive with the associated statement.");
545
0
    SmallVector<OpenMPDirectiveKind, 4> CaptureRegions;
546
171k
    getOpenMPCaptureRegions(CaptureRegions, getDirectiveKind());
547
171k
    return Data->getInnermostCapturedStmt(CaptureRegions);
548
171k
  }
549
550
79.9k
  const CapturedStmt *getInnermostCapturedStmt() const {
551
79.9k
    return const_cast<OMPExecutableDirective *>(this)
552
79.9k
        ->getInnermostCapturedStmt();
553
79.9k
  }
554
555
5.77M
  OpenMPDirectiveKind getDirectiveKind() const { return Kind; }
556
557
3.07M
  static bool classof(const Stmt *S) {
558
3.07M
    return S->getStmtClass() >= firstOMPExecutableDirectiveConstant &&
559
3.07M
           
S->getStmtClass() <= lastOMPExecutableDirectiveConstant2.83M
;
560
3.07M
  }
561
562
181k
  child_range children() {
563
181k
    if (!Data)
564
1.28k
      return child_range(child_iterator(), child_iterator());
565
180k
    return Data->getAssociatedStmtAsRange();
566
181k
  }
567
568
0
  const_child_range children() const {
569
0
    return const_cast<OMPExecutableDirective *>(this)->children();
570
0
  }
571
572
1.70M
  ArrayRef<OMPClause *> clauses() const {
573
1.70M
    if (!Data)
574
6.27k
      return llvm::None;
575
1.69M
    return Data->getClauses();
576
1.70M
  }
577
578
  /// Returns whether or not this is a Standalone directive.
579
  ///
580
  /// Stand-alone directives are executable directives
581
  /// that have no associated user code.
582
  bool isStandaloneDirective() const;
583
584
  /// Returns the AST node representing OpenMP structured-block of this
585
  /// OpenMP executable directive,
586
  /// Prerequisite: Executable Directive must not be Standalone directive.
587
84
  const Stmt *getStructuredBlock() const {
588
84
    return const_cast<OMPExecutableDirective *>(this)->getStructuredBlock();
589
84
  }
590
  Stmt *getStructuredBlock();
591
592
227
  const Stmt *getRawStmt() const {
593
227
    return const_cast<OMPExecutableDirective *>(this)->getRawStmt();
594
227
  }
595
141k
  Stmt *getRawStmt() {
596
141k
    assert(hasAssociatedStmt() &&
597
141k
           "Expected directive with the associated statement.");
598
0
    return Data->getRawStmt();
599
141k
  }
600
};
601
602
/// This represents '#pragma omp parallel' directive.
603
///
604
/// \code
605
/// #pragma omp parallel private(a,b) reduction(+: c,d)
606
/// \endcode
607
/// In this example directive '#pragma omp parallel' has clauses 'private'
608
/// with the variables 'a' and 'b' and 'reduction' with operator '+' and
609
/// variables 'c' and 'd'.
610
///
611
class OMPParallelDirective : public OMPExecutableDirective {
612
  friend class ASTStmtReader;
613
  friend class OMPExecutableDirective;
614
  /// true if the construct has inner cancel directive.
615
  bool HasCancel = false;
616
617
  /// Build directive with the given start and end location.
618
  ///
619
  /// \param StartLoc Starting location of the directive (directive keyword).
620
  /// \param EndLoc Ending Location of the directive.
621
  ///
622
  OMPParallelDirective(SourceLocation StartLoc, SourceLocation EndLoc)
623
      : OMPExecutableDirective(OMPParallelDirectiveClass,
624
24.0k
                               llvm::omp::OMPD_parallel, StartLoc, EndLoc) {}
625
626
  /// Build an empty directive.
627
  ///
628
  explicit OMPParallelDirective()
629
      : OMPExecutableDirective(OMPParallelDirectiveClass,
630
                               llvm::omp::OMPD_parallel, SourceLocation(),
631
740
                               SourceLocation()) {}
632
633
  /// Sets special task reduction descriptor.
634
24.0k
  void setTaskReductionRefExpr(Expr *E) { Data->getChildren()[0] = E; }
635
636
  /// Set cancel state.
637
24.7k
  void setHasCancel(bool Has) { HasCancel = Has; }
638
639
public:
640
  /// Creates directive with a list of \a Clauses.
641
  ///
642
  /// \param C AST context.
643
  /// \param StartLoc Starting location of the directive kind.
644
  /// \param EndLoc Ending Location of the directive.
645
  /// \param Clauses List of clauses.
646
  /// \param AssociatedStmt Statement associated with the directive.
647
  /// \param TaskRedRef Task reduction special reference expression to handle
648
  /// taskgroup descriptor.
649
  /// \param HasCancel true if this directive has inner cancel directive.
650
  ///
651
  static OMPParallelDirective *
652
  Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
653
         ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *TaskRedRef,
654
         bool HasCancel);
655
656
  /// Creates an empty directive with the place for \a N clauses.
657
  ///
658
  /// \param C AST context.
659
  /// \param NumClauses Number of clauses.
660
  ///
661
  static OMPParallelDirective *CreateEmpty(const ASTContext &C,
662
                                           unsigned NumClauses, EmptyShell);
663
664
  /// Returns special task reduction reference expression.
665
2
  Expr *getTaskReductionRefExpr() {
666
2
    return cast_or_null<Expr>(Data->getChildren()[0]);
667
2
  }
668
2
  const Expr *getTaskReductionRefExpr() const {
669
2
    return const_cast<OMPParallelDirective *>(this)->getTaskReductionRefExpr();
670
2
  }
671
672
  /// Return true if current directive has inner cancel directive.
673
1.78k
  bool hasCancel() const { return HasCancel; }
674
675
23.5k
  static bool classof(const Stmt *T) {
676
23.5k
    return T->getStmtClass() == OMPParallelDirectiveClass;
677
23.5k
  }
678
};
679
680
/// The base class for all loop-based directives, including loop transformation
681
/// directives.
682
class OMPLoopBasedDirective : public OMPExecutableDirective {
683
  friend class ASTStmtReader;
684
685
protected:
686
  /// Number of collapsed loops as specified by 'collapse' clause.
687
  unsigned NumAssociatedLoops = 0;
688
689
  /// Build instance of loop directive of class \a Kind.
690
  ///
691
  /// \param SC Statement class.
692
  /// \param Kind Kind of OpenMP directive.
693
  /// \param StartLoc Starting location of the directive (directive keyword).
694
  /// \param EndLoc Ending location of the directive.
695
  /// \param NumAssociatedLoops Number of loops associated with the construct.
696
  ///
697
  OMPLoopBasedDirective(StmtClass SC, OpenMPDirectiveKind Kind,
698
                        SourceLocation StartLoc, SourceLocation EndLoc,
699
                        unsigned NumAssociatedLoops)
700
      : OMPExecutableDirective(SC, Kind, StartLoc, EndLoc),
701
146k
        NumAssociatedLoops(NumAssociatedLoops) {}
702
703
public:
704
  /// The expressions built to support OpenMP loops in combined/composite
705
  /// pragmas (e.g. pragma omp distribute parallel for)
706
  struct DistCombinedHelperExprs {
707
    /// DistributeLowerBound - used when composing 'omp distribute' with
708
    /// 'omp for' in a same construct.
709
    Expr *LB;
710
    /// DistributeUpperBound - used when composing 'omp distribute' with
711
    /// 'omp for' in a same construct.
712
    Expr *UB;
713
    /// DistributeEnsureUpperBound - used when composing 'omp distribute'
714
    ///  with 'omp for' in a same construct, EUB depends on DistUB
715
    Expr *EUB;
716
    /// Distribute loop iteration variable init used when composing 'omp
717
    /// distribute'
718
    ///  with 'omp for' in a same construct
719
    Expr *Init;
720
    /// Distribute Loop condition used when composing 'omp distribute'
721
    ///  with 'omp for' in a same construct
722
    Expr *Cond;
723
    /// Update of LowerBound for statically scheduled omp loops for
724
    /// outer loop in combined constructs (e.g. 'distribute parallel for')
725
    Expr *NLB;
726
    /// Update of UpperBound for statically scheduled omp loops for
727
    /// outer loop in combined constructs (e.g. 'distribute parallel for')
728
    Expr *NUB;
729
    /// Distribute Loop condition used when composing 'omp distribute'
730
    ///  with 'omp for' in a same construct when schedule is chunked.
731
    Expr *DistCond;
732
    /// 'omp parallel for' loop condition used when composed with
733
    /// 'omp distribute' in the same construct and when schedule is
734
    /// chunked and the chunk size is 1.
735
    Expr *ParForInDistCond;
736
  };
737
738
  /// The expressions built for the OpenMP loop CodeGen for the
739
  /// whole collapsed loop nest.
740
  struct HelperExprs {
741
    /// Loop iteration variable.
742
    Expr *IterationVarRef;
743
    /// Loop last iteration number.
744
    Expr *LastIteration;
745
    /// Loop number of iterations.
746
    Expr *NumIterations;
747
    /// Calculation of last iteration.
748
    Expr *CalcLastIteration;
749
    /// Loop pre-condition.
750
    Expr *PreCond;
751
    /// Loop condition.
752
    Expr *Cond;
753
    /// Loop iteration variable init.
754
    Expr *Init;
755
    /// Loop increment.
756
    Expr *Inc;
757
    /// IsLastIteration - local flag variable passed to runtime.
758
    Expr *IL;
759
    /// LowerBound - local variable passed to runtime.
760
    Expr *LB;
761
    /// UpperBound - local variable passed to runtime.
762
    Expr *UB;
763
    /// Stride - local variable passed to runtime.
764
    Expr *ST;
765
    /// EnsureUpperBound -- expression UB = min(UB, NumIterations).
766
    Expr *EUB;
767
    /// Update of LowerBound for statically scheduled 'omp for' loops.
768
    Expr *NLB;
769
    /// Update of UpperBound for statically scheduled 'omp for' loops.
770
    Expr *NUB;
771
    /// PreviousLowerBound - local variable passed to runtime in the
772
    /// enclosing schedule or null if that does not apply.
773
    Expr *PrevLB;
774
    /// PreviousUpperBound - local variable passed to runtime in the
775
    /// enclosing schedule or null if that does not apply.
776
    Expr *PrevUB;
777
    /// DistInc - increment expression for distribute loop when found
778
    /// combined with a further loop level (e.g. in 'distribute parallel for')
779
    /// expression IV = IV + ST
780
    Expr *DistInc;
781
    /// PrevEUB - expression similar to EUB but to be used when loop
782
    /// scheduling uses PrevLB and PrevUB (e.g.  in 'distribute parallel for'
783
    /// when ensuring that the UB is either the calculated UB by the runtime or
784
    /// the end of the assigned distribute chunk)
785
    /// expression UB = min (UB, PrevUB)
786
    Expr *PrevEUB;
787
    /// Counters Loop counters.
788
    SmallVector<Expr *, 4> Counters;
789
    /// PrivateCounters Loop counters.
790
    SmallVector<Expr *, 4> PrivateCounters;
791
    /// Expressions for loop counters inits for CodeGen.
792
    SmallVector<Expr *, 4> Inits;
793
    /// Expressions for loop counters update for CodeGen.
794
    SmallVector<Expr *, 4> Updates;
795
    /// Final loop counter values for GodeGen.
796
    SmallVector<Expr *, 4> Finals;
797
    /// List of counters required for the generation of the non-rectangular
798
    /// loops.
799
    SmallVector<Expr *, 4> DependentCounters;
800
    /// List of initializers required for the generation of the non-rectangular
801
    /// loops.
802
    SmallVector<Expr *, 4> DependentInits;
803
    /// List of final conditions required for the generation of the
804
    /// non-rectangular loops.
805
    SmallVector<Expr *, 4> FinalsConditions;
806
    /// Init statement for all captured expressions.
807
    Stmt *PreInits;
808
809
    /// Expressions used when combining OpenMP loop pragmas
810
    DistCombinedHelperExprs DistCombinedFields;
811
812
    /// Check if all the expressions are built (does not check the
813
    /// worksharing ones).
814
98.3k
    bool builtAll() {
815
98.3k
      return IterationVarRef != nullptr && LastIteration != nullptr &&
816
98.3k
             NumIterations != nullptr && PreCond != nullptr &&
817
98.3k
             Cond != nullptr && Init != nullptr && Inc != nullptr;
818
98.3k
    }
819
820
    /// Initialize all the fields to null.
821
    /// \param Size Number of elements in the
822
    /// counters/finals/updates/dependent_counters/dependent_inits/finals_conditions
823
    /// arrays.
824
140k
    void clear(unsigned Size) {
825
140k
      IterationVarRef = nullptr;
826
140k
      LastIteration = nullptr;
827
140k
      CalcLastIteration = nullptr;
828
140k
      PreCond = nullptr;
829
140k
      Cond = nullptr;
830
140k
      Init = nullptr;
831
140k
      Inc = nullptr;
832
140k
      IL = nullptr;
833
140k
      LB = nullptr;
834
140k
      UB = nullptr;
835
140k
      ST = nullptr;
836
140k
      EUB = nullptr;
837
140k
      NLB = nullptr;
838
140k
      NUB = nullptr;
839
140k
      NumIterations = nullptr;
840
140k
      PrevLB = nullptr;
841
140k
      PrevUB = nullptr;
842
140k
      DistInc = nullptr;
843
140k
      PrevEUB = nullptr;
844
140k
      Counters.resize(Size);
845
140k
      PrivateCounters.resize(Size);
846
140k
      Inits.resize(Size);
847
140k
      Updates.resize(Size);
848
140k
      Finals.resize(Size);
849
140k
      DependentCounters.resize(Size);
850
140k
      DependentInits.resize(Size);
851
140k
      FinalsConditions.resize(Size);
852
282k
      for (unsigned I = 0; I < Size; 
++I142k
) {
853
142k
        Counters[I] = nullptr;
854
142k
        PrivateCounters[I] = nullptr;
855
142k
        Inits[I] = nullptr;
856
142k
        Updates[I] = nullptr;
857
142k
        Finals[I] = nullptr;
858
142k
        DependentCounters[I] = nullptr;
859
142k
        DependentInits[I] = nullptr;
860
142k
        FinalsConditions[I] = nullptr;
861
142k
      }
862
140k
      PreInits = nullptr;
863
140k
      DistCombinedFields.LB = nullptr;
864
140k
      DistCombinedFields.UB = nullptr;
865
140k
      DistCombinedFields.EUB = nullptr;
866
140k
      DistCombinedFields.Init = nullptr;
867
140k
      DistCombinedFields.Cond = nullptr;
868
140k
      DistCombinedFields.NLB = nullptr;
869
140k
      DistCombinedFields.NUB = nullptr;
870
140k
      DistCombinedFields.DistCond = nullptr;
871
140k
      DistCombinedFields.ParForInDistCond = nullptr;
872
140k
    }
873
  };
874
875
  /// Get number of collapsed loops.
876
3.46M
  unsigned getLoopsNumber() const { return NumAssociatedLoops; }
877
878
  /// Try to find the next loop sub-statement in the specified statement \p
879
  /// CurStmt.
880
  /// \param TryImperfectlyNestedLoops true, if we need to try to look for the
881
  /// imperfectly nested loop.
882
  static Stmt *tryToFindNextInnerLoop(Stmt *CurStmt,
883
                                      bool TryImperfectlyNestedLoops);
884
  static const Stmt *tryToFindNextInnerLoop(const Stmt *CurStmt,
885
11.6k
                                            bool TryImperfectlyNestedLoops) {
886
11.6k
    return tryToFindNextInnerLoop(const_cast<Stmt *>(CurStmt),
887
11.6k
                                  TryImperfectlyNestedLoops);
888
11.6k
  }
889
890
  /// Calls the specified callback function for all the loops in \p CurStmt,
891
  /// from the outermost to the innermost.
892
  static bool doForAllLoops(Stmt *CurStmt, bool TryImperfectlyNestedLoops,
893
                            unsigned NumLoops,
894
                            llvm::function_ref<bool(unsigned, Stmt *)> Callback,
895
                            llvm::function_ref<void(OMPLoopBasedDirective *)>
896
                                OnTransformationCallback);
897
  static bool
898
  doForAllLoops(const Stmt *CurStmt, bool TryImperfectlyNestedLoops,
899
                unsigned NumLoops,
900
                llvm::function_ref<bool(unsigned, const Stmt *)> Callback,
901
                llvm::function_ref<void(const OMPLoopBasedDirective *)>
902
0
                    OnTransformationCallback) {
903
0
    auto &&NewCallback = [Callback](unsigned Cnt, Stmt *CurStmt) {
904
0
      return Callback(Cnt, CurStmt);
905
0
    };
906
0
    auto &&NewTransformCb =
907
0
        [OnTransformationCallback](OMPLoopBasedDirective *A) {
908
0
          OnTransformationCallback(A);
909
0
        };
910
0
    return doForAllLoops(const_cast<Stmt *>(CurStmt), TryImperfectlyNestedLoops,
911
0
                         NumLoops, NewCallback, NewTransformCb);
912
0
  }
913
914
  /// Calls the specified callback function for all the loops in \p CurStmt,
915
  /// from the outermost to the innermost.
916
  static bool
917
  doForAllLoops(Stmt *CurStmt, bool TryImperfectlyNestedLoops,
918
                unsigned NumLoops,
919
20.2k
                llvm::function_ref<bool(unsigned, Stmt *)> Callback) {
920
20.2k
    auto &&TransformCb = [](OMPLoopBasedDirective *) 
{}26
;
921
20.2k
    return doForAllLoops(CurStmt, TryImperfectlyNestedLoops, NumLoops, Callback,
922
20.2k
                         TransformCb);
923
20.2k
  }
924
  static bool
925
  doForAllLoops(const Stmt *CurStmt, bool TryImperfectlyNestedLoops,
926
                unsigned NumLoops,
927
17.4k
                llvm::function_ref<bool(unsigned, const Stmt *)> Callback) {
928
18.1k
    auto &&NewCallback = [Callback](unsigned Cnt, const Stmt *CurStmt) {
929
18.1k
      return Callback(Cnt, CurStmt);
930
18.1k
    };
931
17.4k
    return doForAllLoops(const_cast<Stmt *>(CurStmt), TryImperfectlyNestedLoops,
932
17.4k
                         NumLoops, NewCallback);
933
17.4k
  }
934
935
  /// Calls the specified callback function for all the loop bodies in \p
936
  /// CurStmt, from the outermost loop to the innermost.
937
  static void doForAllLoopsBodies(
938
      Stmt *CurStmt, bool TryImperfectlyNestedLoops, unsigned NumLoops,
939
      llvm::function_ref<void(unsigned, Stmt *, Stmt *)> Callback);
940
  static void doForAllLoopsBodies(
941
      const Stmt *CurStmt, bool TryImperfectlyNestedLoops, unsigned NumLoops,
942
0
      llvm::function_ref<void(unsigned, const Stmt *, const Stmt *)> Callback) {
943
0
    auto &&NewCallback = [Callback](unsigned Cnt, Stmt *Loop, Stmt *Body) {
944
0
      Callback(Cnt, Loop, Body);
945
0
    };
946
0
    doForAllLoopsBodies(const_cast<Stmt *>(CurStmt), TryImperfectlyNestedLoops,
947
0
                        NumLoops, NewCallback);
948
0
  }
949
950
22.6k
  static bool classof(const Stmt *T) {
951
22.6k
    if (auto *D = dyn_cast<OMPExecutableDirective>(T))
952
1.18k
      return isOpenMPLoopDirective(D->getDirectiveKind());
953
21.5k
    return false;
954
22.6k
  }
955
};
956
957
/// This is a common base class for loop directives ('omp simd', 'omp
958
/// for', 'omp for simd' etc.). It is responsible for the loop code generation.
959
///
960
class OMPLoopDirective : public OMPLoopBasedDirective {
961
  friend class ASTStmtReader;
962
963
  /// Offsets to the stored exprs.
964
  /// This enumeration contains offsets to all the pointers to children
965
  /// expressions stored in OMPLoopDirective.
966
  /// The first 9 children are necessary for all the loop directives,
967
  /// the next 8 are specific to the worksharing ones, and the next 11 are
968
  /// used for combined constructs containing two pragmas associated to loops.
969
  /// After the fixed children, three arrays of length NumAssociatedLoops are
970
  /// allocated: loop counters, their updates and final values.
971
  /// PrevLowerBound and PrevUpperBound are used to communicate blocking
972
  /// information in composite constructs which require loop blocking
973
  /// DistInc is used to generate the increment expression for the distribute
974
  /// loop when combined with a further nested loop
975
  /// PrevEnsureUpperBound is used as the EnsureUpperBound expression for the
976
  /// for loop when combined with a previous distribute loop in the same pragma
977
  /// (e.g. 'distribute parallel for')
978
  ///
979
  enum {
980
    IterationVariableOffset = 0,
981
    LastIterationOffset = 1,
982
    CalcLastIterationOffset = 2,
983
    PreConditionOffset = 3,
984
    CondOffset = 4,
985
    InitOffset = 5,
986
    IncOffset = 6,
987
    PreInitsOffset = 7,
988
    // The '...End' enumerators do not correspond to child expressions - they
989
    // specify the offset to the end (and start of the following counters/
990
    // updates/finals/dependent_counters/dependent_inits/finals_conditions
991
    // arrays).
992
    DefaultEnd = 8,
993
    // The following 8 exprs are used by worksharing and distribute loops only.
994
    IsLastIterVariableOffset = 8,
995
    LowerBoundVariableOffset = 9,
996
    UpperBoundVariableOffset = 10,
997
    StrideVariableOffset = 11,
998
    EnsureUpperBoundOffset = 12,
999
    NextLowerBoundOffset = 13,
1000
    NextUpperBoundOffset = 14,
1001
    NumIterationsOffset = 15,
1002
    // Offset to the end for worksharing loop directives.
1003
    WorksharingEnd = 16,
1004
    PrevLowerBoundVariableOffset = 16,
1005
    PrevUpperBoundVariableOffset = 17,
1006
    DistIncOffset = 18,
1007
    PrevEnsureUpperBoundOffset = 19,
1008
    CombinedLowerBoundVariableOffset = 20,
1009
    CombinedUpperBoundVariableOffset = 21,
1010
    CombinedEnsureUpperBoundOffset = 22,
1011
    CombinedInitOffset = 23,
1012
    CombinedConditionOffset = 24,
1013
    CombinedNextLowerBoundOffset = 25,
1014
    CombinedNextUpperBoundOffset = 26,
1015
    CombinedDistConditionOffset = 27,
1016
    CombinedParForInDistConditionOffset = 28,
1017
    // Offset to the end (and start of the following
1018
    // counters/updates/finals/dependent_counters/dependent_inits/finals_conditions
1019
    // arrays) for combined distribute loop directives.
1020
    CombinedDistributeEnd = 29,
1021
  };
1022
1023
  /// Get the counters storage.
1024
199k
  MutableArrayRef<Expr *> getCounters() {
1025
199k
    auto **Storage = reinterpret_cast<Expr **>(
1026
199k
        &Data->getChildren()[getArraysOffset(getDirectiveKind())]);
1027
199k
    return llvm::makeMutableArrayRef(Storage, getLoopsNumber());
1028
199k
  }
1029
1030
  /// Get the private counters storage.
1031
164k
  MutableArrayRef<Expr *> getPrivateCounters() {
1032
164k
    auto **Storage = reinterpret_cast<Expr **>(
1033
164k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
1034
164k
                             getLoopsNumber()]);
1035
164k
    return llvm::makeMutableArrayRef(Storage, getLoopsNumber());
1036
164k
  }
1037
1038
  /// Get the updates storage.
1039
141k
  MutableArrayRef<Expr *> getInits() {
1040
141k
    auto **Storage = reinterpret_cast<Expr **>(
1041
141k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
1042
141k
                             2 * getLoopsNumber()]);
1043
141k
    return llvm::makeMutableArrayRef(Storage, getLoopsNumber());
1044
141k
  }
1045
1046
  /// Get the updates storage.
1047
150k
  MutableArrayRef<Expr *> getUpdates() {
1048
150k
    auto **Storage = reinterpret_cast<Expr **>(
1049
150k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
1050
150k
                             3 * getLoopsNumber()]);
1051
150k
    return llvm::makeMutableArrayRef(Storage, getLoopsNumber());
1052
150k
  }
1053
1054
  /// Get the final counter updates storage.
1055
148k
  MutableArrayRef<Expr *> getFinals() {
1056
148k
    auto **Storage = reinterpret_cast<Expr **>(
1057
148k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
1058
148k
                             4 * getLoopsNumber()]);
1059
148k
    return llvm::makeMutableArrayRef(Storage, getLoopsNumber());
1060
148k
  }
1061
1062
  /// Get the dependent counters storage.
1063
141k
  MutableArrayRef<Expr *> getDependentCounters() {
1064
141k
    auto **Storage = reinterpret_cast<Expr **>(
1065
141k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
1066
141k
                             5 * getLoopsNumber()]);
1067
141k
    return llvm::makeMutableArrayRef(Storage, getLoopsNumber());
1068
141k
  }
1069
1070
  /// Get the dependent inits storage.
1071
141k
  MutableArrayRef<Expr *> getDependentInits() {
1072
141k
    auto **Storage = reinterpret_cast<Expr **>(
1073
141k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
1074
141k
                             6 * getLoopsNumber()]);
1075
141k
    return llvm::makeMutableArrayRef(Storage, getLoopsNumber());
1076
141k
  }
1077
1078
  /// Get the finals conditions storage.
1079
150k
  MutableArrayRef<Expr *> getFinalsConditions() {
1080
150k
    auto **Storage = reinterpret_cast<Expr **>(
1081
150k
        &Data->getChildren()[getArraysOffset(getDirectiveKind()) +
1082
150k
                             7 * getLoopsNumber()]);
1083
150k
    return llvm::makeMutableArrayRef(Storage, getLoopsNumber());
1084
150k
  }
1085
1086
protected:
1087
  /// Build instance of loop directive of class \a Kind.
1088
  ///
1089
  /// \param SC Statement class.
1090
  /// \param Kind Kind of OpenMP directive.
1091
  /// \param StartLoc Starting location of the directive (directive keyword).
1092
  /// \param EndLoc Ending location of the directive.
1093
  /// \param CollapsedNum Number of collapsed loops from 'collapse' clause.
1094
  ///
1095
  OMPLoopDirective(StmtClass SC, OpenMPDirectiveKind Kind,
1096
                   SourceLocation StartLoc, SourceLocation EndLoc,
1097
                   unsigned CollapsedNum)
1098
145k
      : OMPLoopBasedDirective(SC, Kind, StartLoc, EndLoc, CollapsedNum) {}
1099
1100
  /// Offset to the start of children expression arrays.
1101
1.41M
  static unsigned getArraysOffset(OpenMPDirectiveKind Kind) {
1102
1.41M
    if (isOpenMPLoopBoundSharingDirective(Kind))
1103
401k
      return CombinedDistributeEnd;
1104
1.01M
    if (isOpenMPWorksharingDirective(Kind) || 
isOpenMPTaskLoopDirective(Kind)641k
||
1105
1.01M
        
isOpenMPDistributeDirective(Kind)429k
)
1106
881k
      return WorksharingEnd;
1107
136k
    return DefaultEnd;
1108
1.01M
  }
1109
1110
  /// Children number.
1111
  static unsigned numLoopChildren(unsigned CollapsedNum,
1112
180k
                                  OpenMPDirectiveKind Kind) {
1113
180k
    return getArraysOffset(Kind) +
1114
180k
           8 * CollapsedNum; // Counters, PrivateCounters, Inits,
1115
                             // Updates, Finals, DependentCounters,
1116
                             // DependentInits, FinalsConditions.
1117
180k
  }
1118
1119
139k
  void setIterationVariable(Expr *IV) {
1120
139k
    Data->getChildren()[IterationVariableOffset] = IV;
1121
139k
  }
1122
139k
  void setLastIteration(Expr *LI) {
1123
139k
    Data->getChildren()[LastIterationOffset] = LI;
1124
139k
  }
1125
139k
  void setCalcLastIteration(Expr *CLI) {
1126
139k
    Data->getChildren()[CalcLastIterationOffset] = CLI;
1127
139k
  }
1128
139k
  void setPreCond(Expr *PC) { Data->getChildren()[PreConditionOffset] = PC; }
1129
139k
  void setCond(Expr *Cond) { Data->getChildren()[CondOffset] = Cond; }
1130
139k
  void setInit(Expr *Init) { Data->getChildren()[InitOffset] = Init; }
1131
139k
  void setInc(Expr *Inc) { Data->getChildren()[IncOffset] = Inc; }
1132
139k
  void setPreInits(Stmt *PreInits) {
1133
139k
    Data->getChildren()[PreInitsOffset] = PreInits;
1134
139k
  }
1135
125k
  void setIsLastIterVariable(Expr *IL) {
1136
125k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1137
125k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1138
125k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1139
125k
           "expected worksharing loop directive");
1140
0
    Data->getChildren()[IsLastIterVariableOffset] = IL;
1141
125k
  }
1142
125k
  void setLowerBoundVariable(Expr *LB) {
1143
125k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1144
125k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1145
125k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1146
125k
           "expected worksharing loop directive");
1147
0
    Data->getChildren()[LowerBoundVariableOffset] = LB;
1148
125k
  }
1149
125k
  void setUpperBoundVariable(Expr *UB) {
1150
125k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1151
125k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1152
125k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1153
125k
           "expected worksharing loop directive");
1154
0
    Data->getChildren()[UpperBoundVariableOffset] = UB;
1155
125k
  }
1156
125k
  void setStrideVariable(Expr *ST) {
1157
125k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1158
125k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1159
125k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1160
125k
           "expected worksharing loop directive");
1161
0
    Data->getChildren()[StrideVariableOffset] = ST;
1162
125k
  }
1163
125k
  void setEnsureUpperBound(Expr *EUB) {
1164
125k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1165
125k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1166
125k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1167
125k
           "expected worksharing loop directive");
1168
0
    Data->getChildren()[EnsureUpperBoundOffset] = EUB;
1169
125k
  }
1170
125k
  void setNextLowerBound(Expr *NLB) {
1171
125k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1172
125k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1173
125k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1174
125k
           "expected worksharing loop directive");
1175
0
    Data->getChildren()[NextLowerBoundOffset] = NLB;
1176
125k
  }
1177
125k
  void setNextUpperBound(Expr *NUB) {
1178
125k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1179
125k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1180
125k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1181
125k
           "expected worksharing loop directive");
1182
0
    Data->getChildren()[NextUpperBoundOffset] = NUB;
1183
125k
  }
1184
125k
  void setNumIterations(Expr *NI) {
1185
125k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1186
125k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1187
125k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1188
125k
           "expected worksharing loop directive");
1189
0
    Data->getChildren()[NumIterationsOffset] = NI;
1190
125k
  }
1191
36.2k
  void setPrevLowerBoundVariable(Expr *PrevLB) {
1192
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1193
36.2k
           "expected loop bound sharing directive");
1194
0
    Data->getChildren()[PrevLowerBoundVariableOffset] = PrevLB;
1195
36.2k
  }
1196
36.2k
  void setPrevUpperBoundVariable(Expr *PrevUB) {
1197
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1198
36.2k
           "expected loop bound sharing directive");
1199
0
    Data->getChildren()[PrevUpperBoundVariableOffset] = PrevUB;
1200
36.2k
  }
1201
36.2k
  void setDistInc(Expr *DistInc) {
1202
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1203
36.2k
           "expected loop bound sharing directive");
1204
0
    Data->getChildren()[DistIncOffset] = DistInc;
1205
36.2k
  }
1206
36.2k
  void setPrevEnsureUpperBound(Expr *PrevEUB) {
1207
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1208
36.2k
           "expected loop bound sharing directive");
1209
0
    Data->getChildren()[PrevEnsureUpperBoundOffset] = PrevEUB;
1210
36.2k
  }
1211
36.2k
  void setCombinedLowerBoundVariable(Expr *CombLB) {
1212
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1213
36.2k
           "expected loop bound sharing directive");
1214
0
    Data->getChildren()[CombinedLowerBoundVariableOffset] = CombLB;
1215
36.2k
  }
1216
36.2k
  void setCombinedUpperBoundVariable(Expr *CombUB) {
1217
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1218
36.2k
           "expected loop bound sharing directive");
1219
0
    Data->getChildren()[CombinedUpperBoundVariableOffset] = CombUB;
1220
36.2k
  }
1221
36.2k
  void setCombinedEnsureUpperBound(Expr *CombEUB) {
1222
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1223
36.2k
           "expected loop bound sharing directive");
1224
0
    Data->getChildren()[CombinedEnsureUpperBoundOffset] = CombEUB;
1225
36.2k
  }
1226
36.2k
  void setCombinedInit(Expr *CombInit) {
1227
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1228
36.2k
           "expected loop bound sharing directive");
1229
0
    Data->getChildren()[CombinedInitOffset] = CombInit;
1230
36.2k
  }
1231
36.2k
  void setCombinedCond(Expr *CombCond) {
1232
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1233
36.2k
           "expected loop bound sharing directive");
1234
0
    Data->getChildren()[CombinedConditionOffset] = CombCond;
1235
36.2k
  }
1236
36.2k
  void setCombinedNextLowerBound(Expr *CombNLB) {
1237
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1238
36.2k
           "expected loop bound sharing directive");
1239
0
    Data->getChildren()[CombinedNextLowerBoundOffset] = CombNLB;
1240
36.2k
  }
1241
36.2k
  void setCombinedNextUpperBound(Expr *CombNUB) {
1242
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1243
36.2k
           "expected loop bound sharing directive");
1244
0
    Data->getChildren()[CombinedNextUpperBoundOffset] = CombNUB;
1245
36.2k
  }
1246
36.2k
  void setCombinedDistCond(Expr *CombDistCond) {
1247
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1248
36.2k
           "expected loop bound distribute sharing directive");
1249
0
    Data->getChildren()[CombinedDistConditionOffset] = CombDistCond;
1250
36.2k
  }
1251
36.2k
  void setCombinedParForInDistCond(Expr *CombParForInDistCond) {
1252
36.2k
    assert(isOpenMPLoopBoundSharingDirective(getDirectiveKind()) &&
1253
36.2k
           "expected loop bound distribute sharing directive");
1254
0
    Data->getChildren()[CombinedParForInDistConditionOffset] =
1255
36.2k
        CombParForInDistCond;
1256
36.2k
  }
1257
  void setCounters(ArrayRef<Expr *> A);
1258
  void setPrivateCounters(ArrayRef<Expr *> A);
1259
  void setInits(ArrayRef<Expr *> A);
1260
  void setUpdates(ArrayRef<Expr *> A);
1261
  void setFinals(ArrayRef<Expr *> A);
1262
  void setDependentCounters(ArrayRef<Expr *> A);
1263
  void setDependentInits(ArrayRef<Expr *> A);
1264
  void setFinalsConditions(ArrayRef<Expr *> A);
1265
1266
public:
1267
32.3k
  Expr *getIterationVariable() const {
1268
32.3k
    return cast<Expr>(Data->getChildren()[IterationVariableOffset]);
1269
32.3k
  }
1270
13.9k
  Expr *getLastIteration() const {
1271
13.9k
    return cast<Expr>(Data->getChildren()[LastIterationOffset]);
1272
13.9k
  }
1273
0
  Expr *getCalcLastIteration() const {
1274
0
    return cast<Expr>(Data->getChildren()[CalcLastIterationOffset]);
1275
0
  }
1276
16.0k
  Expr *getPreCond() const {
1277
16.0k
    return cast<Expr>(Data->getChildren()[PreConditionOffset]);
1278
16.0k
  }
1279
10.9k
  Expr *getCond() const { return cast<Expr>(Data->getChildren()[CondOffset]); }
1280
10.9k
  Expr *getInit() const { return cast<Expr>(Data->getChildren()[InitOffset]); }
1281
11.0k
  Expr *getInc() const { return cast<Expr>(Data->getChildren()[IncOffset]); }
1282
17.4k
  const Stmt *getPreInits() const {
1283
17.4k
    return Data->getChildren()[PreInitsOffset];
1284
17.4k
  }
1285
0
  Stmt *getPreInits() { return Data->getChildren()[PreInitsOffset]; }
1286
9.49k
  Expr *getIsLastIterVariable() const {
1287
9.49k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1288
9.49k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1289
9.49k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1290
9.49k
           "expected worksharing loop directive");
1291
0
    return cast<Expr>(Data->getChildren()[IsLastIterVariableOffset]);
1292
9.49k
  }
1293
9.79k
  Expr *getLowerBoundVariable() const {
1294
9.79k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1295
9.79k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1296
9.79k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1297
9.79k
           "expected worksharing loop directive");
1298
0
    return cast<Expr>(Data->getChildren()[LowerBoundVariableOffset]);
1299
9.79k
  }
1300
9.79k
  Expr *getUpperBoundVariable() const {
1301
9.79k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1302
9.79k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1303
9.79k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1304
9.79k
           "expected worksharing loop directive");
1305
0
    return cast<Expr>(Data->getChildren()[UpperBoundVariableOffset]);
1306
9.79k
  }
1307
9.72k
  Expr *getStrideVariable() const {
1308
9.72k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1309
9.72k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1310
9.72k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1311
9.72k
           "expected worksharing loop directive");
1312
0
    return cast<Expr>(Data->getChildren()[StrideVariableOffset]);
1313
9.72k
  }
1314
7.47k
  Expr *getEnsureUpperBound() const {
1315
7.47k
    assert((isOpenMPWorksharingDirective(getDirectiveKind()) ||
1316
7.47k
            isOpenMPTaskLoopDirective(getDirectiveKind()) ||
1317
7.47k
            isOpenMPDistributeDirective(getDirectiveKind())) &&
1318
7.47k
           "expected worksharing loop directive");