Coverage Report

Created: 2021-01-23 06:44

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