Coverage Report

Created: 2020-02-15 09:57

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/lib/CodeGen/CGOpenMPRuntime.h
Line
Count
Source (jump to first uncovered line)
1
//===----- CGOpenMPRuntime.h - Interface to OpenMP Runtimes -----*- 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
//
9
// This provides a class for OpenMP runtime code generation.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_CLANG_LIB_CODEGEN_CGOPENMPRUNTIME_H
14
#define LLVM_CLANG_LIB_CODEGEN_CGOPENMPRUNTIME_H
15
16
#include "CGValue.h"
17
#include "clang/AST/DeclOpenMP.h"
18
#include "clang/AST/GlobalDecl.h"
19
#include "clang/AST/Type.h"
20
#include "clang/Basic/OpenMPKinds.h"
21
#include "clang/Basic/SourceLocation.h"
22
#include "llvm/ADT/DenseMap.h"
23
#include "llvm/ADT/SmallPtrSet.h"
24
#include "llvm/ADT/StringMap.h"
25
#include "llvm/ADT/StringSet.h"
26
#include "llvm/Frontend/OpenMP/OMPConstants.h"
27
#include "llvm/IR/Function.h"
28
#include "llvm/IR/ValueHandle.h"
29
#include "llvm/Support/AtomicOrdering.h"
30
31
namespace llvm {
32
class ArrayType;
33
class Constant;
34
class FunctionType;
35
class GlobalVariable;
36
class StructType;
37
class Type;
38
class Value;
39
} // namespace llvm
40
41
namespace clang {
42
class Expr;
43
class OMPDependClause;
44
class OMPExecutableDirective;
45
class OMPLoopDirective;
46
class VarDecl;
47
class OMPDeclareReductionDecl;
48
class IdentifierInfo;
49
50
namespace CodeGen {
51
class Address;
52
class CodeGenFunction;
53
class CodeGenModule;
54
55
/// A basic class for pre|post-action for advanced codegen sequence for OpenMP
56
/// region.
57
class PrePostActionTy {
58
public:
59
86.7k
  explicit PrePostActionTy() {}
60
16.9k
  virtual void Enter(CodeGenFunction &CGF) {}
61
870
  virtual void Exit(CodeGenFunction &CGF) {}
62
86.7k
  virtual ~PrePostActionTy() {}
63
};
64
65
/// Class provides a way to call simple version of codegen for OpenMP region, or
66
/// an advanced with possible pre|post-actions in codegen.
67
class RegionCodeGenTy final {
68
  intptr_t CodeGen;
69
  typedef void (*CodeGenTy)(intptr_t, CodeGenFunction &, PrePostActionTy &);
70
  CodeGenTy Callback;
71
  mutable PrePostActionTy *PrePostAction;
72
  RegionCodeGenTy() = delete;
73
  RegionCodeGenTy &operator=(const RegionCodeGenTy &) = delete;
74
  template <typename Callable>
75
  static void CallbackFn(intptr_t CodeGen, CodeGenFunction &CGF,
76
86.7k
                         PrePostActionTy &Action) {
77
86.7k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
86.7k
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTaskOutlinedFunction(clang::OMPExecutableDirective const&, clang::VarDecl const*, clang::VarDecl const*, clang::VarDecl const*, llvm::omp::Directive, clang::CodeGen::RegionCodeGenTy const&, bool, unsigned int&)::$_0>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
28
                         PrePostActionTy &Action) {
77
28
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
28
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_1>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
3.52k
                         PrePostActionTy &Action) {
77
3.52k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
3.52k
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_2>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
227
                         PrePostActionTy &Action) {
77
227
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
227
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_11>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
251
                         PrePostActionTy &Action) {
77
251
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
251
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_12>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
174
                         PrePostActionTy &Action) {
77
174
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
174
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_12::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
174
                         PrePostActionTy &Action) {
77
174
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
174
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_17>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
360
                         PrePostActionTy &Action) {
77
360
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
360
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_18>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
360
                         PrePostActionTy &Action) {
77
360
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
360
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_18::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::Expr const*, clang::Expr const*, clang::Expr const*)::operator()(clang::CodeGen::CodeGenFunction&, clang::Expr const*, clang::Expr const*, clang::Expr const*) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
96
                         PrePostActionTy &Action) {
77
96
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
96
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitCancelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::Expr const*, llvm::omp::Directive)::$_19>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
90
                         PrePostActionTy &Action) {
77
90
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
90
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitCancelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::Expr const*, llvm::omp::Directive)::$_20>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
6
                         PrePostActionTy &Action) {
77
6
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
6
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetNumIterationsCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Value*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_23>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
2.39k
                         PrePostActionTy &Action) {
77
2.39k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
2.39k
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_24>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
5.08k
                         PrePostActionTy &Action) {
77
5.08k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
5.08k
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_27>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
4.75k
                         PrePostActionTy &Action) {
77
4.75k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
4.75k
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_25>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
4.75k
                         PrePostActionTy &Action) {
77
4.75k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
4.75k
  }
Unexecuted instantiation: void clang::CodeGen::RegionCodeGenTy::CallbackFn<void (clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_28>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
787
                         PrePostActionTy &Action) {
77
787
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
787
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_26>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
787
                         PrePostActionTy &Action) {
77
787
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
787
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_29>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
104
                         PrePostActionTy &Action) {
77
104
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
104
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_31>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
24
                         PrePostActionTy &Action) {
77
24
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
24
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_30>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
104
                         PrePostActionTy &Action) {
77
104
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
104
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_32>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
24
                         PrePostActionTy &Action) {
77
24
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
24
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_34>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
152
                         PrePostActionTy &Action) {
77
152
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
152
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_33>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
152
                         PrePostActionTy &Action) {
77
152
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
152
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_35>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
80
                         PrePostActionTy &Action) {
77
80
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
80
  }
CGOpenMPRuntime.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntime::emitLastprivateConditionalUpdate(clang::CodeGen::CodeGenFunction&, clang::CodeGen::LValue, llvm::StringRef, clang::CodeGen::LValue, clang::SourceLocation)::$_38>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
16
                         PrePostActionTy &Action) {
77
16
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
16
  }
CGOpenMPRuntimeNVPTX.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_3>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
22
                         PrePostActionTy &Action) {
77
22
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
22
  }
CGOpenMPRuntimeNVPTX.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_0>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
10
                         PrePostActionTy &Action) {
77
10
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
10
  }
CGOpenMPRuntimeNVPTX.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_1>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
6
                         PrePostActionTy &Action) {
77
6
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
6
  }
CGOpenMPRuntimeNVPTX.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_4>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
478
                         PrePostActionTy &Action) {
77
478
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
478
  }
CGOpenMPRuntimeNVPTX.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_5>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
3
                         PrePostActionTy &Action) {
77
3
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
3
  }
CGOpenMPRuntimeNVPTX.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_6>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
21
                         PrePostActionTy &Action) {
77
21
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
21
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitCommonSimdLoop(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::RegionCodeGenTy const&)::$_119>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
9.78k
                         PrePostActionTy &Action) {
77
9.78k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
9.78k
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitCommonSimdLoop(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::RegionCodeGenTy const&)::$_120>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
184
                         PrePostActionTy &Action) {
77
184
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
184
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitMaster(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)::$_127>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
33
                         PrePostActionTy &Action) {
77
33
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
33
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitCommonOMPTargetDirective(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::RegionCodeGenTy const&)::$_131>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
6
                         PrePostActionTy &Action) {
77
6
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
6
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPParallelDirective(clang::OMPParallelDirective const&)::$_21>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
706
                         PrePostActionTy &Action) {
77
706
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
706
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPSimdDirective(clang::OMPSimdDirective const&)::$_30>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
166
                         PrePostActionTy &Action) {
77
166
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
166
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitOMPSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::PrePostActionTy&)::$_122>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
3.15k
                         PrePostActionTy &Action) {
77
3.15k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
3.15k
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitOMPSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::PrePostActionTy&)::$_121>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
3.24k
                         PrePostActionTy &Action) {
77
3.24k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
3.24k
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPOuterLoop(bool, bool, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::OMPPrivateScope&, clang::CodeGen::CodeGenFunction::OMPLoopArguments const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::SourceLocation, unsigned int, bool)> const&)::$_31>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
971
                         PrePostActionTy &Action) {
77
971
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
971
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPOuterLoop(bool, bool, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::OMPPrivateScope&, clang::CodeGen::CodeGenFunction::OMPLoopArguments const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::SourceLocation, unsigned int, bool)> const&)::$_32>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
974
                         PrePostActionTy &Action) {
77
974
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
974
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPDistributeParallelForDirective(clang::OMPDistributeParallelForDirective const&)::$_35>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
307
                         PrePostActionTy &Action) {
77
307
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
307
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitInnerParallelForWhenCombined(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)::$_126>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
1.87k
                         PrePostActionTy &Action) {
77
1.87k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
1.87k
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPDistributeParallelForSimdDirective(clang::OMPDistributeParallelForSimdDirective const&)::$_36>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
240
                         PrePostActionTy &Action) {
77
240
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
240
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPDistributeSimdDirective(clang::OMPDistributeSimdDirective const&)::$_37>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
150
                         PrePostActionTy &Action) {
77
150
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
150
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetSimdDirective const&)::$_38>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
132
                         PrePostActionTy &Action) {
77
132
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
132
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetSimdDirective(clang::OMPTargetSimdDirective const&)::$_39>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
225
                         PrePostActionTy &Action) {
77
225
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
225
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPWorksharingLoop(clang::OMPLoopDirective const&, clang::Expr*, llvm::function_ref<std::__1::pair<clang::CodeGen::LValue, clang::CodeGen::LValue> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)> const&, llvm::function_ref<std::__1::pair<llvm::Value*, llvm::Value*> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::Address, clang::CodeGen::Address)> const&)::$_40>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
2.41k
                         PrePostActionTy &Action) {
77
2.41k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
2.41k
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPWorksharingLoop(clang::OMPLoopDirective const&, clang::Expr*, llvm::function_ref<std::__1::pair<clang::CodeGen::LValue, clang::CodeGen::LValue> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)> const&, llvm::function_ref<std::__1::pair<llvm::Value*, llvm::Value*> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::Address, clang::CodeGen::Address)> const&)::$_41>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
2.45k
                         PrePostActionTy &Action) {
77
2.45k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
2.45k
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPForDirective(clang::OMPForDirective const&)::$_46>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
281
                         PrePostActionTy &Action) {
77
281
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
281
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPForSimdDirective(clang::OMPForSimdDirective const&)::$_47>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
241
                         PrePostActionTy &Action) {
77
241
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
241
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitSections(clang::OMPExecutableDirective const&)::$_48>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
68
                         PrePostActionTy &Action) {
77
68
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
68
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPSectionDirective(clang::OMPSectionDirective const&)::$_49>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
46
                         PrePostActionTy &Action) {
77
46
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
46
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPSingleDirective(clang::OMPSingleDirective const&)::$_50>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
39
                         PrePostActionTy &Action) {
77
39
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
39
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPCriticalDirective(clang::OMPCriticalDirective const&)::$_55>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
26
                         PrePostActionTy &Action) {
77
26
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
26
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPParallelForDirective(clang::OMPParallelForDirective const&)::$_56>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
147
                         PrePostActionTy &Action) {
77
147
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
147
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPParallelForSimdDirective(clang::OMPParallelForSimdDirective const&)::$_57>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
84
                         PrePostActionTy &Action) {
77
84
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
84
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterDirective(clang::OMPParallelMasterDirective const&)::$_58>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
24
                         PrePostActionTy &Action) {
77
24
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
24
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPParallelSectionsDirective(clang::OMPParallelSectionsDirective const&)::$_60>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
16
                         PrePostActionTy &Action) {
77
16
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
16
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTaskBasedDirective(clang::OMPExecutableDirective const&, llvm::omp::Directive, clang::CodeGen::RegionCodeGenTy const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, llvm::Function*, clang::CodeGen::OMPTaskDataTy const&)> const&, clang::CodeGen::OMPTaskDataTy&)::$_61>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
343
                         PrePostActionTy &Action) {
77
343
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
343
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetTaskBasedDirective(clang::OMPExecutableDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CodeGenFunction::OMPTargetDataInfo&)::$_65>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
292
                         PrePostActionTy &Action) {
77
292
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
292
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTaskDirective(clang::OMPTaskDirective const&)::$_66>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
121
                         PrePostActionTy &Action) {
77
121
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
121
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTaskgroupDirective(clang::OMPTaskgroupDirective const&)::$_68>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
39
                         PrePostActionTy &Action) {
77
39
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
39
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPDistributeLoop(clang::OMPLoopDirective const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, clang::Expr*)::$_70>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
3.02k
                         PrePostActionTy &Action) {
77
3.02k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
3.02k
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPDistributeLoop(clang::OMPLoopDirective const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, clang::Expr*)::$_71>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
3.06k
                         PrePostActionTy &Action) {
77
3.06k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
3.06k
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPDistributeDirective(clang::OMPDistributeDirective const&)::$_74>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
110
                         PrePostActionTy &Action) {
77
110
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
110
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPOrderedDirective(clang::OMPOrderedDirective const&)::$_75>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
12
                         PrePostActionTy &Action) {
77
12
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
12
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPAtomicDirective(clang::OMPAtomicDirective const&)::$_76>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
452
                         PrePostActionTy &Action) {
77
452
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
452
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetDirective const&)::$_77>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
521
                         PrePostActionTy &Action) {
77
521
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
521
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetDirective(clang::OMPTargetDirective const&)::$_78>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
2.54k
                         PrePostActionTy &Action) {
77
2.54k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
2.54k
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDirective(clang::OMPTeamsDirective const&)::$_79>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
835
                         PrePostActionTy &Action) {
77
835
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
835
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDirective const&)::$_81>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
284
                         PrePostActionTy &Action) {
77
284
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
284
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetTeamsRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDirective const&)::$_133>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
665
                         PrePostActionTy &Action) {
77
665
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
665
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDirective(clang::OMPTargetTeamsDirective const&)::$_82>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
381
                         PrePostActionTy &Action) {
77
381
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
381
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeDirective const&)::$_83>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
95
                         PrePostActionTy &Action) {
77
95
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
95
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetTeamsDistributeRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeDirective const&)::$_136>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
356
                         PrePostActionTy &Action) {
77
356
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
356
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetTeamsDistributeRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeDirective const&)::$_135>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
356
                         PrePostActionTy &Action) {
77
356
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
356
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeDirective(clang::OMPTargetTeamsDistributeDirective const&)::$_84>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
261
                         PrePostActionTy &Action) {
77
261
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
261
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_85>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
132
                         PrePostActionTy &Action) {
77
132
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
132
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetTeamsDistributeSimdRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_139>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
447
                         PrePostActionTy &Action) {
77
447
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
447
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetTeamsDistributeSimdRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_138>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
447
                         PrePostActionTy &Action) {
77
447
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
447
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeSimdDirective(clang::OMPTargetTeamsDistributeSimdDirective const&)::$_86>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
315
                         PrePostActionTy &Action) {
77
315
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
315
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeDirective(clang::OMPTeamsDistributeDirective const&)::$_88>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
114
                         PrePostActionTy &Action) {
77
114
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
114
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeDirective(clang::OMPTeamsDistributeDirective const&)::$_87>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
114
                         PrePostActionTy &Action) {
77
114
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
114
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeSimdDirective(clang::OMPTeamsDistributeSimdDirective const&)::$_91>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
126
                         PrePostActionTy &Action) {
77
126
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
126
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeSimdDirective(clang::OMPTeamsDistributeSimdDirective const&)::$_90>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
126
                         PrePostActionTy &Action) {
77
126
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
126
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForDirective(clang::OMPTeamsDistributeParallelForDirective const&)::$_94>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
218
                         PrePostActionTy &Action) {
77
218
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
218
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForDirective(clang::OMPTeamsDistributeParallelForDirective const&)::$_93>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
218
                         PrePostActionTy &Action) {
77
218
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
218
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForSimdDirective(clang::OMPTeamsDistributeParallelForSimdDirective const&)::$_97>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
224
                         PrePostActionTy &Action) {
77
224
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
224
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForSimdDirective(clang::OMPTeamsDistributeParallelForSimdDirective const&)::$_96>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
224
                         PrePostActionTy &Action) {
77
224
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
224
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeParallelForDirective const&)::$_99>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
103
                         PrePostActionTy &Action) {
77
103
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
103
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetTeamsDistributeParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_142>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
369
                         PrePostActionTy &Action) {
77
369
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
369
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetTeamsDistributeParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_141>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
369
                         PrePostActionTy &Action) {
77
369
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
369
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForDirective(clang::OMPTargetTeamsDistributeParallelForDirective const&)::$_100>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
266
                         PrePostActionTy &Action) {
77
266
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
266
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&)::$_101>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
144
                         PrePostActionTy &Action) {
77
144
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
144
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetTeamsDistributeParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_145>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
511
                         PrePostActionTy &Action) {
77
511
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
511
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetTeamsDistributeParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_144>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
511
                         PrePostActionTy &Action) {
77
511
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
511
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForSimdDirective(clang::OMPTargetTeamsDistributeParallelForSimdDirective const&)::$_102>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
367
                         PrePostActionTy &Action) {
77
367
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
367
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
119
                         PrePostActionTy &Action) {
77
119
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
119
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
119
                         PrePostActionTy &Action) {
77
119
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
119
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
119
                         PrePostActionTy &Action) {
77
119
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
119
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelDirective const&)::$_105>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
228
                         PrePostActionTy &Action) {
77
228
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
228
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetParallelRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelDirective const&, clang::CodeGen::PrePostActionTy&)::$_147>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
533
                         PrePostActionTy &Action) {
77
533
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
533
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelDirective(clang::OMPTargetParallelDirective const&)::$_106>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
305
                         PrePostActionTy &Action) {
77
305
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
305
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelForDirective const&)::$_107>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
137
                         PrePostActionTy &Action) {
77
137
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
137
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_149>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
337
                         PrePostActionTy &Action) {
77
337
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
337
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForDirective(clang::OMPTargetParallelForDirective const&)::$_108>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
200
                         PrePostActionTy &Action) {
77
200
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
200
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelForSimdDirective const&)::$_109>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
120
                         PrePostActionTy &Action) {
77
120
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
120
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<emitTargetParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_150>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
337
                         PrePostActionTy &Action) {
77
337
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
337
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForSimdDirective(clang::OMPTargetParallelForSimdDirective const&)::$_110>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
217
                         PrePostActionTy &Action) {
77
217
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
217
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
222
                         PrePostActionTy &Action) {
77
222
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
222
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
222
                         PrePostActionTy &Action) {
77
222
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
222
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
228
                         PrePostActionTy &Action) {
77
228
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
228
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_112::operator()(clang::CodeGen::CodeGenFunction&, llvm::Function*, clang::CodeGen::OMPTaskDataTy const&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
222
                         PrePostActionTy &Action) {
77
222
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
222
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_113>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
204
                         PrePostActionTy &Action) {
77
204
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
204
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPMasterTaskLoopDirective(clang::OMPMasterTaskLoopDirective const&)::$_114>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
35
                         PrePostActionTy &Action) {
77
35
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
35
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPMasterTaskLoopSimdDirective(clang::OMPMasterTaskLoopSimdDirective const&)::$_115>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
40
                         PrePostActionTy &Action) {
77
40
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
40
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopDirective(clang::OMPParallelMasterTaskLoopDirective const&)::$_116>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
33
                         PrePostActionTy &Action) {
77
33
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
33
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopDirective(clang::OMPParallelMasterTaskLoopDirective const&)::$_116::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
33
                         PrePostActionTy &Action) {
77
33
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
33
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopSimdDirective(clang::OMPParallelMasterTaskLoopSimdDirective const&)::$_117>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
39
                         PrePostActionTy &Action) {
77
39
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
39
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopSimdDirective(clang::OMPParallelMasterTaskLoopSimdDirective const&)::$_117::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
39
                         PrePostActionTy &Action) {
77
39
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
39
  }
CGStmtOpenMP.cpp:void clang::CodeGen::RegionCodeGenTy::CallbackFn<clang::CodeGen::CodeGenFunction::EmitSimpleOMPExecutableDirective(clang::OMPExecutableDirective const&)::$_118>(long, clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)
Line
Count
Source
76
10.5k
                         PrePostActionTy &Action) {
77
10.5k
    return (*reinterpret_cast<Callable *>(CodeGen))(CGF, Action);
78
10.5k
  }
79
80
public:
81
  template <typename Callable>
82
  RegionCodeGenTy(
83
      Callable &&CodeGen,
84
      std::enable_if_t<!std::is_same<std::remove_reference_t<Callable>,
85
                                     RegionCodeGenTy>::value> * = nullptr)
86
      : CodeGen(reinterpret_cast<intptr_t>(&CodeGen)),
87
        Callback(CallbackFn<std::remove_reference_t<Callable>>),
88
88.2k
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTaskOutlinedFunction(clang::OMPExecutableDirective const&, clang::VarDecl const*, clang::VarDecl const*, clang::VarDecl const*, llvm::omp::Directive, clang::CodeGen::RegionCodeGenTy const&, bool, unsigned int&)::$_0&>(clang::CodeGen::CGOpenMPRuntime::emitTaskOutlinedFunction(clang::OMPExecutableDirective const&, clang::VarDecl const*, clang::VarDecl const*, clang::VarDecl const*, llvm::omp::Directive, clang::CodeGen::RegionCodeGenTy const&, bool, unsigned int&)::$_0&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTaskOutlinedFunction(clang::OMPExecutableDirective const&, clang::VarDecl const*, clang::VarDecl const*, clang::VarDecl const*, llvm::omp::Directive, clang::CodeGen::RegionCodeGenTy const&, bool, unsigned int&)::$_0&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
635
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_1&>(clang::CodeGen::CGOpenMPRuntime::emitParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_1&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_1&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
3.62k
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_2&>(clang::CodeGen::CGOpenMPRuntime::emitParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_2&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_2&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
279
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_11&>(clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_11&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_11&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
413
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_12&>(clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_12&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_12&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
314
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_12::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>(clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_12::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTaskCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::OMPExecutableDirective const&, llvm::Function*, clang::QualType, clang::CodeGen::Address, clang::Expr const*, clang::CodeGen::OMPTaskDataTy const&)::$_12::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
174
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_17&>(clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_17&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_17&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
360
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_18&>(clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_18&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_18&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
360
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_18::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::Expr const*, clang::Expr const*, clang::Expr const*)::operator()(clang::CodeGen::CodeGenFunction&, clang::Expr const*, clang::Expr const*, clang::Expr const*) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_18::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::Expr const*, clang::Expr const*, clang::Expr const*)::operator()(clang::CodeGen::CodeGenFunction&, clang::Expr const*, clang::Expr const*, clang::Expr const*) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_18::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::Expr const*, clang::Expr const*, clang::Expr const*)::operator()(clang::CodeGen::CodeGenFunction&, clang::Expr const*, clang::Expr const*, clang::Expr const*) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
96
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitCancelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::Expr const*, llvm::omp::Directive)::$_19&>(clang::CodeGen::CGOpenMPRuntime::emitCancelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::Expr const*, llvm::omp::Directive)::$_19&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitCancelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::Expr const*, llvm::omp::Directive)::$_19&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
90
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitCancelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::Expr const*, llvm::omp::Directive)::$_20>(clang::CodeGen::CGOpenMPRuntime::emitCancelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::Expr const*, llvm::omp::Directive)::$_20&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitCancelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, clang::Expr const*, llvm::omp::Directive)::$_20>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
6
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetNumIterationsCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Value*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_23&>(clang::CodeGen::CGOpenMPRuntime::emitTargetNumIterationsCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Value*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_23&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetNumIterationsCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Value*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_23&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
2.39k
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_24&>(clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_24&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_24&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
5.08k
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_27&>(clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_27&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_27&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
4.75k
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_25&>(clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_25&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_25&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
4.75k
        PrePostAction(nullptr) {}
clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<void (&)(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(void (&&&)(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&), std::__1::enable_if<!(std::is_same<std::__1::remove_reference<void (&)(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
186
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_28&>(clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_28&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_28&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
869
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_26&>(clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_26&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, llvm::Function*, llvm::Value*, clang::Expr const*, clang::Expr const*, llvm::function_ref<llvm::Value* (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&)>)::$_26&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
787
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_29&>(clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_29&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_29&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
112
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_31&>(clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_31&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_31&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
32
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_30&>(clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_30&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_30&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
112
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_32&>(clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_32&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetDataCalls(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CGOpenMPRuntime::TargetDataInfo&)::$_32&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
32
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_34&>(clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_34&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_34&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
176
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_33&>(clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_33&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_33&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
152
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_35>(clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_35&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitTargetDataStandAloneCall(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::Expr const*, clang::Expr const*)::$_35>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
104
        PrePostAction(nullptr) {}
CGOpenMPRuntime.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntime::emitLastprivateConditionalUpdate(clang::CodeGen::CodeGenFunction&, clang::CodeGen::LValue, llvm::StringRef, clang::CodeGen::LValue, clang::SourceLocation)::$_38&>(clang::CodeGen::CGOpenMPRuntime::emitLastprivateConditionalUpdate(clang::CodeGen::CodeGenFunction&, clang::CodeGen::LValue, llvm::StringRef, clang::CodeGen::LValue, clang::SourceLocation)::$_38&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntime::emitLastprivateConditionalUpdate(clang::CodeGen::CodeGenFunction&, clang::CodeGen::LValue, llvm::StringRef, clang::CodeGen::LValue, clang::SourceLocation)::$_38&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
16
        PrePostAction(nullptr) {}
CGOpenMPRuntimeNVPTX.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_3&>(clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_3&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_3&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
25
        PrePostAction(nullptr) {}
CGOpenMPRuntimeNVPTX.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_0&>(clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_0&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_0&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
10
        PrePostAction(nullptr) {}
CGOpenMPRuntimeNVPTX.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_1&>(clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_1&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNonSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Value*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_1&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
9
        PrePostAction(nullptr) {}
CGOpenMPRuntimeNVPTX.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_4&>(clang::CodeGen::CGOpenMPRuntimeNVPTX::emitSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_4&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_4&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
478
        PrePostAction(nullptr) {}
CGOpenMPRuntimeNVPTX.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_5&>(clang::CodeGen::CGOpenMPRuntimeNVPTX::emitSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_5&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitSPMDParallelCall(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::Function*, llvm::ArrayRef<llvm::Value*>, clang::Expr const*)::$_5&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
3
        PrePostAction(nullptr) {}
CGOpenMPRuntimeNVPTX.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_6&>(clang::CodeGen::CGOpenMPRuntimeNVPTX::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_6&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CGOpenMPRuntimeNVPTX::emitReduction(clang::CodeGen::CodeGenFunction&, clang::SourceLocation, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::Expr const*>, clang::CodeGen::CGOpenMPRuntime::ReductionOptionsTy)::$_6&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
21
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitCommonSimdLoop(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::RegionCodeGenTy const&)::$_119&>(emitCommonSimdLoop(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::RegionCodeGenTy const&)::$_119&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitCommonSimdLoop(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::RegionCodeGenTy const&)::$_119&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
9.81k
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitCommonSimdLoop(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::RegionCodeGenTy const&)::$_120&>(emitCommonSimdLoop(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::RegionCodeGenTy const&)::$_120&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitCommonSimdLoop(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::RegionCodeGenTy const&)::$_120&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
292
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitMaster(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)::$_127&>(emitMaster(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)::$_127&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitMaster(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)::$_127&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
33
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitCommonOMPTargetDirective(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::RegionCodeGenTy const&)::$_131>(emitCommonOMPTargetDirective(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::RegionCodeGenTy const&)::$_131&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitCommonOMPTargetDirective(clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::RegionCodeGenTy const&)::$_131>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
6
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPParallelDirective(clang::OMPParallelDirective const&)::$_21&>(clang::CodeGen::CodeGenFunction::EmitOMPParallelDirective(clang::OMPParallelDirective const&)::$_21&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPParallelDirective(clang::OMPParallelDirective const&)::$_21&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
706
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPSimdDirective(clang::OMPSimdDirective const&)::$_30&>(clang::CodeGen::CodeGenFunction::EmitOMPSimdDirective(clang::OMPSimdDirective const&)::$_30&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPSimdDirective(clang::OMPSimdDirective const&)::$_30&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
166
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitOMPSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::PrePostActionTy&)::$_122>(emitOMPSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::PrePostActionTy&)::$_122&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitOMPSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::PrePostActionTy&)::$_122>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
3.16k
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitOMPSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::PrePostActionTy&)::$_121>(emitOMPSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::PrePostActionTy&)::$_121&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitOMPSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::PrePostActionTy&)::$_121>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
3.16k
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPOuterLoop(bool, bool, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::OMPPrivateScope&, clang::CodeGen::CodeGenFunction::OMPLoopArguments const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::SourceLocation, unsigned int, bool)> const&)::$_31>(clang::CodeGen::CodeGenFunction::EmitOMPOuterLoop(bool, bool, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::OMPPrivateScope&, clang::CodeGen::CodeGenFunction::OMPLoopArguments const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::SourceLocation, unsigned int, bool)> const&)::$_31&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPOuterLoop(bool, bool, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::OMPPrivateScope&, clang::CodeGen::CodeGenFunction::OMPLoopArguments const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::SourceLocation, unsigned int, bool)> const&)::$_31>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
971
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPOuterLoop(bool, bool, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::OMPPrivateScope&, clang::CodeGen::CodeGenFunction::OMPLoopArguments const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::SourceLocation, unsigned int, bool)> const&)::$_32>(clang::CodeGen::CodeGenFunction::EmitOMPOuterLoop(bool, bool, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::OMPPrivateScope&, clang::CodeGen::CodeGenFunction::OMPLoopArguments const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::SourceLocation, unsigned int, bool)> const&)::$_32&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPOuterLoop(bool, bool, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::OMPPrivateScope&, clang::CodeGen::CodeGenFunction::OMPLoopArguments const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::SourceLocation, unsigned int, bool)> const&)::$_32>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
971
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPDistributeParallelForDirective(clang::OMPDistributeParallelForDirective const&)::$_35&>(clang::CodeGen::CodeGenFunction::EmitOMPDistributeParallelForDirective(clang::OMPDistributeParallelForDirective const&)::$_35&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPDistributeParallelForDirective(clang::OMPDistributeParallelForDirective const&)::$_35&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
307
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitInnerParallelForWhenCombined(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)::$_126&>(emitInnerParallelForWhenCombined(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)::$_126&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitInnerParallelForWhenCombined(clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)::$_126&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
1.87k
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPDistributeParallelForSimdDirective(clang::OMPDistributeParallelForSimdDirective const&)::$_36&>(clang::CodeGen::CodeGenFunction::EmitOMPDistributeParallelForSimdDirective(clang::OMPDistributeParallelForSimdDirective const&)::$_36&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPDistributeParallelForSimdDirective(clang::OMPDistributeParallelForSimdDirective const&)::$_36&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
240
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPDistributeSimdDirective(clang::OMPDistributeSimdDirective const&)::$_37&>(clang::CodeGen::CodeGenFunction::EmitOMPDistributeSimdDirective(clang::OMPDistributeSimdDirective const&)::$_37&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPDistributeSimdDirective(clang::OMPDistributeSimdDirective const&)::$_37&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
150
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetSimdDirective const&)::$_38&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetSimdDirective const&)::$_38&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetSimdDirective const&)::$_38&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
132
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetSimdDirective(clang::OMPTargetSimdDirective const&)::$_39&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetSimdDirective(clang::OMPTargetSimdDirective const&)::$_39&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetSimdDirective(clang::OMPTargetSimdDirective const&)::$_39&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
225
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPWorksharingLoop(clang::OMPLoopDirective const&, clang::Expr*, llvm::function_ref<std::__1::pair<clang::CodeGen::LValue, clang::CodeGen::LValue> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)> const&, llvm::function_ref<std::__1::pair<llvm::Value*, llvm::Value*> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::Address, clang::CodeGen::Address)> const&)::$_40>(clang::CodeGen::CodeGenFunction::EmitOMPWorksharingLoop(clang::OMPLoopDirective const&, clang::Expr*, llvm::function_ref<std::__1::pair<clang::CodeGen::LValue, clang::CodeGen::LValue> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)> const&, llvm::function_ref<std::__1::pair<llvm::Value*, llvm::Value*> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::Address, clang::CodeGen::Address)> const&)::$_40&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPWorksharingLoop(clang::OMPLoopDirective const&, clang::Expr*, llvm::function_ref<std::__1::pair<clang::CodeGen::LValue, clang::CodeGen::LValue> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)> const&, llvm::function_ref<std::__1::pair<llvm::Value*, llvm::Value*> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::Address, clang::CodeGen::Address)> const&)::$_40>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
2.42k
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPWorksharingLoop(clang::OMPLoopDirective const&, clang::Expr*, llvm::function_ref<std::__1::pair<clang::CodeGen::LValue, clang::CodeGen::LValue> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)> const&, llvm::function_ref<std::__1::pair<llvm::Value*, llvm::Value*> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::Address, clang::CodeGen::Address)> const&)::$_41>(clang::CodeGen::CodeGenFunction::EmitOMPWorksharingLoop(clang::OMPLoopDirective const&, clang::Expr*, llvm::function_ref<std::__1::pair<clang::CodeGen::LValue, clang::CodeGen::LValue> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)> const&, llvm::function_ref<std::__1::pair<llvm::Value*, llvm::Value*> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::Address, clang::CodeGen::Address)> const&)::$_41&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPWorksharingLoop(clang::OMPLoopDirective const&, clang::Expr*, llvm::function_ref<std::__1::pair<clang::CodeGen::LValue, clang::CodeGen::LValue> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&)> const&, llvm::function_ref<std::__1::pair<llvm::Value*, llvm::Value*> (clang::CodeGen::CodeGenFunction&, clang::OMPExecutableDirective const&, clang::CodeGen::Address, clang::CodeGen::Address)> const&)::$_41>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
2.42k
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPForDirective(clang::OMPForDirective const&)::$_46&>(clang::CodeGen::CodeGenFunction::EmitOMPForDirective(clang::OMPForDirective const&)::$_46&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPForDirective(clang::OMPForDirective const&)::$_46&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
281
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPForSimdDirective(clang::OMPForSimdDirective const&)::$_47&>(clang::CodeGen::CodeGenFunction::EmitOMPForSimdDirective(clang::OMPForSimdDirective const&)::$_47&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPForSimdDirective(clang::OMPForSimdDirective const&)::$_47&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
241
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitSections(clang::OMPExecutableDirective const&)::$_48&>(clang::CodeGen::CodeGenFunction::EmitSections(clang::OMPExecutableDirective const&)::$_48&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitSections(clang::OMPExecutableDirective const&)::$_48&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
68
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPSectionDirective(clang::OMPSectionDirective const&)::$_49&>(clang::CodeGen::CodeGenFunction::EmitOMPSectionDirective(clang::OMPSectionDirective const&)::$_49&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPSectionDirective(clang::OMPSectionDirective const&)::$_49&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
46
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPSingleDirective(clang::OMPSingleDirective const&)::$_50&>(clang::CodeGen::CodeGenFunction::EmitOMPSingleDirective(clang::OMPSingleDirective const&)::$_50&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPSingleDirective(clang::OMPSingleDirective const&)::$_50&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
39
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPCriticalDirective(clang::OMPCriticalDirective const&)::$_55&>(clang::CodeGen::CodeGenFunction::EmitOMPCriticalDirective(clang::OMPCriticalDirective const&)::$_55&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPCriticalDirective(clang::OMPCriticalDirective const&)::$_55&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
26
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPParallelForDirective(clang::OMPParallelForDirective const&)::$_56&>(clang::CodeGen::CodeGenFunction::EmitOMPParallelForDirective(clang::OMPParallelForDirective const&)::$_56&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPParallelForDirective(clang::OMPParallelForDirective const&)::$_56&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
147
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPParallelForSimdDirective(clang::OMPParallelForSimdDirective const&)::$_57&>(clang::CodeGen::CodeGenFunction::EmitOMPParallelForSimdDirective(clang::OMPParallelForSimdDirective const&)::$_57&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPParallelForSimdDirective(clang::OMPParallelForSimdDirective const&)::$_57&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
84
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterDirective(clang::OMPParallelMasterDirective const&)::$_58&>(clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterDirective(clang::OMPParallelMasterDirective const&)::$_58&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterDirective(clang::OMPParallelMasterDirective const&)::$_58&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
24
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPParallelSectionsDirective(clang::OMPParallelSectionsDirective const&)::$_60&>(clang::CodeGen::CodeGenFunction::EmitOMPParallelSectionsDirective(clang::OMPParallelSectionsDirective const&)::$_60&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPParallelSectionsDirective(clang::OMPParallelSectionsDirective const&)::$_60&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
16
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTaskBasedDirective(clang::OMPExecutableDirective const&, llvm::omp::Directive, clang::CodeGen::RegionCodeGenTy const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, llvm::Function*, clang::CodeGen::OMPTaskDataTy const&)> const&, clang::CodeGen::OMPTaskDataTy&)::$_61&>(clang::CodeGen::CodeGenFunction::EmitOMPTaskBasedDirective(clang::OMPExecutableDirective const&, llvm::omp::Directive, clang::CodeGen::RegionCodeGenTy const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, llvm::Function*, clang::CodeGen::OMPTaskDataTy const&)> const&, clang::CodeGen::OMPTaskDataTy&)::$_61&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTaskBasedDirective(clang::OMPExecutableDirective const&, llvm::omp::Directive, clang::CodeGen::RegionCodeGenTy const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, llvm::Function*, clang::CodeGen::OMPTaskDataTy const&)> const&, clang::CodeGen::OMPTaskDataTy&)::$_61&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
343
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetTaskBasedDirective(clang::OMPExecutableDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CodeGenFunction::OMPTargetDataInfo&)::$_65&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetTaskBasedDirective(clang::OMPExecutableDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CodeGenFunction::OMPTargetDataInfo&)::$_65&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetTaskBasedDirective(clang::OMPExecutableDirective const&, clang::CodeGen::RegionCodeGenTy const&, clang::CodeGen::CodeGenFunction::OMPTargetDataInfo&)::$_65&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
292
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTaskDirective(clang::OMPTaskDirective const&)::$_66&>(clang::CodeGen::CodeGenFunction::EmitOMPTaskDirective(clang::OMPTaskDirective const&)::$_66&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTaskDirective(clang::OMPTaskDirective const&)::$_66&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
121
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTaskgroupDirective(clang::OMPTaskgroupDirective const&)::$_68&>(clang::CodeGen::CodeGenFunction::EmitOMPTaskgroupDirective(clang::OMPTaskgroupDirective const&)::$_68&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTaskgroupDirective(clang::OMPTaskgroupDirective const&)::$_68&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
39
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPDistributeLoop(clang::OMPLoopDirective const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, clang::Expr*)::$_70>(clang::CodeGen::CodeGenFunction::EmitOMPDistributeLoop(clang::OMPLoopDirective const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, clang::Expr*)::$_70&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPDistributeLoop(clang::OMPLoopDirective const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, clang::Expr*)::$_70>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
3.03k
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPDistributeLoop(clang::OMPLoopDirective const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, clang::Expr*)::$_71>(clang::CodeGen::CodeGenFunction::EmitOMPDistributeLoop(clang::OMPLoopDirective const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, clang::Expr*)::$_71&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPDistributeLoop(clang::OMPLoopDirective const&, llvm::function_ref<void (clang::CodeGen::CodeGenFunction&, clang::OMPLoopDirective const&, clang::CodeGen::CodeGenFunction::JumpDest)> const&, clang::Expr*)::$_71>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
3.03k
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPDistributeDirective(clang::OMPDistributeDirective const&)::$_74&>(clang::CodeGen::CodeGenFunction::EmitOMPDistributeDirective(clang::OMPDistributeDirective const&)::$_74&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPDistributeDirective(clang::OMPDistributeDirective const&)::$_74&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
110
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPOrderedDirective(clang::OMPOrderedDirective const&)::$_75&>(clang::CodeGen::CodeGenFunction::EmitOMPOrderedDirective(clang::OMPOrderedDirective const&)::$_75&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPOrderedDirective(clang::OMPOrderedDirective const&)::$_75&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
12
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPAtomicDirective(clang::OMPAtomicDirective const&)::$_76&>(clang::CodeGen::CodeGenFunction::EmitOMPAtomicDirective(clang::OMPAtomicDirective const&)::$_76&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPAtomicDirective(clang::OMPAtomicDirective const&)::$_76&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
452
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetDirective const&)::$_77&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetDirective const&)::$_77&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetDirective const&)::$_77&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
521
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetDirective(clang::OMPTargetDirective const&)::$_78&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetDirective(clang::OMPTargetDirective const&)::$_78&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetDirective(clang::OMPTargetDirective const&)::$_78&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
2.54k
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDirective(clang::OMPTeamsDirective const&)::$_79&>(clang::CodeGen::CodeGenFunction::EmitOMPTeamsDirective(clang::OMPTeamsDirective const&)::$_79&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDirective(clang::OMPTeamsDirective const&)::$_79&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
835
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDirective const&)::$_81&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDirective const&)::$_81&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDirective const&)::$_81&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
284
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetTeamsRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDirective const&)::$_133&>(emitTargetTeamsRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDirective const&)::$_133&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetTeamsRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDirective const&)::$_133&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
665
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDirective(clang::OMPTargetTeamsDirective const&)::$_82&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDirective(clang::OMPTargetTeamsDirective const&)::$_82&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDirective(clang::OMPTargetTeamsDirective const&)::$_82&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
381
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeDirective const&)::$_83&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeDirective const&)::$_83&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeDirective const&)::$_83&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
95
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetTeamsDistributeRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeDirective const&)::$_136&>(emitTargetTeamsDistributeRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeDirective const&)::$_136&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetTeamsDistributeRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeDirective const&)::$_136&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
356
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetTeamsDistributeRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeDirective const&)::$_135&>(emitTargetTeamsDistributeRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeDirective const&)::$_135&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetTeamsDistributeRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeDirective const&)::$_135&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
356
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeDirective(clang::OMPTargetTeamsDistributeDirective const&)::$_84&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeDirective(clang::OMPTargetTeamsDistributeDirective const&)::$_84&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeDirective(clang::OMPTargetTeamsDistributeDirective const&)::$_84&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
261
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_85&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_85&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_85&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
132
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetTeamsDistributeSimdRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_139&>(emitTargetTeamsDistributeSimdRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_139&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetTeamsDistributeSimdRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_139&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
447
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetTeamsDistributeSimdRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_138&>(emitTargetTeamsDistributeSimdRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_138&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetTeamsDistributeSimdRegion(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&, clang::OMPTargetTeamsDistributeSimdDirective const&)::$_138&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
447
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeSimdDirective(clang::OMPTargetTeamsDistributeSimdDirective const&)::$_86&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeSimdDirective(clang::OMPTargetTeamsDistributeSimdDirective const&)::$_86&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeSimdDirective(clang::OMPTargetTeamsDistributeSimdDirective const&)::$_86&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
315
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeDirective(clang::OMPTeamsDistributeDirective const&)::$_88&>(clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeDirective(clang::OMPTeamsDistributeDirective const&)::$_88&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeDirective(clang::OMPTeamsDistributeDirective const&)::$_88&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
114
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeDirective(clang::OMPTeamsDistributeDirective const&)::$_87&>(clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeDirective(clang::OMPTeamsDistributeDirective const&)::$_87&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeDirective(clang::OMPTeamsDistributeDirective const&)::$_87&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
114
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeSimdDirective(clang::OMPTeamsDistributeSimdDirective const&)::$_91&>(clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeSimdDirective(clang::OMPTeamsDistributeSimdDirective const&)::$_91&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeSimdDirective(clang::OMPTeamsDistributeSimdDirective const&)::$_91&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
126
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeSimdDirective(clang::OMPTeamsDistributeSimdDirective const&)::$_90&>(clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeSimdDirective(clang::OMPTeamsDistributeSimdDirective const&)::$_90&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeSimdDirective(clang::OMPTeamsDistributeSimdDirective const&)::$_90&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
126
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForDirective(clang::OMPTeamsDistributeParallelForDirective const&)::$_94&>(clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForDirective(clang::OMPTeamsDistributeParallelForDirective const&)::$_94&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForDirective(clang::OMPTeamsDistributeParallelForDirective const&)::$_94&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
218
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForDirective(clang::OMPTeamsDistributeParallelForDirective const&)::$_93&>(clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForDirective(clang::OMPTeamsDistributeParallelForDirective const&)::$_93&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForDirective(clang::OMPTeamsDistributeParallelForDirective const&)::$_93&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
218
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForSimdDirective(clang::OMPTeamsDistributeParallelForSimdDirective const&)::$_97&>(clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForSimdDirective(clang::OMPTeamsDistributeParallelForSimdDirective const&)::$_97&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForSimdDirective(clang::OMPTeamsDistributeParallelForSimdDirective const&)::$_97&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
224
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForSimdDirective(clang::OMPTeamsDistributeParallelForSimdDirective const&)::$_96&>(clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForSimdDirective(clang::OMPTeamsDistributeParallelForSimdDirective const&)::$_96&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTeamsDistributeParallelForSimdDirective(clang::OMPTeamsDistributeParallelForSimdDirective const&)::$_96&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
224
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeParallelForDirective const&)::$_99&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeParallelForDirective const&)::$_99&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeParallelForDirective const&)::$_99&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
103
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetTeamsDistributeParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_142&>(emitTargetTeamsDistributeParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_142&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetTeamsDistributeParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_142&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
369
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetTeamsDistributeParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_141&>(emitTargetTeamsDistributeParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_141&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetTeamsDistributeParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_141&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
369
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForDirective(clang::OMPTargetTeamsDistributeParallelForDirective const&)::$_100&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForDirective(clang::OMPTargetTeamsDistributeParallelForDirective const&)::$_100&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForDirective(clang::OMPTargetTeamsDistributeParallelForDirective const&)::$_100&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
266
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&)::$_101&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&)::$_101&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&)::$_101&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
144
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetTeamsDistributeParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_145&>(emitTargetTeamsDistributeParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_145&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetTeamsDistributeParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_145&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
511
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetTeamsDistributeParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_144&>(emitTargetTeamsDistributeParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_144&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetTeamsDistributeParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetTeamsDistributeParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_144&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
511
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForSimdDirective(clang::OMPTargetTeamsDistributeParallelForSimdDirective const&)::$_102&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForSimdDirective(clang::OMPTargetTeamsDistributeParallelForSimdDirective const&)::$_102&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetTeamsDistributeParallelForSimdDirective(clang::OMPTargetTeamsDistributeParallelForSimdDirective const&)::$_102&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
367
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
115
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
119
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetDataDirective(clang::OMPTargetDataDirective const&)::$_104::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
119
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelDirective const&)::$_105&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelDirective const&)::$_105&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelDirective const&)::$_105&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
228
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetParallelRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelDirective const&, clang::CodeGen::PrePostActionTy&)::$_147&>(emitTargetParallelRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelDirective const&, clang::CodeGen::PrePostActionTy&)::$_147&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetParallelRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelDirective const&, clang::CodeGen::PrePostActionTy&)::$_147&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
533
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelDirective(clang::OMPTargetParallelDirective const&)::$_106&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelDirective(clang::OMPTargetParallelDirective const&)::$_106&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelDirective(clang::OMPTargetParallelDirective const&)::$_106&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
308
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelForDirective const&)::$_107&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelForDirective const&)::$_107&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelForDirective const&)::$_107&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
137
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_149&>(emitTargetParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_149&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetParallelForRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelForDirective const&, clang::CodeGen::PrePostActionTy&)::$_149&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
337
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForDirective(clang::OMPTargetParallelForDirective const&)::$_108&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForDirective(clang::OMPTargetParallelForDirective const&)::$_108&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForDirective(clang::OMPTargetParallelForDirective const&)::$_108&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
200
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelForSimdDirective const&)::$_109&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelForSimdDirective const&)::$_109&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForSimdDeviceFunction(clang::CodeGen::CodeGenModule&, llvm::StringRef, clang::OMPTargetParallelForSimdDirective const&)::$_109&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
120
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<emitTargetParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_150&>(emitTargetParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_150&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<emitTargetParallelForSimdRegion(clang::CodeGen::CodeGenFunction&, clang::OMPTargetParallelForSimdDirective const&, clang::CodeGen::PrePostActionTy&)::$_150&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
337
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForSimdDirective(clang::OMPTargetParallelForSimdDirective const&)::$_110&>(clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForSimdDirective(clang::OMPTargetParallelForSimdDirective const&)::$_110&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTargetParallelForSimdDirective(clang::OMPTargetParallelForSimdDirective const&)::$_110&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
217
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111&>(clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
222
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
222
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>(clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_111::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda0'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
222
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_112::operator()(clang::CodeGen::CodeGenFunction&, llvm::Function*, clang::CodeGen::OMPTaskDataTy const&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>(clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_112::operator()(clang::CodeGen::CodeGenFunction&, llvm::Function*, clang::CodeGen::OMPTaskDataTy const&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_112::operator()(clang::CodeGen::CodeGenFunction&, llvm::Function*, clang::CodeGen::OMPTaskDataTy const&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
222
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_113>(clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_113&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPTaskLoopBasedDirective(clang::OMPLoopDirective const&)::$_113>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
204
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPMasterTaskLoopDirective(clang::OMPMasterTaskLoopDirective const&)::$_114&>(clang::CodeGen::CodeGenFunction::EmitOMPMasterTaskLoopDirective(clang::OMPMasterTaskLoopDirective const&)::$_114&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPMasterTaskLoopDirective(clang::OMPMasterTaskLoopDirective const&)::$_114&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
35
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPMasterTaskLoopSimdDirective(clang::OMPMasterTaskLoopSimdDirective const&)::$_115&>(clang::CodeGen::CodeGenFunction::EmitOMPMasterTaskLoopSimdDirective(clang::OMPMasterTaskLoopSimdDirective const&)::$_115&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPMasterTaskLoopSimdDirective(clang::OMPMasterTaskLoopSimdDirective const&)::$_115&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
40
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopDirective(clang::OMPParallelMasterTaskLoopDirective const&)::$_116&>(clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopDirective(clang::OMPParallelMasterTaskLoopDirective const&)::$_116&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopDirective(clang::OMPParallelMasterTaskLoopDirective const&)::$_116&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
33
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopDirective(clang::OMPParallelMasterTaskLoopDirective const&)::$_116::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>(clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopDirective(clang::OMPParallelMasterTaskLoopDirective const&)::$_116::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopDirective(clang::OMPParallelMasterTaskLoopDirective const&)::$_116::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
33
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopSimdDirective(clang::OMPParallelMasterTaskLoopSimdDirective const&)::$_117&>(clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopSimdDirective(clang::OMPParallelMasterTaskLoopSimdDirective const&)::$_117&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopSimdDirective(clang::OMPParallelMasterTaskLoopSimdDirective const&)::$_117&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
39
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopSimdDirective(clang::OMPParallelMasterTaskLoopSimdDirective const&)::$_117::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>(clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopSimdDirective(clang::OMPParallelMasterTaskLoopSimdDirective const&)::$_117::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitOMPParallelMasterTaskLoopSimdDirective(clang::OMPParallelMasterTaskLoopSimdDirective const&)::$_117::operator()(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&) const::'lambda'(clang::CodeGen::CodeGenFunction&, clang::CodeGen::PrePostActionTy&)&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
39
        PrePostAction(nullptr) {}
CGStmtOpenMP.cpp:clang::CodeGen::RegionCodeGenTy::RegionCodeGenTy<clang::CodeGen::CodeGenFunction::EmitSimpleOMPExecutableDirective(clang::OMPExecutableDirective const&)::$_118&>(clang::CodeGen::CodeGenFunction::EmitSimpleOMPExecutableDirective(clang::OMPExecutableDirective const&)::$_118&&&, std::__1::enable_if<!(std::is_same<std::__1::remove_reference<clang::CodeGen::CodeGenFunction::EmitSimpleOMPExecutableDirective(clang::OMPExecutableDirective const&)::$_118&>::type, clang::CodeGen::RegionCodeGenTy>::value), void>::type*)
Line
Count
Source
88
10.5k
        PrePostAction(nullptr) {}
89
3.66k
  void setAction(PrePostActionTy &Action) const { PrePostAction = &Action; }
90
  void operator()(CodeGenFunction &CGF) const;
91
};
92
93
struct OMPTaskDataTy final {
94
  SmallVector<const Expr *, 4> PrivateVars;
95
  SmallVector<const Expr *, 4> PrivateCopies;
96
  SmallVector<const Expr *, 4> FirstprivateVars;
97
  SmallVector<const Expr *, 4> FirstprivateCopies;
98
  SmallVector<const Expr *, 4> FirstprivateInits;
99
  SmallVector<const Expr *, 4> LastprivateVars;
100
  SmallVector<const Expr *, 4> LastprivateCopies;
101
  SmallVector<const Expr *, 4> ReductionVars;
102
  SmallVector<const Expr *, 4> ReductionCopies;
103
  SmallVector<const Expr *, 4> ReductionOps;
104
  SmallVector<std::pair<OpenMPDependClauseKind, const Expr *>, 4> Dependences;
105
  llvm::PointerIntPair<llvm::Value *, 1, bool> Final;
106
  llvm::PointerIntPair<llvm::Value *, 1, bool> Schedule;
107
  llvm::PointerIntPair<llvm::Value *, 1, bool> Priority;
108
  llvm::Value *Reductions = nullptr;
109
  unsigned NumberOfParts = 0;
110
  bool Tied = true;
111
  bool Nogroup = false;
112
};
113
114
/// Class intended to support codegen of all kind of the reduction clauses.
115
class ReductionCodeGen {
116
private:
117
  /// Data required for codegen of reduction clauses.
118
  struct ReductionData {
119
    /// Reference to the original shared item.
120
    const Expr *Ref = nullptr;
121
    /// Helper expression for generation of private copy.
122
    const Expr *Private = nullptr;
123
    /// Helper expression for generation reduction operation.
124
    const Expr *ReductionOp = nullptr;
125
    ReductionData(const Expr *Ref, const Expr *Private, const Expr *ReductionOp)
126
730
        : Ref(Ref), Private(Private), ReductionOp(ReductionOp) {}
127
  };
128
  /// List of reduction-based clauses.
129
  SmallVector<ReductionData, 4> ClausesData;
130
131
  /// List of addresses of original shared variables/expressions.
132
  SmallVector<std::pair<LValue, LValue>, 4> SharedAddresses;
133
  /// Sizes of the reduction items in chars.
134
  SmallVector<std::pair<llvm::Value *, llvm::Value *>, 4> Sizes;
135
  /// Base declarations for the reduction items.
136
  SmallVector<const VarDecl *, 4> BaseDecls;
137
138
  /// Emits lvalue for shared expression.
139
  LValue emitSharedLValue(CodeGenFunction &CGF, const Expr *E);
140
  /// Emits upper bound for shared expression (if array section).
141
  LValue emitSharedLValueUB(CodeGenFunction &CGF, const Expr *E);
142
  /// Performs aggregate initialization.
143
  /// \param N Number of reduction item in the common list.
144
  /// \param PrivateAddr Address of the corresponding private item.
145
  /// \param SharedLVal Address of the original shared variable.
146
  /// \param DRD Declare reduction construct used for reduction item.
147
  void emitAggregateInitialization(CodeGenFunction &CGF, unsigned N,
148
                                   Address PrivateAddr, LValue SharedLVal,
149
                                   const OMPDeclareReductionDecl *DRD);
150
151
public:
152
  ReductionCodeGen(ArrayRef<const Expr *> Shareds,
153
                   ArrayRef<const Expr *> Privates,
154
                   ArrayRef<const Expr *> ReductionOps);
155
  /// Emits lvalue for a reduction item.
156
  /// \param N Number of the reduction item.
157
  void emitSharedLValue(CodeGenFunction &CGF, unsigned N);
158
  /// Emits the code for the variable-modified type, if required.
159
  /// \param N Number of the reduction item.
160
  void emitAggregateType(CodeGenFunction &CGF, unsigned N);
161
  /// Emits the code for the variable-modified type, if required.
162
  /// \param N Number of the reduction item.
163
  /// \param Size Size of the type in chars.
164
  void emitAggregateType(CodeGenFunction &CGF, unsigned N, llvm::Value *Size);
165
  /// Performs initialization of the private copy for the reduction item.
166
  /// \param N Number of the reduction item.
167
  /// \param PrivateAddr Address of the corresponding private item.
168
  /// \param DefaultInit Default initialization sequence that should be
169
  /// performed if no reduction specific initialization is found.
170
  /// \param SharedLVal Address of the original shared variable.
171
  void
172
  emitInitialization(CodeGenFunction &CGF, unsigned N, Address PrivateAddr,
173
                     LValue SharedLVal,
174
                     llvm::function_ref<bool(CodeGenFunction &)> DefaultInit);
175
  /// Returns true if the private copy requires cleanups.
176
  bool needCleanups(unsigned N);
177
  /// Emits cleanup code for the reduction item.
178
  /// \param N Number of the reduction item.
179
  /// \param PrivateAddr Address of the corresponding private item.
180
  void emitCleanups(CodeGenFunction &CGF, unsigned N, Address PrivateAddr);
181
  /// Adjusts \p PrivatedAddr for using instead of the original variable
182
  /// address in normal operations.
183
  /// \param N Number of the reduction item.
184
  /// \param PrivateAddr Address of the corresponding private item.
185
  Address adjustPrivateAddress(CodeGenFunction &CGF, unsigned N,
186
                               Address PrivateAddr);
187
  /// Returns LValue for the reduction item.
188
1.33k
  LValue getSharedLValue(unsigned N) const { return SharedAddresses[N].first; }
189
  /// Returns the size of the reduction item (in chars and total number of
190
  /// elements in the item), or nullptr, if the size is a constant.
191
330
  std::pair<llvm::Value *, llvm::Value *> getSizes(unsigned N) const {
192
330
    return Sizes[N];
193
330
  }
194
  /// Returns the base declaration of the reduction item.
195
641
  const VarDecl *getBaseDecl(unsigned N) const { return BaseDecls[N]; }
196
  /// Returns the base declaration of the reduction item.
197
90
  const Expr *getRefExpr(unsigned N) const { return ClausesData[N].Ref; }
198
  /// Returns true if the initialization of the reduction item uses initializer
199
  /// from declare reduction construct.
200
  bool usesReductionInitializer(unsigned N) const;
201
};
202
203
class CGOpenMPRuntime {
204
public:
205
  /// Allows to disable automatic handling of functions used in target regions
206
  /// as those marked as `omp declare target`.
207
  class DisableAutoDeclareTargetRAII {
208
    CodeGenModule &CGM;
209
    bool SavedShouldMarkAsGlobal;
210
211
  public:
212
    DisableAutoDeclareTargetRAII(CodeGenModule &CGM);
213
    ~DisableAutoDeclareTargetRAII();
214
  };
215
216
  /// Manages list of nontemporal decls for the specified directive.
217
  class NontemporalDeclsRAII {
218
    CodeGenModule &CGM;
219
    const bool NeedToPush;
220
221
  public:
222
    NontemporalDeclsRAII(CodeGenModule &CGM, const OMPLoopDirective &S);
223
    ~NontemporalDeclsRAII();
224
  };
225
226
  /// Maps the expression for the lastprivate variable to the global copy used
227
  /// to store new value because original variables are not mapped in inner
228
  /// parallel regions. Only private copies are captured but we need also to
229
  /// store private copy in shared address.
230
  /// Also, stores the expression for the private loop counter and it
231
  /// threaprivate name.
232
  struct LastprivateConditionalData {
233
    llvm::MapVector<CanonicalDeclPtr<const Decl>, SmallString<16>>
234
        DeclToUniqueName;
235
    LValue IVLVal;
236
    llvm::Function *Fn = nullptr;
237
    bool Disabled = false;
238
  };
239
  /// Manages list of lastprivate conditional decls for the specified directive.
240
  class LastprivateConditionalRAII {
241
    enum class ActionToDo {
242
      DoNotPush,
243
      PushAsLastprivateConditional,
244
      DisableLastprivateConditional,
245
    };
246
    CodeGenModule &CGM;
247
    ActionToDo Action = ActionToDo::DoNotPush;
248
249
    /// Check and try to disable analysis of inner regions for changes in
250
    /// lastprivate conditional.
251
    void tryToDisableInnerAnalysis(const OMPExecutableDirective &S,
252
                                   llvm::DenseSet<CanonicalDeclPtr<const Decl>>
253
                                       &NeedToAddForLPCsAsDisabled) const;
254
255
    LastprivateConditionalRAII(CodeGenFunction &CGF,
256
                               const OMPExecutableDirective &S);
257
258
  public:
259
    explicit LastprivateConditionalRAII(CodeGenFunction &CGF,
260
                                        const OMPExecutableDirective &S,
261
                                        LValue IVLVal);
262
    static LastprivateConditionalRAII disable(CodeGenFunction &CGF,
263
                                              const OMPExecutableDirective &S);
264
    ~LastprivateConditionalRAII();
265
  };
266
267
protected:
268
  CodeGenModule &CGM;
269
  StringRef FirstSeparator, Separator;
270
271
  /// Constructor allowing to redefine the name separator for the variables.
272
  explicit CGOpenMPRuntime(CodeGenModule &CGM, StringRef FirstSeparator,
273
                           StringRef Separator);
274
275
  /// Creates offloading entry for the provided entry ID \a ID,
276
  /// address \a Addr, size \a Size, and flags \a Flags.
277
  virtual void createOffloadEntry(llvm::Constant *ID, llvm::Constant *Addr,
278
                                  uint64_t Size, int32_t Flags,
279
                                  llvm::GlobalValue::LinkageTypes Linkage);
280
281
  /// Helper to emit outlined function for 'target' directive.
282
  /// \param D Directive to emit.
283
  /// \param ParentName Name of the function that encloses the target region.
284
  /// \param OutlinedFn Outlined function value to be defined by this call.
285
  /// \param OutlinedFnID Outlined function ID value to be defined by this call.
286
  /// \param IsOffloadEntry True if the outlined function is an offload entry.
287
  /// \param CodeGen Lambda codegen specific to an accelerator device.
288
  /// An outlined function may not be an entry if, e.g. the if clause always
289
  /// evaluates to false.
290
  virtual void emitTargetOutlinedFunctionHelper(const OMPExecutableDirective &D,
291
                                                StringRef ParentName,
292
                                                llvm::Function *&OutlinedFn,
293
                                                llvm::Constant *&OutlinedFnID,
294
                                                bool IsOffloadEntry,
295
                                                const RegionCodeGenTy &CodeGen);
296
297
  /// Emits object of ident_t type with info for source location.
298
  /// \param Flags Flags for OpenMP location.
299
  ///
300
  llvm::Value *emitUpdateLocation(CodeGenFunction &CGF, SourceLocation Loc,
301
                                  unsigned Flags = 0);
302
303
  /// Returns pointer to ident_t type.
304
  llvm::Type *getIdentTyPointerTy();
305
306
  /// Gets thread id value for the current thread.
307
  ///
308
  llvm::Value *getThreadID(CodeGenFunction &CGF, SourceLocation Loc);
309
310
  /// Get the function name of an outlined region.
311
  //  The name can be customized depending on the target.
312
  //
313
7.20k
  virtual StringRef getOutlinedHelperName() const { return ".omp_outlined."; }
314
315
  /// Emits \p Callee function call with arguments \p Args with location \p Loc.
316
  void emitCall(CodeGenFunction &CGF, SourceLocation Loc,
317
                llvm::FunctionCallee Callee,
318
                ArrayRef<llvm::Value *> Args = llvm::None) const;
319
320
  /// Emits address of the word in a memory where current thread id is
321
  /// stored.
322
  virtual Address emitThreadIDAddress(CodeGenFunction &CGF, SourceLocation Loc);
323
324
  void setLocThreadIdInsertPt(CodeGenFunction &CGF,
325
                              bool AtCurrentPoint = false);
326
  void clearLocThreadIdInsertPt(CodeGenFunction &CGF);
327
328
  /// Check if the default location must be constant.
329
  /// Default is false to support OMPT/OMPD.
330
3.38k
  virtual bool isDefaultLocationConstant() const { return false; }
331
332
  /// Returns additional flags that can be stored in reserved_2 field of the
333
  /// default location.
334
23.5k
  virtual unsigned getDefaultLocationReserved2Flags() const { return 0; }
335
336
  /// Tries to emit declare variant function for \p OldGD from \p NewGD.
337
  /// \param OrigAddr LLVM IR value for \p OldGD.
338
  /// \param IsForDefinition true, if requested emission for the definition of
339
  /// \p OldGD.
340
  /// \returns true, was able to emit a definition function for \p OldGD, which
341
  /// points to \p NewGD.
342
  virtual bool tryEmitDeclareVariant(const GlobalDecl &NewGD,
343
                                     const GlobalDecl &OldGD,
344
                                     llvm::GlobalValue *OrigAddr,
345
                                     bool IsForDefinition);
346
347
  /// Returns default flags for the barriers depending on the directive, for
348
  /// which this barier is going to be emitted.
349
  static unsigned getDefaultFlagsForBarriers(OpenMPDirectiveKind Kind);
350
351
  /// Get the LLVM type for the critical name.
352
0
  llvm::ArrayType *getKmpCriticalNameTy() const {return KmpCriticalNameTy;}
353
354
  /// Returns corresponding lock object for the specified critical region
355
  /// name. If the lock object does not exist it is created, otherwise the
356
  /// reference to the existing copy is returned.
357
  /// \param CriticalName Name of the critical region.
358
  ///
359
  llvm::Value *getCriticalRegionLock(StringRef CriticalName);
360
361
private:
362
  /// Default const ident_t object used for initialization of all other
363
  /// ident_t objects.
364
  llvm::Constant *DefaultOpenMPPSource = nullptr;
365
  using FlagsTy = std::pair<unsigned, unsigned>;
366
  /// Map of flags and corresponding default locations.
367
  using OpenMPDefaultLocMapTy = llvm::DenseMap<FlagsTy, llvm::Value *>;
368
  OpenMPDefaultLocMapTy OpenMPDefaultLocMap;
369
  Address getOrCreateDefaultLocation(unsigned Flags);
370
371
  QualType IdentQTy;
372
  llvm::StructType *IdentTy = nullptr;
373
  /// Map for SourceLocation and OpenMP runtime library debug locations.
374
  typedef llvm::DenseMap<unsigned, llvm::Value *> OpenMPDebugLocMapTy;
375
  OpenMPDebugLocMapTy OpenMPDebugLocMap;
376
  /// The type for a microtask which gets passed to __kmpc_fork_call().
377
  /// Original representation is:
378
  /// typedef void (kmpc_micro)(kmp_int32 global_tid, kmp_int32 bound_tid,...);
379
  llvm::FunctionType *Kmpc_MicroTy = nullptr;
380
  /// Stores debug location and ThreadID for the function.
381
  struct DebugLocThreadIdTy {
382
    llvm::Value *DebugLoc;
383
    llvm::Value *ThreadID;
384
    /// Insert point for the service instructions.
385
    llvm::AssertingVH<llvm::Instruction> ServiceInsertPt = nullptr;
386
  };
387
  /// Map of local debug location, ThreadId and functions.
388
  typedef llvm::DenseMap<llvm::Function *, DebugLocThreadIdTy>
389
      OpenMPLocThreadIDMapTy;
390
  OpenMPLocThreadIDMapTy OpenMPLocThreadIDMap;
391
  /// Map of UDRs and corresponding combiner/initializer.
392
  typedef llvm::DenseMap<const OMPDeclareReductionDecl *,
393
                         std::pair<llvm::Function *, llvm::Function *>>
394
      UDRMapTy;
395
  UDRMapTy UDRMap;
396
  /// Map of functions and locally defined UDRs.
397
  typedef llvm::DenseMap<llvm::Function *,
398
                         SmallVector<const OMPDeclareReductionDecl *, 4>>
399
      FunctionUDRMapTy;
400
  FunctionUDRMapTy FunctionUDRMap;
401
  /// Map from the user-defined mapper declaration to its corresponding
402
  /// functions.
403
  llvm::DenseMap<const OMPDeclareMapperDecl *, llvm::Function *> UDMMap;
404
  /// Map of functions and their local user-defined mappers.
405
  using FunctionUDMMapTy =
406
      llvm::DenseMap<llvm::Function *,
407
                     SmallVector<const OMPDeclareMapperDecl *, 4>>;
408
  FunctionUDMMapTy FunctionUDMMap;
409
  /// Maps local variables marked as lastprivate conditional to their internal
410
  /// types.
411
  llvm::DenseMap<llvm::Function *,
412
                 llvm::DenseMap<CanonicalDeclPtr<const Decl>,
413
                                std::tuple<QualType, const FieldDecl *,
414
                                           const FieldDecl *, LValue>>>
415
      LastprivateConditionalToTypes;
416
  /// Type kmp_critical_name, originally defined as typedef kmp_int32
417
  /// kmp_critical_name[8];
418
  llvm::ArrayType *KmpCriticalNameTy;
419
  /// An ordered map of auto-generated variables to their unique names.
420
  /// It stores variables with the following names: 1) ".gomp_critical_user_" +
421
  /// <critical_section_name> + ".var" for "omp critical" directives; 2)
422
  /// <mangled_name_for_global_var> + ".cache." for cache for threadprivate
423
  /// variables.
424
  llvm::StringMap<llvm::AssertingVH<llvm::Constant>, llvm::BumpPtrAllocator>
425
      InternalVars;
426
  /// Type typedef kmp_int32 (* kmp_routine_entry_t)(kmp_int32, void *);
427
  llvm::Type *KmpRoutineEntryPtrTy = nullptr;
428
  QualType KmpRoutineEntryPtrQTy;
429
  /// Type typedef struct kmp_task {
430
  ///    void *              shareds; /**< pointer to block of pointers to
431
  ///    shared vars   */
432
  ///    kmp_routine_entry_t routine; /**< pointer to routine to call for
433
  ///    executing task */
434
  ///    kmp_int32           part_id; /**< part id for the task */
435
  ///    kmp_routine_entry_t destructors; /* pointer to function to invoke
436
  ///    deconstructors of firstprivate C++ objects */
437
  /// } kmp_task_t;
438
  QualType KmpTaskTQTy;
439
  /// Saved kmp_task_t for task directive.
440
  QualType SavedKmpTaskTQTy;
441
  /// Saved kmp_task_t for taskloop-based directive.
442
  QualType SavedKmpTaskloopTQTy;
443
  /// Type typedef struct kmp_depend_info {
444
  ///    kmp_intptr_t               base_addr;
445
  ///    size_t                     len;
446
  ///    struct {
447
  ///             bool                   in:1;
448
  ///             bool                   out:1;
449
  ///    } flags;
450
  /// } kmp_depend_info_t;
451
  QualType KmpDependInfoTy;
452
  /// struct kmp_dim {  // loop bounds info casted to kmp_int64
453
  ///  kmp_int64 lo; // lower
454
  ///  kmp_int64 up; // upper
455
  ///  kmp_int64 st; // stride
456
  /// };
457
  QualType KmpDimTy;
458
  /// Type struct __tgt_offload_entry{
459
  ///   void      *addr;       // Pointer to the offload entry info.
460
  ///                          // (function or global)
461
  ///   char      *name;       // Name of the function or global.
462
  ///   size_t     size;       // Size of the entry info (0 if it a function).
463
  ///   int32_t flags;
464
  ///   int32_t reserved;
465
  /// };
466
  QualType TgtOffloadEntryQTy;
467
  /// Entity that registers the offloading constants that were emitted so
468
  /// far.
469
  class OffloadEntriesInfoManagerTy {
470
    CodeGenModule &CGM;
471
472
    /// Number of entries registered so far.
473
    unsigned OffloadingEntriesNum = 0;
474
475
  public:
476
    /// Base class of the entries info.
477
    class OffloadEntryInfo {
478
    public:
479
      /// Kind of a given entry.
480
      enum OffloadingEntryInfoKinds : unsigned {
481
        /// Entry is a target region.
482
        OffloadingEntryInfoTargetRegion = 0,
483
        /// Entry is a declare target variable.
484
        OffloadingEntryInfoDeviceGlobalVar = 1,
485
        /// Invalid entry info.
486
        OffloadingEntryInfoInvalid = ~0u
487
      };
488
489
    protected:
490
      OffloadEntryInfo() = delete;
491
6.83k
      explicit OffloadEntryInfo(OffloadingEntryInfoKinds Kind) : Kind(Kind) {}
492
      explicit OffloadEntryInfo(OffloadingEntryInfoKinds Kind, unsigned Order,
493
                                uint32_t Flags)
494
7.07k
          : Flags(Flags), Order(Order), Kind(Kind) {}
495
14.3k
      ~OffloadEntryInfo() = default;
496
497
    public:
498
2.35k
      bool isValid() const { return Order != ~0u; }
499
20.8k
      unsigned getOrder() const { return Order; }
500
21.3k
      OffloadingEntryInfoKinds getKind() const { return Kind; }
501
7.64k
      uint32_t getFlags() const { return Flags; }
502
1.97k
      void setFlags(uint32_t NewFlags) { Flags = NewFlags; }
503
19.0k
      llvm::Constant *getAddress() const {
504
19.0k
        return cast_or_null<llvm::Constant>(Addr);
505
19.0k
      }
506
9.04k
      void setAddress(llvm::Constant *V) {
507
9.04k
        assert(!Addr.pointsToAliveValue() && "Address has been set before!");
508
9.04k
        Addr = V;
509
9.04k
      }
510
0
      static bool classof(const OffloadEntryInfo *Info) { return true; }
511
512
    private:
513
      /// Address of the entity that has to be mapped for offloading.
514
      llvm::WeakTrackingVH Addr;
515
516
      /// Flags associated with the device global.
517
      uint32_t Flags = 0u;
518
519
      /// Order this entry was emitted.
520
      unsigned Order = ~0u;
521
522
      OffloadingEntryInfoKinds Kind = OffloadingEntryInfoInvalid;
523
    };
524
525
    /// Return true if a there are no entries defined.
526
    bool empty() const;
527
    /// Return number of entries defined so far.
528
3.30k
    unsigned size() const { return OffloadingEntriesNum; }
529
4.21k
    OffloadEntriesInfoManagerTy(CodeGenModule &CGM) : CGM(CGM) {}
530
531
    //
532
    // Target region entries related.
533
    //
534
535
    /// Kind of the target registry entry.
536
    enum OMPTargetRegionEntryKind : uint32_t {
537
      /// Mark the entry as target region.
538
      OMPTargetRegionEntryTargetRegion = 0x0,
539
      /// Mark the entry as a global constructor.
540
      OMPTargetRegionEntryCtor = 0x02,
541
      /// Mark the entry as a global destructor.
542
      OMPTargetRegionEntryDtor = 0x04,
543
    };
544
545
    /// Target region entries info.
546
    class OffloadEntryInfoTargetRegion final : public OffloadEntryInfo {
547
      /// Address that can be used as the ID of the entry.
548
      llvm::Constant *ID = nullptr;
549
550
    public:
551
      OffloadEntryInfoTargetRegion()
552
6.83k
          : OffloadEntryInfo(OffloadingEntryInfoTargetRegion) {}
553
      explicit OffloadEntryInfoTargetRegion(unsigned Order,
554
                                            llvm::Constant *Addr,
555
                                            llvm::Constant *ID,
556
                                            OMPTargetRegionEntryKind Flags)
557
          : OffloadEntryInfo(OffloadingEntryInfoTargetRegion, Order, Flags),
558
6.83k
            ID(ID) {
559
6.83k
        setAddress(Addr);
560
6.83k
      }
561
562
17.4k
      llvm::Constant *getID() const { return ID; }
563
1.97k
      void setID(llvm::Constant *V) {
564
1.97k
        assert(!ID && "ID has been set before!");
565
1.97k
        ID = V;
566
1.97k
      }
567
13.8k
      static bool classof(const OffloadEntryInfo *Info) {
568
13.8k
        return Info->getKind() == OffloadingEntryInfoTargetRegion;
569
13.8k
      }
570
    };
571
572
    /// Initialize target region entry.
573
    void initializeTargetRegionEntryInfo(unsigned DeviceID, unsigned FileID,
574
                                         StringRef ParentName, unsigned LineNum,
575
                                         unsigned Order);
576
    /// Register target region entry.
577
    void registerTargetRegionEntryInfo(unsigned DeviceID, unsigned FileID,
578
                                       StringRef ParentName, unsigned LineNum,
579
                                       llvm::Constant *Addr, llvm::Constant *ID,
580
                                       OMPTargetRegionEntryKind Flags);
581
    /// Return true if a target region entry with the provided information
582
    /// exists.
583
    bool hasTargetRegionEntryInfo(unsigned DeviceID, unsigned FileID,
584
                                  StringRef ParentName, unsigned LineNum) const;
585
    /// brief Applies action \a Action on all registered entries.
586
    typedef llvm::function_ref<void(unsigned, unsigned, StringRef, unsigned,
587
                                    const OffloadEntryInfoTargetRegion &)>
588
        OffloadTargetRegionEntryInfoActTy;
589
    void actOnTargetRegionEntriesInfo(
590
        const OffloadTargetRegionEntryInfoActTy &Action);
591
592
    //
593
    // Device global variable entries related.
594
    //
595
596
    /// Kind of the global variable entry..
597
    enum OMPTargetGlobalVarEntryKind : uint32_t {
598
      /// Mark the entry as a to declare target.
599
      OMPTargetGlobalVarEntryTo = 0x0,
600
      /// Mark the entry as a to declare target link.
601
      OMPTargetGlobalVarEntryLink = 0x1,
602
    };
603
604
    /// Device global variable entries info.
605
    class OffloadEntryInfoDeviceGlobalVar final : public OffloadEntryInfo {
606
      /// Type of the global variable.
607
     CharUnits VarSize;
608
     llvm::GlobalValue::LinkageTypes Linkage;
609
610
   public:
611
     OffloadEntryInfoDeviceGlobalVar()
612
0
         : OffloadEntryInfo(OffloadingEntryInfoDeviceGlobalVar) {}
613
     explicit OffloadEntryInfoDeviceGlobalVar(unsigned Order,
614
                                              OMPTargetGlobalVarEntryKind Flags)
615
109
         : OffloadEntryInfo(OffloadingEntryInfoDeviceGlobalVar, Order, Flags) {}
616
     explicit OffloadEntryInfoDeviceGlobalVar(
617
         unsigned Order, llvm::Constant *Addr, CharUnits VarSize,
618
         OMPTargetGlobalVarEntryKind Flags,
619
         llvm::GlobalValue::LinkageTypes Linkage)
620
         : OffloadEntryInfo(OffloadingEntryInfoDeviceGlobalVar, Order, Flags),
621
138
           VarSize(VarSize), Linkage(Linkage) {
622
138
       setAddress(Addr);
623
138
      }
624
625
648
      CharUnits getVarSize() const { return VarSize; }
626
130
      void setVarSize(CharUnits Size) { VarSize = Size; }
627
180
      llvm::GlobalValue::LinkageTypes getLinkage() const { return Linkage; }
628
130
      void setLinkage(llvm::GlobalValue::LinkageTypes LT) { Linkage = LT; }
629
488
      static bool classof(const OffloadEntryInfo *Info) {
630
488
        return Info->getKind() == OffloadingEntryInfoDeviceGlobalVar;
631
488
      }
632
    };
633
634
    /// Initialize device global variable entry.
635
    void initializeDeviceGlobalVarEntryInfo(StringRef Name,
636
                                            OMPTargetGlobalVarEntryKind Flags,
637
                                            unsigned Order);
638
639
    /// Register device global variable entry.
640
    void
641
    registerDeviceGlobalVarEntryInfo(StringRef VarName, llvm::Constant *Addr,
642
                                     CharUnits VarSize,
643
                                     OMPTargetGlobalVarEntryKind Flags,
644
                                     llvm::GlobalValue::LinkageTypes Linkage);
645
    /// Checks if the variable with the given name has been registered already.
646
410
    bool hasDeviceGlobalVarEntryInfo(StringRef VarName) const {
647
410
      return OffloadEntriesDeviceGlobalVar.count(VarName) > 0;
648
410
    }
649
    /// Applies action \a Action on all registered entries.
650
    typedef llvm::function_ref<void(StringRef,
651
                                    const OffloadEntryInfoDeviceGlobalVar &)>
652
        OffloadDeviceGlobalVarEntryInfoActTy;
653
    void actOnDeviceGlobalVarEntriesInfo(
654
        const OffloadDeviceGlobalVarEntryInfoActTy &Action);
655
656
  private:
657
    // Storage for target region entries kind. The storage is to be indexed by
658
    // file ID, device ID, parent function name and line number.
659
    typedef llvm::DenseMap<unsigned, OffloadEntryInfoTargetRegion>
660
        OffloadEntriesTargetRegionPerLine;
661
    typedef llvm::StringMap<OffloadEntriesTargetRegionPerLine>
662
        OffloadEntriesTargetRegionPerParentName;
663
    typedef llvm::DenseMap<unsigned, OffloadEntriesTargetRegionPerParentName>
664
        OffloadEntriesTargetRegionPerFile;
665
    typedef llvm::DenseMap<unsigned, OffloadEntriesTargetRegionPerFile>
666
        OffloadEntriesTargetRegionPerDevice;
667
    typedef OffloadEntriesTargetRegionPerDevice OffloadEntriesTargetRegionTy;
668
    OffloadEntriesTargetRegionTy OffloadEntriesTargetRegion;
669
    /// Storage for device global variable entries kind. The storage is to be
670
    /// indexed by mangled name.
671
    typedef llvm::StringMap<OffloadEntryInfoDeviceGlobalVar>
672
        OffloadEntriesDeviceGlobalVarTy;
673
    OffloadEntriesDeviceGlobalVarTy OffloadEntriesDeviceGlobalVar;
674
  };
675
  OffloadEntriesInfoManagerTy OffloadEntriesInfoManager;
676
677
  bool ShouldMarkAsGlobal = true;
678
  /// List of the emitted declarations.
679
  llvm::DenseSet<CanonicalDeclPtr<const Decl>> AlreadyEmittedTargetDecls;
680
  /// List of the global variables with their addresses that should not be
681
  /// emitted for the target.
682
  llvm::StringMap<llvm::WeakTrackingVH> EmittedNonTargetVariables;
683
684
  /// List of variables that can become declare target implicitly and, thus,
685
  /// must be emitted.
686
  llvm::SmallDenseSet<const VarDecl *> DeferredGlobalVariables;
687
688
  /// Mapping of the original functions to their variants and original global
689
  /// decl.
690
  llvm::MapVector<CanonicalDeclPtr<const FunctionDecl>,
691
                  std::pair<GlobalDecl, GlobalDecl>>
692
      DeferredVariantFunction;
693
694
  using NontemporalDeclsSet = llvm::SmallDenseSet<CanonicalDeclPtr<const Decl>>;
695
  /// Stack for list of declarations in current context marked as nontemporal.
696
  /// The set is the union of all current stack elements.
697
  llvm::SmallVector<NontemporalDeclsSet, 4> NontemporalDeclsStack;
698
699
  /// Stack for list of addresses of declarations in current context marked as
700
  /// lastprivate conditional. The set is the union of all current stack
701
  /// elements.
702
  llvm::SmallVector<LastprivateConditionalData, 4> LastprivateConditionalStack;
703
704
  /// Flag for keeping track of weather a requires unified_shared_memory
705
  /// directive is present.
706
  bool HasRequiresUnifiedSharedMemory = false;
707
708
  /// Atomic ordering from the omp requires directive.
709
  llvm::AtomicOrdering RequiresAtomicOrdering = llvm::AtomicOrdering::Monotonic;
710
711
  /// Flag for keeping track of weather a target region has been emitted.
712
  bool HasEmittedTargetRegion = false;
713
714
  /// Flag for keeping track of weather a device routine has been emitted.
715
  /// Device routines are specific to the
716
  bool HasEmittedDeclareTargetRegion = false;
717
718
  /// Loads all the offload entries information from the host IR
719
  /// metadata.
720
  void loadOffloadInfoMetadata();
721
722
  /// Returns __tgt_offload_entry type.
723
  QualType getTgtOffloadEntryQTy();
724
725
  /// Start scanning from statement \a S and and emit all target regions
726
  /// found along the way.
727
  /// \param S Starting statement.
728
  /// \param ParentName Name of the function declaration that is being scanned.
729
  void scanForTargetRegionsFunctions(const Stmt *S, StringRef ParentName);
730
731
  /// Build type kmp_routine_entry_t (if not built yet).
732
  void emitKmpRoutineEntryT(QualType KmpInt32Ty);
733
734
  /// Returns pointer to kmpc_micro type.
735
  llvm::Type *getKmpc_MicroPointerTy();
736
737
  /// Returns specified OpenMP runtime function.
738
  /// \param Function OpenMP runtime function.
739
  /// \return Specified function.
740
  llvm::FunctionCallee createRuntimeFunction(unsigned Function);
741
742
  /// Returns __kmpc_for_static_init_* runtime function for the specified
743
  /// size \a IVSize and sign \a IVSigned.
744
  llvm::FunctionCallee createForStaticInitFunction(unsigned IVSize,
745
                                                   bool IVSigned);
746
747
  /// Returns __kmpc_dispatch_init_* runtime function for the specified
748
  /// size \a IVSize and sign \a IVSigned.
749
  llvm::FunctionCallee createDispatchInitFunction(unsigned IVSize,
750
                                                  bool IVSigned);
751
752
  /// Returns __kmpc_dispatch_next_* runtime function for the specified
753
  /// size \a IVSize and sign \a IVSigned.
754
  llvm::FunctionCallee createDispatchNextFunction(unsigned IVSize,
755
                                                  bool IVSigned);
756
757
  /// Returns __kmpc_dispatch_fini_* runtime function for the specified
758
  /// size \a IVSize and sign \a IVSigned.
759
  llvm::FunctionCallee createDispatchFiniFunction(unsigned IVSize,
760
                                                  bool IVSigned);
761
762
  /// If the specified mangled name is not in the module, create and
763
  /// return threadprivate cache object. This object is a pointer's worth of
764
  /// storage that's reserved for use by the OpenMP runtime.
765
  /// \param VD Threadprivate variable.
766
  /// \return Cache variable for the specified threadprivate.
767
  llvm::Constant *getOrCreateThreadPrivateCache(const VarDecl *VD);
768
769
  /// Gets (if variable with the given name already exist) or creates
770
  /// internal global variable with the specified Name. The created variable has
771
  /// linkage CommonLinkage by default and is initialized by null value.
772
  /// \param Ty Type of the global variable. If it is exist already the type
773
  /// must be the same.
774
  /// \param Name Name of the variable.
775
  llvm::Constant *getOrCreateInternalVariable(llvm::Type *Ty,
776
                                              const llvm::Twine &Name,
777
                                              unsigned AddressSpace = 0);
778
779
  /// Set of threadprivate variables with the generated initializer.
780
  llvm::StringSet<> ThreadPrivateWithDefinition;
781
782
  /// Set of declare target variables with the generated initializer.
783
  llvm::StringSet<> DeclareTargetWithDefinition;
784
785
  /// Emits initialization code for the threadprivate variables.
786
  /// \param VDAddr Address of the global variable \a VD.
787
  /// \param Ctor Pointer to a global init function for \a VD.
788
  /// \param CopyCtor Pointer to a global copy function for \a VD.
789
  /// \param Dtor Pointer to a global destructor function for \a VD.
790
  /// \param Loc Location of threadprivate declaration.
791
  void emitThreadPrivateVarInit(CodeGenFunction &CGF, Address VDAddr,
792
                                llvm::Value *Ctor, llvm::Value *CopyCtor,
793
                                llvm::Value *Dtor, SourceLocation Loc);
794
795
  /// Emit the array initialization or deletion portion for user-defined mapper
796
  /// code generation.
797
  void emitUDMapperArrayInitOrDel(CodeGenFunction &MapperCGF,
798
                                  llvm::Value *Handle, llvm::Value *BasePtr,
799
                                  llvm::Value *Ptr, llvm::Value *Size,
800
                                  llvm::Value *MapType, CharUnits ElementSize,
801
                                  llvm::BasicBlock *ExitBB, bool IsInit);
802
803
  struct TaskResultTy {
804
    llvm::Value *NewTask = nullptr;
805
    llvm::Function *TaskEntry = nullptr;
806
    llvm::Value *NewTaskNewTaskTTy = nullptr;
807
    LValue TDBase;
808
    const RecordDecl *KmpTaskTQTyRD = nullptr;
809
    llvm::Value *TaskDupFn = nullptr;
810
  };
811
  /// Emit task region for the task directive. The task region is emitted in
812
  /// several steps:
813
  /// 1. Emit a call to kmp_task_t *__kmpc_omp_task_alloc(ident_t *, kmp_int32
814
  /// gtid, kmp_int32 flags, size_t sizeof_kmp_task_t, size_t sizeof_shareds,
815
  /// kmp_routine_entry_t *task_entry). Here task_entry is a pointer to the
816
  /// function:
817
  /// kmp_int32 .omp_task_entry.(kmp_int32 gtid, kmp_task_t *tt) {
818
  ///   TaskFunction(gtid, tt->part_id, tt->shareds);
819
  ///   return 0;
820
  /// }
821
  /// 2. Copy a list of shared variables to field shareds of the resulting
822
  /// structure kmp_task_t returned by the previous call (if any).
823
  /// 3. Copy a pointer to destructions function to field destructions of the
824
  /// resulting structure kmp_task_t.
825
  /// \param D Current task directive.
826
  /// \param TaskFunction An LLVM function with type void (*)(i32 /*gtid*/, i32
827
  /// /*part_id*/, captured_struct */*__context*/);
828
  /// \param SharedsTy A type which contains references the shared variables.
829
  /// \param Shareds Context with the list of shared variables from the \p
830
  /// TaskFunction.
831
  /// \param Data Additional data for task generation like tiednsee, final
832
  /// state, list of privates etc.
833
  TaskResultTy emitTaskInit(CodeGenFunction &CGF, SourceLocation Loc,
834
                            const OMPExecutableDirective &D,
835
                            llvm::Function *TaskFunction, QualType SharedsTy,
836
                            Address Shareds, const OMPTaskDataTy &Data);
837
838
  /// Returns default address space for the constant firstprivates, 0 by
839
  /// default.
840
12
  virtual unsigned getDefaultFirstprivateAddressSpace() const { return 0; }
841
842
  /// Emit code that pushes the trip count of loops associated with constructs
843
  /// 'target teams distribute' and 'teams distribute parallel for'.
844
  /// \param SizeEmitter Emits the int64 value for the number of iterations of
845
  /// the associated loop.
846
  void emitTargetNumIterationsCall(
847
      CodeGenFunction &CGF, const OMPExecutableDirective &D,
848
      llvm::Value *DeviceID,
849
      llvm::function_ref<llvm::Value *(CodeGenFunction &CGF,
850
                                       const OMPLoopDirective &D)>
851
          SizeEmitter);
852
853
  /// Emit update for lastprivate conditional data.
854
  void emitLastprivateConditionalUpdate(CodeGenFunction &CGF, LValue IVLVal,
855
                                        StringRef UniqueDeclName, LValue LVal,
856
                                        SourceLocation Loc);
857
858
public:
859
  explicit CGOpenMPRuntime(CodeGenModule &CGM)
860
4.10k
      : CGOpenMPRuntime(CGM, ".", ".") {}
clang::CodeGen::CGOpenMPRuntime::CGOpenMPRuntime(clang::CodeGen::CodeGenModule&)
Line
Count
Source
860
1.96k
      : CGOpenMPRuntime(CGM, ".", ".") {}
clang::CodeGen::CGOpenMPRuntime::CGOpenMPRuntime(clang::CodeGen::CodeGenModule&)
Line
Count
Source
860
2.13k
      : CGOpenMPRuntime(CGM, ".", ".") {}
861
4.21k
  virtual ~CGOpenMPRuntime() {}
862
  virtual void clear();
863
864
  /// Emits code for OpenMP 'if' clause using specified \a CodeGen
865
  /// function. Here is the logic:
866
  /// if (Cond) {
867
  ///   ThenGen();
868
  /// } else {
869
  ///   ElseGen();
870
  /// }
871
  void emitIfClause(CodeGenFunction &CGF, const Expr *Cond,
872
                    const RegionCodeGenTy &ThenGen,
873
                    const RegionCodeGenTy &ElseGen);
874
875
  /// Checks if the \p Body is the \a CompoundStmt and returns its child
876
  /// statement iff there is only one that is not evaluatable at the compile
877
  /// time.
878
  static const Stmt *getSingleCompoundChild(ASTContext &Ctx, const Stmt *Body);
879
880
  /// Get the platform-specific name separator.
881
  std::string getName(ArrayRef<StringRef> Parts) const;
882
883
  /// Emit code for the specified user defined reduction construct.
884
  virtual void emitUserDefinedReduction(CodeGenFunction *CGF,
885
                                        const OMPDeclareReductionDecl *D);
886
  /// Get combiner/initializer for the specified user-defined reduction, if any.
887
  virtual std::pair<llvm::Function *, llvm::Function *>
888
  getUserDefinedReduction(const OMPDeclareReductionDecl *D);
889
890
  /// Emit the function for the user defined mapper construct.
891
  void emitUserDefinedMapper(const OMPDeclareMapperDecl *D,
892
                             CodeGenFunction *CGF = nullptr);
893
894
  /// Emits outlined function for the specified OpenMP parallel directive
895
  /// \a D. This outlined function has type void(*)(kmp_int32 *ThreadID,
896
  /// kmp_int32 BoundID, struct context_vars*).
897
  /// \param D OpenMP directive.
898
  /// \param ThreadIDVar Variable for thread id in the current OpenMP region.
899
  /// \param InnermostKind Kind of innermost directive (for simple directives it
900
  /// is a directive itself, for combined - its innermost directive).
901
  /// \param CodeGen Code generation sequence for the \a D directive.
902
  virtual llvm::Function *emitParallelOutlinedFunction(
903
      const OMPExecutableDirective &D, const VarDecl *ThreadIDVar,
904
      OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen);
905
906
  /// Emits outlined function for the specified OpenMP teams directive
907
  /// \a D. This outlined function has type void(*)(kmp_int32 *ThreadID,
908
  /// kmp_int32 BoundID, struct context_vars*).
909
  /// \param D OpenMP directive.
910
  /// \param ThreadIDVar Variable for thread id in the current OpenMP region.
911
  /// \param InnermostKind Kind of innermost directive (for simple directives it
912
  /// is a directive itself, for combined - its innermost directive).
913
  /// \param CodeGen Code generation sequence for the \a D directive.
914
  virtual llvm::Function *emitTeamsOutlinedFunction(
915
      const OMPExecutableDirective &D, const VarDecl *ThreadIDVar,
916
      OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen);
917
918
  /// Emits outlined function for the OpenMP task directive \a D. This
919
  /// outlined function has type void(*)(kmp_int32 ThreadID, struct task_t*
920
  /// TaskT).
921
  /// \param D OpenMP directive.
922
  /// \param ThreadIDVar Variable for thread id in the current OpenMP region.
923
  /// \param PartIDVar Variable for partition id in the current OpenMP untied
924
  /// task region.
925
  /// \param TaskTVar Variable for task_t argument.
926
  /// \param InnermostKind Kind of innermost directive (for simple directives it
927
  /// is a directive itself, for combined - its innermost directive).
928
  /// \param CodeGen Code generation sequence for the \a D directive.
929
  /// \param Tied true if task is generated for tied task, false otherwise.
930
  /// \param NumberOfParts Number of parts in untied task. Ignored for tied
931
  /// tasks.
932
  ///
933
  virtual llvm::Function *emitTaskOutlinedFunction(
934
      const OMPExecutableDirective &D, const VarDecl *ThreadIDVar,
935
      const VarDecl *PartIDVar, const VarDecl *TaskTVar,
936
      OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen,
937
      bool Tied, unsigned &NumberOfParts);
938
939
  /// Cleans up references to the objects in finished function.
940
  ///
941
  virtual void functionFinished(CodeGenFunction &CGF);
942
943
  /// Emits code for parallel or serial call of the \a OutlinedFn with
944
  /// variables captured in a record which address is stored in \a
945
  /// CapturedStruct.
946
  /// \param OutlinedFn Outlined function to be run in parallel threads. Type of
947
  /// this function is void(*)(kmp_int32 *, kmp_int32, struct context_vars*).
948
  /// \param CapturedVars A pointer to the record with the references to
949
  /// variables used in \a OutlinedFn function.
950
  /// \param IfCond Condition in the associated 'if' clause, if it was
951
  /// specified, nullptr otherwise.
952
  ///
953
  virtual void emitParallelCall(CodeGenFunction &CGF, SourceLocation Loc,
954
                                llvm::Function *OutlinedFn,
955
                                ArrayRef<llvm::Value *> CapturedVars,
956
                                const Expr *IfCond);
957
958
  /// Emits a critical region.
959
  /// \param CriticalName Name of the critical region.
960
  /// \param CriticalOpGen Generator for the statement associated with the given
961
  /// critical region.
962
  /// \param Hint Value of the 'hint' clause (optional).
963
  virtual void emitCriticalRegion(CodeGenFunction &CGF, StringRef CriticalName,
964
                                  const RegionCodeGenTy &CriticalOpGen,
965
                                  SourceLocation Loc,
966
                                  const Expr *Hint = nullptr);
967
968
  /// Emits a master region.
969
  /// \param MasterOpGen Generator for the statement associated with the given
970
  /// master region.
971
  virtual void emitMasterRegion(CodeGenFunction &CGF,
972
                                const RegionCodeGenTy &MasterOpGen,
973
                                SourceLocation Loc);
974
975
  /// Emits code for a taskyield directive.
976
  virtual void emitTaskyieldCall(CodeGenFunction &CGF, SourceLocation Loc);
977
978
  /// Emit a taskgroup region.
979
  /// \param TaskgroupOpGen Generator for the statement associated with the
980
  /// given taskgroup region.
981
  virtual void emitTaskgroupRegion(CodeGenFunction &CGF,
982
                                   const RegionCodeGenTy &TaskgroupOpGen,
983
                                   SourceLocation Loc);
984
985
  /// Emits a single region.
986
  /// \param SingleOpGen Generator for the statement associated with the given
987
  /// single region.
988
  virtual void emitSingleRegion(CodeGenFunction &CGF,
989
                                const RegionCodeGenTy &SingleOpGen,
990
                                SourceLocation Loc,
991
                                ArrayRef<const Expr *> CopyprivateVars,
992
                                ArrayRef<const Expr *> DestExprs,
993
                                ArrayRef<const Expr *> SrcExprs,
994
                                ArrayRef<const Expr *> AssignmentOps);
995
996
  /// Emit an ordered region.
997
  /// \param OrderedOpGen Generator for the statement associated with the given
998
  /// ordered region.
999
  virtual void emitOrderedRegion(CodeGenFunction &CGF,
1000
                                 const RegionCodeGenTy &OrderedOpGen,
1001
                                 SourceLocation Loc, bool IsThreads);
1002
1003
  /// Emit an implicit/explicit barrier for OpenMP threads.
1004
  /// \param Kind Directive for which this implicit barrier call must be
1005
  /// generated. Must be OMPD_barrier for explicit barrier generation.
1006
  /// \param EmitChecks true if need to emit checks for cancellation barriers.
1007
  /// \param ForceSimpleCall true simple barrier call must be emitted, false if
1008
  /// runtime class decides which one to emit (simple or with cancellation
1009
  /// checks).
1010
  ///
1011
  virtual void emitBarrierCall(CodeGenFunction &CGF, SourceLocation Loc,
1012
                               OpenMPDirectiveKind Kind,
1013
                               bool EmitChecks = true,
1014
                               bool ForceSimpleCall = false);
1015
1016
  /// Check if the specified \a ScheduleKind is static non-chunked.
1017
  /// This kind of worksharing directive is emitted without outer loop.
1018
  /// \param ScheduleKind Schedule kind specified in the 'schedule' clause.
1019
  /// \param Chunked True if chunk is specified in the clause.
1020
  ///
1021
  virtual bool isStaticNonchunked(OpenMPScheduleClauseKind ScheduleKind,
1022
                                  bool Chunked) const;
1023
1024
  /// Check if the specified \a ScheduleKind is static non-chunked.
1025
  /// This kind of distribute directive is emitted without outer loop.
1026
  /// \param ScheduleKind Schedule kind specified in the 'dist_schedule' clause.
1027
  /// \param Chunked True if chunk is specified in the clause.
1028
  ///
1029
  virtual bool isStaticNonchunked(OpenMPDistScheduleClauseKind ScheduleKind,
1030
                                  bool Chunked) const;
1031
1032
  /// Check if the specified \a ScheduleKind is static chunked.
1033
  /// \param ScheduleKind Schedule kind specified in the 'schedule' clause.
1034
  /// \param Chunked True if chunk is specified in the clause.
1035
  ///
1036
  virtual bool isStaticChunked(OpenMPScheduleClauseKind ScheduleKind,
1037
                               bool Chunked) const;
1038
1039
  /// Check if the specified \a ScheduleKind is static non-chunked.
1040
  /// \param ScheduleKind Schedule kind specified in the 'dist_schedule' clause.
1041
  /// \param Chunked True if chunk is specified in the clause.
1042
  ///
1043
  virtual bool isStaticChunked(OpenMPDistScheduleClauseKind ScheduleKind,
1044
                               bool Chunked) const;
1045
1046
  /// Check if the specified \a ScheduleKind is dynamic.
1047
  /// This kind of worksharing directive is emitted without outer loop.
1048
  /// \param ScheduleKind Schedule Kind specified in the 'schedule' clause.
1049
  ///
1050
  virtual bool isDynamic(OpenMPScheduleClauseKind ScheduleKind) const;
1051
1052
  /// struct with the values to be passed to the dispatch runtime function
1053
  struct DispatchRTInput {
1054
    /// Loop lower bound
1055
    llvm::Value *LB = nullptr;
1056
    /// Loop upper bound
1057
    llvm::Value *UB = nullptr;
1058
    /// Chunk size specified using 'schedule' clause (nullptr if chunk
1059
    /// was not specified)
1060
    llvm::Value *Chunk = nullptr;
1061
    DispatchRTInput() = default;
1062
    DispatchRTInput(llvm::Value *LB, llvm::Value *UB, llvm::Value *Chunk)
1063
618
        : LB(LB), UB(UB), Chunk(Chunk) {}
1064
  };
1065
1066
  /// Call the appropriate runtime routine to initialize it before start
1067
  /// of loop.
1068
1069
  /// This is used for non static scheduled types and when the ordered
1070
  /// clause is present on the loop construct.
1071
  /// Depending on the loop schedule, it is necessary to call some runtime
1072
  /// routine before start of the OpenMP loop to get the loop upper / lower
1073
  /// bounds \a LB and \a UB and stride \a ST.
1074
  ///
1075
  /// \param CGF Reference to current CodeGenFunction.
1076
  /// \param Loc Clang source location.
1077
  /// \param ScheduleKind Schedule kind, specified by the 'schedule' clause.
1078
  /// \param IVSize Size of the iteration variable in bits.
1079
  /// \param IVSigned Sign of the iteration variable.
1080
  /// \param Ordered true if loop is ordered, false otherwise.
1081
  /// \param DispatchValues struct containing llvm values for lower bound, upper
1082
  /// bound, and chunk expression.
1083
  /// For the default (nullptr) value, the chunk 1 will be used.
1084
  ///
1085
  virtual void emitForDispatchInit(CodeGenFunction &CGF, SourceLocation Loc,
1086
                                   const OpenMPScheduleTy &ScheduleKind,
1087
                                   unsigned IVSize, bool IVSigned, bool Ordered,
1088
                                   const DispatchRTInput &DispatchValues);
1089
1090
  /// Struct with the values to be passed to the static runtime function
1091
  struct StaticRTInput {
1092
    /// Size of the iteration variable in bits.
1093
    unsigned IVSize = 0;
1094
    /// Sign of the iteration variable.
1095
    bool IVSigned = false;
1096
    /// true if loop is ordered, false otherwise.
1097
    bool Ordered = false;
1098
    /// Address of the output variable in which the flag of the last iteration
1099
    /// is returned.
1100
    Address IL = Address::invalid();
1101
    /// Address of the output variable in which the lower iteration number is
1102
    /// returned.
1103
    Address LB = Address::invalid();
1104
    /// Address of the output variable in which the upper iteration number is
1105
    /// returned.
1106
    Address UB = Address::invalid();
1107
    /// Address of the output variable in which the stride value is returned
1108
    /// necessary to generated the static_chunked scheduled loop.
1109
    Address ST = Address::invalid();
1110
    /// Value of the chunk for the static_chunked scheduled loop. For the
1111
    /// default (nullptr) value, the chunk 1 will be used.
1112
    llvm::Value *Chunk = nullptr;
1113
    StaticRTInput(unsigned IVSize, bool IVSigned, bool Ordered, Address IL,
1114
                  Address LB, Address UB, Address ST,
1115
                  llvm::Value *Chunk = nullptr)
1116
        : IVSize(IVSize), IVSigned(IVSigned), Ordered(Ordered), IL(IL), LB(LB),
1117
5.90k
          UB(UB), ST(ST), Chunk(Chunk) {}
1118
  };
1119
  /// Call the appropriate runtime routine to initialize it before start
1120
  /// of loop.
1121
  ///
1122
  /// This is used only in case of static schedule, when the user did not
1123
  /// specify a ordered clause on the loop construct.
1124
  /// Depending on the loop schedule, it is necessary to call some runtime
1125
  /// routine before start of the OpenMP loop to get the loop upper / lower
1126
  /// bounds LB and UB and stride ST.
1127
  ///
1128
  /// \param CGF Reference to current CodeGenFunction.
1129
  /// \param Loc Clang source location.
1130
  /// \param DKind Kind of the directive.
1131
  /// \param ScheduleKind Schedule kind, specified by the 'schedule' clause.
1132
  /// \param Values Input arguments for the construct.
1133
  ///
1134
  virtual void emitForStaticInit(CodeGenFunction &CGF, SourceLocation Loc,
1135
                                 OpenMPDirectiveKind DKind,
1136
                                 const OpenMPScheduleTy &ScheduleKind,
1137
                                 const StaticRTInput &Values);
1138
1139
  ///
1140
  /// \param CGF Reference to current CodeGenFunction.
1141
  /// \param Loc Clang source location.
1142
  /// \param SchedKind Schedule kind, specified by the 'dist_schedule' clause.
1143
  /// \param Values Input arguments for the construct.
1144
  ///
1145
  virtual void emitDistributeStaticInit(CodeGenFunction &CGF,
1146
                                        SourceLocation Loc,
1147
                                        OpenMPDistScheduleClauseKind SchedKind,
1148
                                        const StaticRTInput &Values);
1149
1150
  /// Call the appropriate runtime routine to notify that we finished
1151
  /// iteration of the ordered loop with the dynamic scheduling.
1152
  ///
1153
  /// \param CGF Reference to current CodeGenFunction.
1154
  /// \param Loc Clang source location.
1155
  /// \param IVSize Size of the iteration variable in bits.
1156
  /// \param IVSigned Sign of the iteration variable.
1157
  ///
1158
  virtual void emitForOrderedIterationEnd(CodeGenFunction &CGF,
1159
                                          SourceLocation Loc, unsigned IVSize,
1160
                                          bool IVSigned);
1161
1162
  /// Call the appropriate runtime routine to notify that we finished
1163
  /// all the work with current loop.
1164
  ///
1165
  /// \param CGF Reference to current CodeGenFunction.
1166
  /// \param Loc Clang source location.
1167
  /// \param DKind Kind of the directive for which the static finish is emitted.
1168
  ///
1169
  virtual void emitForStaticFinish(CodeGenFunction &CGF, SourceLocation Loc,
1170
                                   OpenMPDirectiveKind DKind);
1171
1172
  /// Call __kmpc_dispatch_next(
1173
  ///          ident_t *loc, kmp_int32 tid, kmp_int32 *p_lastiter,
1174
  ///          kmp_int[32|64] *p_lower, kmp_int[32|64] *p_upper,
1175
  ///          kmp_int[32|64] *p_stride);
1176
  /// \param IVSize Size of the iteration variable in bits.
1177
  /// \param IVSigned Sign of the iteration variable.
1178
  /// \param IL Address of the output variable in which the flag of the
1179
  /// last iteration is returned.
1180
  /// \param LB Address of the output variable in which the lower iteration
1181
  /// number is returned.
1182
  /// \param UB Address of the output variable in which the upper iteration
1183
  /// number is returned.
1184
  /// \param ST Address of the output variable in which the stride value is
1185
  /// returned.
1186
  virtual llvm::Value *emitForNext(CodeGenFunction &CGF, SourceLocation Loc,
1187
                                   unsigned IVSize, bool IVSigned,
1188
                                   Address IL, Address LB,
1189
                                   Address UB, Address ST);
1190
1191
  /// Emits call to void __kmpc_push_num_threads(ident_t *loc, kmp_int32
1192
  /// global_tid, kmp_int32 num_threads) to generate code for 'num_threads'
1193
  /// clause.
1194
  /// \param NumThreads An integer value of threads.
1195
  virtual void emitNumThreadsClause(CodeGenFunction &CGF,
1196
                                    llvm::Value *NumThreads,
1197
                                    SourceLocation Loc);
1198
1199
  /// Emit call to void __kmpc_push_proc_bind(ident_t *loc, kmp_int32
1200
  /// global_tid, int proc_bind) to generate code for 'proc_bind' clause.
1201
  virtual void emitProcBindClause(CodeGenFunction &CGF,
1202
                                  llvm::omp::ProcBindKind ProcBind,
1203
                                  SourceLocation Loc);
1204
1205
  /// Returns address of the threadprivate variable for the current
1206
  /// thread.
1207
  /// \param VD Threadprivate variable.
1208
  /// \param VDAddr Address of the global variable \a VD.
1209
  /// \param Loc Location of the reference to threadprivate var.
1210
  /// \return Address of the threadprivate variable for the current thread.
1211
  virtual Address getAddrOfThreadPrivate(CodeGenFunction &CGF,
1212
                                         const VarDecl *VD,
1213
                                         Address VDAddr,
1214
                                         SourceLocation Loc);
1215
1216
  /// Returns the address of the variable marked as declare target with link
1217
  /// clause OR as declare target with to clause and unified memory.
1218
  virtual Address getAddrOfDeclareTargetVar(const VarDecl *VD);
1219
1220
  /// Emit a code for initialization of threadprivate variable. It emits
1221
  /// a call to runtime library which adds initial value to the newly created
1222
  /// threadprivate variable (if it is not constant) and registers destructor
1223
  /// for the variable (if any).
1224
  /// \param VD Threadprivate variable.
1225
  /// \param VDAddr Address of the global variable \a VD.
1226
  /// \param Loc Location of threadprivate declaration.
1227
  /// \param PerformInit true if initialization expression is not constant.
1228
  virtual llvm::Function *
1229
  emitThreadPrivateVarDefinition(const VarDecl *VD, Address VDAddr,
1230
                                 SourceLocation Loc, bool PerformInit,
1231
                                 CodeGenFunction *CGF = nullptr);
1232
1233
  /// Emit a code for initialization of declare target variable.
1234
  /// \param VD Declare target variable.
1235
  /// \param Addr Address of the global variable \a VD.
1236
  /// \param PerformInit true if initialization expression is not constant.
1237
  virtual bool emitDeclareTargetVarDefinition(const VarDecl *VD,
1238
                                              llvm::GlobalVariable *Addr,
1239
                                              bool PerformInit);
1240
1241
  /// Creates artificial threadprivate variable with name \p Name and type \p
1242
  /// VarType.
1243
  /// \param VarType Type of the artificial threadprivate variable.
1244
  /// \param Name Name of the artificial threadprivate variable.
1245
  virtual Address getAddrOfArtificialThreadPrivate(CodeGenFunction &CGF,
1246
                                                   QualType VarType,
1247
                                                   StringRef Name);
1248
1249
  /// Emit flush of the variables specified in 'omp flush' directive.
1250
  /// \param Vars List of variables to flush.
1251
  virtual void emitFlush(CodeGenFunction &CGF, ArrayRef<const Expr *> Vars,
1252
                         SourceLocation Loc, llvm::AtomicOrdering AO);
1253
1254
  /// Emit task region for the task directive. The task region is
1255
  /// emitted in several steps:
1256
  /// 1. Emit a call to kmp_task_t *__kmpc_omp_task_alloc(ident_t *, kmp_int32
1257
  /// gtid, kmp_int32 flags, size_t sizeof_kmp_task_t, size_t sizeof_shareds,
1258
  /// kmp_routine_entry_t *task_entry). Here task_entry is a pointer to the
1259
  /// function:
1260
  /// kmp_int32 .omp_task_entry.(kmp_int32 gtid, kmp_task_t *tt) {
1261
  ///   TaskFunction(gtid, tt->part_id, tt->shareds);
1262
  ///   return 0;
1263
  /// }
1264
  /// 2. Copy a list of shared variables to field shareds of the resulting
1265
  /// structure kmp_task_t returned by the previous call (if any).
1266
  /// 3. Copy a pointer to destructions function to field destructions of the
1267
  /// resulting structure kmp_task_t.
1268
  /// 4. Emit a call to kmp_int32 __kmpc_omp_task(ident_t *, kmp_int32 gtid,
1269
  /// kmp_task_t *new_task), where new_task is a resulting structure from
1270
  /// previous items.
1271
  /// \param D Current task directive.
1272
  /// \param TaskFunction An LLVM function with type void (*)(i32 /*gtid*/, i32
1273
  /// /*part_id*/, captured_struct */*__context*/);
1274
  /// \param SharedsTy A type which contains references the shared variables.
1275
  /// \param Shareds Context with the list of shared variables from the \p
1276
  /// TaskFunction.
1277
  /// \param IfCond Not a nullptr if 'if' clause was specified, nullptr
1278
  /// otherwise.
1279
  /// \param Data Additional data for task generation like tiednsee, final
1280
  /// state, list of privates etc.
1281
  virtual void emitTaskCall(CodeGenFunction &CGF, SourceLocation Loc,
1282
                            const OMPExecutableDirective &D,
1283
                            llvm::Function *TaskFunction, QualType SharedsTy,
1284
                            Address Shareds, const Expr *IfCond,
1285
                            const OMPTaskDataTy &Data);
1286
1287
  /// Emit task region for the taskloop directive. The taskloop region is
1288
  /// emitted in several steps:
1289
  /// 1. Emit a call to kmp_task_t *__kmpc_omp_task_alloc(ident_t *, kmp_int32
1290
  /// gtid, kmp_int32 flags, size_t sizeof_kmp_task_t, size_t sizeof_shareds,
1291
  /// kmp_routine_entry_t *task_entry). Here task_entry is a pointer to the
1292
  /// function:
1293
  /// kmp_int32 .omp_task_entry.(kmp_int32 gtid, kmp_task_t *tt) {
1294
  ///   TaskFunction(gtid, tt->part_id, tt->shareds);
1295
  ///   return 0;
1296
  /// }
1297
  /// 2. Copy a list of shared variables to field shareds of the resulting
1298
  /// structure kmp_task_t returned by the previous call (if any).
1299
  /// 3. Copy a pointer to destructions function to field destructions of the
1300
  /// resulting structure kmp_task_t.
1301
  /// 4. Emit a call to void __kmpc_taskloop(ident_t *loc, int gtid, kmp_task_t
1302
  /// *task, int if_val, kmp_uint64 *lb, kmp_uint64 *ub, kmp_int64 st, int
1303
  /// nogroup, int sched, kmp_uint64 grainsize, void *task_dup ), where new_task
1304
  /// is a resulting structure from
1305
  /// previous items.
1306
  /// \param D Current task directive.
1307
  /// \param TaskFunction An LLVM function with type void (*)(i32 /*gtid*/, i32
1308
  /// /*part_id*/, captured_struct */*__context*/);
1309
  /// \param SharedsTy A type which contains references the shared variables.
1310
  /// \param Shareds Context with the list of shared variables from the \p
1311
  /// TaskFunction.
1312
  /// \param IfCond Not a nullptr if 'if' clause was specified, nullptr
1313
  /// otherwise.
1314
  /// \param Data Additional data for task generation like tiednsee, final
1315
  /// state, list of privates etc.
1316
  virtual void emitTaskLoopCall(CodeGenFunction &CGF, SourceLocation Loc,
1317
                                const OMPLoopDirective &D,
1318
                                llvm::Function *TaskFunction,
1319
                                QualType SharedsTy, Address Shareds,
1320
                                const Expr *IfCond, const OMPTaskDataTy &Data);
1321
1322
  /// Emit code for the directive that does not require outlining.
1323
  ///
1324
  /// \param InnermostKind Kind of innermost directive (for simple directives it
1325
  /// is a directive itself, for combined - its innermost directive).
1326
  /// \param CodeGen Code generation sequence for the \a D directive.
1327
  /// \param HasCancel true if region has inner cancel directive, false
1328
  /// otherwise.
1329
  virtual void emitInlinedDirective(CodeGenFunction &CGF,
1330
                                    OpenMPDirectiveKind InnermostKind,
1331
                                    const RegionCodeGenTy &CodeGen,
1332
                                    bool HasCancel = false);
1333
1334
  /// Emits reduction function.
1335
  /// \param ArgsType Array type containing pointers to reduction variables.
1336
  /// \param Privates List of private copies for original reduction arguments.
1337
  /// \param LHSExprs List of LHS in \a ReductionOps reduction operations.
1338
  /// \param RHSExprs List of RHS in \a ReductionOps reduction operations.
1339
  /// \param ReductionOps List of reduction operations in form 'LHS binop RHS'
1340
  /// or 'operator binop(LHS, RHS)'.
1341
  llvm::Function *emitReductionFunction(SourceLocation Loc,
1342
                                        llvm::Type *ArgsType,
1343
                                        ArrayRef<const Expr *> Privates,
1344
                                        ArrayRef<const Expr *> LHSExprs,
1345
                                        ArrayRef<const Expr *> RHSExprs,
1346
                                        ArrayRef<const Expr *> ReductionOps);
1347
1348
  /// Emits single reduction combiner
1349
  void emitSingleReductionCombiner(CodeGenFunction &CGF,
1350
                                   const Expr *ReductionOp,
1351
                                   const Expr *PrivateRef,
1352
                                   const DeclRefExpr *LHS,
1353
                                   const DeclRefExpr *RHS);
1354
1355
  struct ReductionOptionsTy {
1356
    bool WithNowait;
1357
    bool SimpleReduction;
1358
    OpenMPDirectiveKind ReductionKind;
1359
  };
1360
  /// Emit a code for reduction clause. Next code should be emitted for
1361
  /// reduction:
1362
  /// \code
1363
  ///
1364
  /// static kmp_critical_name lock = { 0 };
1365
  ///
1366
  /// void reduce_func(void *lhs[<n>], void *rhs[<n>]) {
1367
  ///  ...
1368
  ///  *(Type<i>*)lhs[i] = RedOp<i>(*(Type<i>*)lhs[i], *(Type<i>*)rhs[i]);
1369
  ///  ...
1370
  /// }
1371
  ///
1372
  /// ...
1373
  /// void *RedList[<n>] = {&<RHSExprs>[0], ..., &<RHSExprs>[<n>-1]};
1374
  /// switch (__kmpc_reduce{_nowait}(<loc>, <gtid>, <n>, sizeof(RedList),
1375
  /// RedList, reduce_func, &<lock>)) {
1376
  /// case 1:
1377
  ///  ...
1378
  ///  <LHSExprs>[i] = RedOp<i>(*<LHSExprs>[i], *<RHSExprs>[i]);
1379
  ///  ...
1380
  /// __kmpc_end_reduce{_nowait}(<loc>, <gtid>, &<lock>);
1381
  /// break;
1382
  /// case 2:
1383
  ///  ...
1384
  ///  Atomic(<LHSExprs>[i] = RedOp<i>(*<LHSExprs>[i], *<RHSExprs>[i]));
1385
  ///  ...
1386
  /// break;
1387
  /// default:;
1388
  /// }
1389
  /// \endcode
1390
  ///
1391
  /// \param Privates List of private copies for original reduction arguments.
1392
  /// \param LHSExprs List of LHS in \a ReductionOps reduction operations.
1393
  /// \param RHSExprs List of RHS in \a ReductionOps reduction operations.
1394
  /// \param ReductionOps List of reduction operations in form 'LHS binop RHS'
1395
  /// or 'operator binop(LHS, RHS)'.
1396
  /// \param Options List of options for reduction codegen:
1397
  ///     WithNowait true if parent directive has also nowait clause, false
1398
  ///     otherwise.
1399
  ///     SimpleReduction Emit reduction operation only. Used for omp simd
1400
  ///     directive on the host.
1401
  ///     ReductionKind The kind of reduction to perform.
1402
  virtual void emitReduction(CodeGenFunction &CGF, SourceLocation Loc,
1403
                             ArrayRef<const Expr *> Privates,
1404
                             ArrayRef<const Expr *> LHSExprs,
1405
                             ArrayRef<const Expr *> RHSExprs,
1406
                             ArrayRef<const Expr *> ReductionOps,
1407
                             ReductionOptionsTy Options);
1408
1409
  /// Emit a code for initialization of task reduction clause. Next code
1410
  /// should be emitted for reduction:
1411
  /// \code
1412
  ///
1413
  /// _task_red_item_t red_data[n];
1414
  /// ...
1415
  /// red_data[i].shar = &origs[i];
1416
  /// red_data[i].size = sizeof(origs[i]);
1417
  /// red_data[i].f_init = (void*)RedInit<i>;
1418
  /// red_data[i].f_fini = (void*)RedDest<i>;
1419
  /// red_data[i].f_comb = (void*)RedOp<i>;
1420
  /// red_data[i].flags = <Flag_i>;
1421
  /// ...
1422
  /// void* tg1 = __kmpc_task_reduction_init(gtid, n, red_data);
1423
  /// \endcode
1424
  ///
1425
  /// \param LHSExprs List of LHS in \a Data.ReductionOps reduction operations.
1426
  /// \param RHSExprs List of RHS in \a Data.ReductionOps reduction operations.
1427
  /// \param Data Additional data for task generation like tiedness, final
1428
  /// state, list of privates, reductions etc.
1429
  virtual llvm::Value *emitTaskReductionInit(CodeGenFunction &CGF,
1430
                                             SourceLocation Loc,
1431
                                             ArrayRef<const Expr *> LHSExprs,
1432
                                             ArrayRef<const Expr *> RHSExprs,
1433
                                             const OMPTaskDataTy &Data);
1434
1435
  /// Required to resolve existing problems in the runtime. Emits threadprivate
1436
  /// variables to store the size of the VLAs/array sections for
1437
  /// initializer/combiner/finalizer functions + emits threadprivate variable to
1438
  /// store the pointer to the original reduction item for the custom
1439
  /// initializer defined by declare reduction construct.
1440
  /// \param RCG Allows to reuse an existing data for the reductions.
1441
  /// \param N Reduction item for which fixups must be emitted.
1442
  virtual void emitTaskReductionFixups(CodeGenFunction &CGF, SourceLocation Loc,
1443
                                       ReductionCodeGen &RCG, unsigned N);
1444
1445
  /// Get the address of `void *` type of the privatue copy of the reduction
1446
  /// item specified by the \p SharedLVal.
1447
  /// \param ReductionsPtr Pointer to the reduction data returned by the
1448
  /// emitTaskReductionInit function.
1449
  /// \param SharedLVal Address of the original reduction item.
1450
  virtual Address getTaskReductionItem(CodeGenFunction &CGF, SourceLocation Loc,
1451
                                       llvm::Value *ReductionsPtr,
1452
                                       LValue SharedLVal);
1453
1454
  /// Emit code for 'taskwait' directive.
1455
  virtual void emitTaskwaitCall(CodeGenFunction &CGF, SourceLocation Loc);
1456
1457
  /// Emit code for 'cancellation point' construct.
1458
  /// \param CancelRegion Region kind for which the cancellation point must be
1459
  /// emitted.
1460
  ///
1461
  virtual void emitCancellationPointCall(CodeGenFunction &CGF,
1462
                                         SourceLocation Loc,
1463
                                         OpenMPDirectiveKind CancelRegion);
1464
1465
  /// Emit code for 'cancel' construct.
1466
  /// \param IfCond Condition in the associated 'if' clause, if it was
1467
  /// specified, nullptr otherwise.
1468
  /// \param CancelRegion Region kind for which the cancel must be emitted.
1469
  ///
1470
  virtual void emitCancelCall(CodeGenFunction &CGF, SourceLocation Loc,
1471
                              const Expr *IfCond,
1472
                              OpenMPDirectiveKind CancelRegion);
1473
1474
  /// Emit outilined function for 'target' directive.
1475
  /// \param D Directive to emit.
1476
  /// \param ParentName Name of the function that encloses the target region.
1477
  /// \param OutlinedFn Outlined function value to be defined by this call.
1478
  /// \param OutlinedFnID Outlined function ID value to be defined by this call.
1479
  /// \param IsOffloadEntry True if the outlined function is an offload entry.
1480
  /// \param CodeGen Code generation sequence for the \a D directive.
1481
  /// An outlined function may not be an entry if, e.g. the if clause always
1482
  /// evaluates to false.
1483
  virtual void emitTargetOutlinedFunction(const OMPExecutableDirective &D,
1484
                                          StringRef ParentName,
1485
                                          llvm::Function *&OutlinedFn,
1486
                                          llvm::Constant *&OutlinedFnID,
1487
                                          bool IsOffloadEntry,
1488
                                          const RegionCodeGenTy &CodeGen);
1489
1490
  /// Emit the target offloading code associated with \a D. The emitted
1491
  /// code attempts offloading the execution to the device, an the event of
1492
  /// a failure it executes the host version outlined in \a OutlinedFn.
1493
  /// \param D Directive to emit.
1494
  /// \param OutlinedFn Host version of the code to be offloaded.
1495
  /// \param OutlinedFnID ID of host version of the code to be offloaded.
1496
  /// \param IfCond Expression evaluated in if clause associated with the target
1497
  /// directive, or null if no if clause is used.
1498
  /// \param Device Expression evaluated in device clause associated with the
1499
  /// target directive, or null if no device clause is used.
1500
  /// \param SizeEmitter Callback to emit number of iterations for loop-based
1501
  /// directives.
1502
  virtual void
1503
  emitTargetCall(CodeGenFunction &CGF, const OMPExecutableDirective &D,
1504
                 llvm::Function *OutlinedFn, llvm::Value *OutlinedFnID,
1505
                 const Expr *IfCond, const Expr *Device,
1506
                 llvm::function_ref<llvm::Value *(CodeGenFunction &CGF,
1507
                                                  const OMPLoopDirective &D)>
1508
                     SizeEmitter);
1509
1510
  /// Emit the target regions enclosed in \a GD function definition or
1511
  /// the function itself in case it is a valid device function. Returns true if
1512
  /// \a GD was dealt with successfully.
1513
  /// \param GD Function to scan.
1514
  virtual bool emitTargetFunctions(GlobalDecl GD);
1515
1516
  /// Emit the global variable if it is a valid device global variable.
1517
  /// Returns true if \a GD was dealt with successfully.
1518
  /// \param GD Variable declaration to emit.
1519
  virtual bool emitTargetGlobalVariable(GlobalDecl GD);
1520
1521
  /// Checks if the provided global decl \a GD is a declare target variable and
1522
  /// registers it when emitting code for the host.
1523
  virtual void registerTargetGlobalVariable(const VarDecl *VD,
1524
                                            llvm::Constant *Addr);
1525
1526
  /// Registers provided target firstprivate variable as global on the
1527
  /// target.
1528
  llvm::Constant *registerTargetFirstprivateCopy(CodeGenFunction &CGF,
1529
                                                 const VarDecl *VD);
1530
1531
  /// Emit the global \a GD if it is meaningful for the target. Returns
1532
  /// if it was emitted successfully.
1533
  /// \param GD Global to scan.
1534
  virtual bool emitTargetGlobal(GlobalDecl GD);
1535
1536
  /// Creates and returns a registration function for when at least one
1537
  /// requires directives was used in the current module.
1538
  llvm::Function *emitRequiresDirectiveRegFun();
1539
1540
  /// Creates all the offload entries in the current compilation unit
1541
  /// along with the associated metadata.
1542
  void createOffloadEntriesAndInfoMetadata();
1543
1544
  /// Emits code for teams call of the \a OutlinedFn with
1545
  /// variables captured in a record which address is stored in \a
1546
  /// CapturedStruct.
1547
  /// \param OutlinedFn Outlined function to be run by team masters. Type of
1548
  /// this function is void(*)(kmp_int32 *, kmp_int32, struct context_vars*).
1549
  /// \param CapturedVars A pointer to the record with the references to
1550
  /// variables used in \a OutlinedFn function.
1551
  ///
1552
  virtual void emitTeamsCall(CodeGenFunction &CGF,
1553
                             const OMPExecutableDirective &D,
1554
                             SourceLocation Loc, llvm::Function *OutlinedFn,
1555
                             ArrayRef<llvm::Value *> CapturedVars);
1556
1557
  /// Emits call to void __kmpc_push_num_teams(ident_t *loc, kmp_int32
1558
  /// global_tid, kmp_int32 num_teams, kmp_int32 thread_limit) to generate code
1559
  /// for num_teams clause.
1560
  /// \param NumTeams An integer expression of teams.
1561
  /// \param ThreadLimit An integer expression of threads.
1562
  virtual void emitNumTeamsClause(CodeGenFunction &CGF, const Expr *NumTeams,
1563
                                  const Expr *ThreadLimit, SourceLocation Loc);
1564
1565
  /// Struct that keeps all the relevant information that should be kept
1566
  /// throughout a 'target data' region.
1567
  class TargetDataInfo {
1568
    /// Set to true if device pointer information have to be obtained.
1569
    bool RequiresDevicePointerInfo = false;
1570
1571
  public:
1572
    /// The array of base pointer passed to the runtime library.
1573
    llvm::Value *BasePointersArray = nullptr;
1574
    /// The array of section pointers passed to the runtime library.
1575
    llvm::Value *PointersArray = nullptr;
1576
    /// The array of sizes passed to the runtime library.
1577
    llvm::Value *SizesArray = nullptr;
1578
    /// The array of map types passed to the runtime library.
1579
    llvm::Value *MapTypesArray = nullptr;
1580
    /// The total number of pointers passed to the runtime library.
1581
    unsigned NumberOfPtrs = 0u;
1582
    /// Map between the a declaration of a capture and the corresponding base
1583
    /// pointer address where the runtime returns the device pointers.
1584
    llvm::DenseMap<const ValueDecl *, Address> CaptureDeviceAddrMap;
1585
1586
4.90k
    explicit TargetDataInfo() {}
1587
    explicit TargetDataInfo(bool RequiresDevicePointerInfo)
1588
115
        : RequiresDevicePointerInfo(RequiresDevicePointerInfo) {}
1589
    /// Clear information about the data arrays.
1590
5.00k
    void clearArrayInfo() {
1591
5.00k
      BasePointersArray = nullptr;
1592
5.00k
      PointersArray = nullptr;
1593
5.00k
      SizesArray = nullptr;
1594
5.00k
      MapTypesArray = nullptr;
1595
5.00k
      NumberOfPtrs = 0u;
1596
5.00k
    }
1597
    /// Return true if the current target data information has valid arrays.
1598
104
    bool isValid() {
1599
104
      return BasePointersArray && PointersArray && SizesArray &&
1600
104
             MapTypesArray && NumberOfPtrs;
1601
104
    }
1602
9.89k
    bool requiresDevicePointerInfo() { return RequiresDevicePointerInfo; }
1603
  };
1604
1605
  /// Emit the target data mapping code associated with \a D.
1606
  /// \param D Directive to emit.
1607
  /// \param IfCond Expression evaluated in if clause associated with the
1608
  /// target directive, or null if no device clause is used.
1609
  /// \param Device Expression evaluated in device clause associated with the
1610
  /// target directive, or null if no device clause is used.
1611
  /// \param Info A record used to store information that needs to be preserved
1612
  /// until the region is closed.
1613
  virtual void emitTargetDataCalls(CodeGenFunction &CGF,
1614
                                   const OMPExecutableDirective &D,
1615
                                   const Expr *IfCond, const Expr *Device,
1616
                                   const RegionCodeGenTy &CodeGen,
1617
                                   TargetDataInfo &Info);
1618
1619
  /// Emit the data mapping/movement code associated with the directive
1620
  /// \a D that should be of the form 'target [{enter|exit} data | update]'.
1621
  /// \param D Directive to emit.
1622
  /// \param IfCond Expression evaluated in if clause associated with the target
1623
  /// directive, or null if no if clause is used.
1624
  /// \param Device Expression evaluated in device clause associated with the
1625
  /// target directive, or null if no device clause is used.
1626
  virtual void emitTargetDataStandAloneCall(CodeGenFunction &CGF,
1627
                                            const OMPExecutableDirective &D,
1628
                                            const Expr *IfCond,
1629
                                            const Expr *Device);
1630
1631
  /// Marks function \a Fn with properly mangled versions of vector functions.
1632
  /// \param FD Function marked as 'declare simd'.
1633
  /// \param Fn LLVM function that must be marked with 'declare simd'
1634
  /// attributes.
1635
  virtual void emitDeclareSimdFunction(const FunctionDecl *FD,
1636
                                       llvm::Function *Fn);
1637
1638
  /// Emit initialization for doacross loop nesting support.
1639
  /// \param D Loop-based construct used in doacross nesting construct.
1640
  virtual void emitDoacrossInit(CodeGenFunction &CGF, const OMPLoopDirective &D,
1641
                                ArrayRef<Expr *> NumIterations);
1642
1643
  /// Emit code for doacross ordered directive with 'depend' clause.
1644
  /// \param C 'depend' clause with 'sink|source' dependency kind.
1645
  virtual void emitDoacrossOrdered(CodeGenFunction &CGF,
1646
                                   const OMPDependClause *C);
1647
1648
  /// Translates the native parameter of outlined function if this is required
1649
  /// for target.
1650
  /// \param FD Field decl from captured record for the parameter.
1651
  /// \param NativeParam Parameter itself.
1652
  virtual const VarDecl *translateParameter(const FieldDecl *FD,
1653
98
                                            const VarDecl *NativeParam) const {
1654
98
    return NativeParam;
1655
98
  }
1656
1657
  /// Gets the address of the native argument basing on the address of the
1658
  /// target-specific parameter.
1659
  /// \param NativeParam Parameter itself.
1660
  /// \param TargetParam Corresponding target-specific parameter.
1661
  virtual Address getParameterAddress(CodeGenFunction &CGF,
1662
                                      const VarDecl *NativeParam,
1663
                                      const VarDecl *TargetParam) const;
1664
1665
  /// Choose default schedule type and chunk value for the
1666
  /// dist_schedule clause.
1667
  virtual void getDefaultDistScheduleAndChunk(CodeGenFunction &CGF,
1668
      const OMPLoopDirective &S, OpenMPDistScheduleClauseKind &ScheduleKind,
1669
2.51k
      llvm::Value *&Chunk) const {}
1670
1671
  /// Choose default schedule type and chunk value for the
1672
  /// schedule clause.
1673
  virtual void getDefaultScheduleAndChunk(CodeGenFunction &CGF,
1674
      const OMPLoopDirective &S, OpenMPScheduleClauseKind &ScheduleKind,
1675
      const Expr *&ChunkExpr) const;
1676
1677
  /// Emits call of the outlined function with the provided arguments,
1678
  /// translating these arguments to correct target-specific arguments.
1679
  virtual void
1680
  emitOutlinedFunctionCall(CodeGenFunction &CGF, SourceLocation Loc,
1681
                           llvm::FunctionCallee OutlinedFn,
1682
                           ArrayRef<llvm::Value *> Args = llvm::None) const;
1683
1684
  /// Emits OpenMP-specific function prolog.
1685
  /// Required for device constructs.
1686
  virtual void emitFunctionProlog(CodeGenFunction &CGF, const Decl *D);
1687
1688
  /// Gets the OpenMP-specific address of the local variable.
1689
  virtual Address getAddressOfLocalVariable(CodeGenFunction &CGF,
1690
                                            const VarDecl *VD);
1691
1692
  /// Marks the declaration as already emitted for the device code and returns
1693
  /// true, if it was marked already, and false, otherwise.
1694
  bool markAsGlobalTarget(GlobalDecl GD);
1695
1696
  /// Emit deferred declare target variables marked for deferred emission.
1697
  void emitDeferredTargetDecls() const;
1698
1699
  /// Adjust some parameters for the target-based directives, like addresses of
1700
  /// the variables captured by reference in lambdas.
1701
  virtual void
1702
  adjustTargetSpecificDataForLambdas(CodeGenFunction &CGF,
1703
                                     const OMPExecutableDirective &D) const;
1704
1705
  /// Perform check on requires decl to ensure that target architecture
1706
  /// supports unified addressing
1707
  virtual void processRequiresDirective(const OMPRequiresDecl *D);
1708
1709
  /// Gets default memory ordering as specified in requires directive.
1710
  llvm::AtomicOrdering getDefaultMemoryOrdering() const;
1711
1712
  /// Checks if the variable has associated OMPAllocateDeclAttr attribute with
1713
  /// the predefined allocator and translates it into the corresponding address
1714
  /// space.
1715
  virtual bool hasAllocateAttributeForGlobalVar(const VarDecl *VD, LangAS &AS);
1716
1717
  /// Return whether the unified_shared_memory has been specified.
1718
  bool hasRequiresUnifiedSharedMemory() const;
1719
1720
  /// Emits the definition of the declare variant function.
1721
  virtual bool emitDeclareVariant(GlobalDecl GD, bool IsForDefinition);
1722
1723
  /// Checks if the \p VD variable is marked as nontemporal declaration in
1724
  /// current context.
1725
  bool isNontemporalDecl(const ValueDecl *VD) const;
1726
1727
  /// Create specialized alloca to handle lastprivate conditionals.
1728
  Address emitLastprivateConditionalInit(CodeGenFunction &CGF,
1729
                                         const VarDecl *VD);
1730
1731
  /// Checks if the provided \p LVal is lastprivate conditional and emits the
1732
  /// code to update the value of the original variable.
1733
  /// \code
1734
  /// lastprivate(conditional: a)
1735
  /// ...
1736
  /// <type> a;
1737
  /// lp_a = ...;
1738
  /// #pragma omp critical(a)
1739
  /// if (last_iv_a <= iv) {
1740
  ///   last_iv_a = iv;
1741
  ///   global_a = lp_a;
1742
  /// }
1743
  /// \endcode
1744
  virtual void checkAndEmitLastprivateConditional(CodeGenFunction &CGF,
1745
                                                  const Expr *LHS);
1746
1747
  /// Checks if the lastprivate conditional was updated in inner region and
1748
  /// writes the value.
1749
  /// \code
1750
  /// lastprivate(conditional: a)
1751
  /// ...
1752
  /// <type> a;bool Fired = false;
1753
  /// #pragma omp ... shared(a)
1754
  /// {
1755
  ///   lp_a = ...;
1756
  ///   Fired = true;
1757
  /// }
1758
  /// if (Fired) {
1759
  ///   #pragma omp critical(a)
1760
  ///   if (last_iv_a <= iv) {
1761
  ///     last_iv_a = iv;
1762
  ///     global_a = lp_a;
1763
  ///   }
1764
  ///   Fired = false;
1765
  /// }
1766
  /// \endcode
1767
  virtual void checkAndEmitSharedLastprivateConditional(
1768
      CodeGenFunction &CGF, const OMPExecutableDirective &D,
1769
      const llvm::DenseSet<CanonicalDeclPtr<const VarDecl>> &IgnoredDecls);
1770
1771
  /// Gets the address of the global copy used for lastprivate conditional
1772
  /// update, if any.
1773
  /// \param PrivLVal LValue for the private copy.
1774
  /// \param VD Original lastprivate declaration.
1775
  virtual void emitLastprivateConditionalFinalUpdate(CodeGenFunction &CGF,
1776
                                                     LValue PrivLVal,
1777
                                                     const VarDecl *VD,
1778
                                                     SourceLocation Loc);
1779
};
1780
1781
/// Class supports emissionof SIMD-only code.
1782
class CGOpenMPSIMDRuntime final : public CGOpenMPRuntime {
1783
public:
1784
1.96k
  explicit CGOpenMPSIMDRuntime(CodeGenModule &CGM) : CGOpenMPRuntime(CGM) {}
1785
1.96k
  ~CGOpenMPSIMDRuntime() override {}
1786
1787
  /// Emits outlined function for the specified OpenMP parallel directive
1788
  /// \a D. This outlined function has type void(*)(kmp_int32 *ThreadID,
1789
  /// kmp_int32 BoundID, struct context_vars*).
1790
  /// \param D OpenMP directive.
1791
  /// \param ThreadIDVar Variable for thread id in the current OpenMP region.
1792
  /// \param InnermostKind Kind of innermost directive (for simple directives it
1793
  /// is a directive itself, for combined - its innermost directive).
1794
  /// \param CodeGen Code generation sequence for the \a D directive.
1795
  llvm::Function *
1796
  emitParallelOutlinedFunction(const OMPExecutableDirective &D,
1797
                               const VarDecl *ThreadIDVar,
1798
                               OpenMPDirectiveKind InnermostKind,
1799
                               const RegionCodeGenTy &CodeGen) override;
1800
1801
  /// Emits outlined function for the specified OpenMP teams directive
1802
  /// \a D. This outlined function has type void(*)(kmp_int32 *ThreadID,
1803
  /// kmp_int32 BoundID, struct context_vars*).
1804
  /// \param D OpenMP directive.
1805
  /// \param ThreadIDVar Variable for thread id in the current OpenMP region.
1806
  /// \param InnermostKind Kind of innermost directive (for simple directives it
1807
  /// is a directive itself, for combined - its innermost directive).
1808
  /// \param CodeGen Code generation sequence for the \a D directive.
1809
  llvm::Function *
1810
  emitTeamsOutlinedFunction(const OMPExecutableDirective &D,
1811
                            const VarDecl *ThreadIDVar,
1812
                            OpenMPDirectiveKind InnermostKind,
1813
                            const RegionCodeGenTy &CodeGen) override;
1814
1815
  /// Emits outlined function for the OpenMP task directive \a D. This
1816
  /// outlined function has type void(*)(kmp_int32 ThreadID, struct task_t*
1817
  /// TaskT).
1818
  /// \param D OpenMP directive.
1819
  /// \param ThreadIDVar Variable for thread id in the current OpenMP region.
1820
  /// \param PartIDVar Variable for partition id in the current OpenMP untied
1821
  /// task region.
1822
  /// \param TaskTVar Variable for task_t argument.
1823
  /// \param InnermostKind Kind of innermost directive (for simple directives it
1824
  /// is a directive itself, for combined - its innermost directive).
1825
  /// \param CodeGen Code generation sequence for the \a D directive.
1826
  /// \param Tied true if task is generated for tied task, false otherwise.
1827
  /// \param NumberOfParts Number of parts in untied task. Ignored for tied
1828
  /// tasks.
1829
  ///
1830
  llvm::Function *emitTaskOutlinedFunction(
1831
      const OMPExecutableDirective &D, const VarDecl *ThreadIDVar,
1832
      const VarDecl *PartIDVar, const VarDecl *TaskTVar,
1833
      OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen,
1834
      bool Tied, unsigned &NumberOfParts) override;
1835
1836
  /// Emits code for parallel or serial call of the \a OutlinedFn with
1837
  /// variables captured in a record which address is stored in \a
1838
  /// CapturedStruct.
1839
  /// \param OutlinedFn Outlined function to be run in parallel threads. Type of
1840
  /// this function is void(*)(kmp_int32 *, kmp_int32, struct context_vars*).
1841
  /// \param CapturedVars A pointer to the record with the references to
1842
  /// variables used in \a OutlinedFn function.
1843
  /// \param IfCond Condition in the associated 'if' clause, if it was
1844
  /// specified, nullptr otherwise.
1845
  ///
1846
  void emitParallelCall(CodeGenFunction &CGF, SourceLocation Loc,
1847
                        llvm::Function *OutlinedFn,
1848
                        ArrayRef<llvm::Value *> CapturedVars,
1849
                        const Expr *IfCond) override;
1850
1851
  /// Emits a critical region.
1852
  /// \param CriticalName Name of the critical region.
1853
  /// \param CriticalOpGen Generator for the statement associated with the given
1854
  /// critical region.
1855
  /// \param Hint Value of the 'hint' clause (optional).
1856
  void emitCriticalRegion(CodeGenFunction &CGF, StringRef CriticalName,
1857
                          const RegionCodeGenTy &CriticalOpGen,
1858
                          SourceLocation Loc,
1859
                          const Expr *Hint = nullptr) override;
1860
1861
  /// Emits a master region.
1862
  /// \param MasterOpGen Generator for the statement associated with the given
1863
  /// master region.
1864
  void emitMasterRegion(CodeGenFunction &CGF,
1865
                        const RegionCodeGenTy &MasterOpGen,
1866
                        SourceLocation Loc) override;
1867
1868
  /// Emits code for a taskyield directive.
1869
  void emitTaskyieldCall(CodeGenFunction &CGF, SourceLocation Loc) override;
1870
1871
  /// Emit a taskgroup region.
1872
  /// \param TaskgroupOpGen Generator for the statement associated with the
1873
  /// given taskgroup region.
1874
  void emitTaskgroupRegion(CodeGenFunction &CGF,
1875
                           const RegionCodeGenTy &TaskgroupOpGen,
1876
                           SourceLocation Loc) override;
1877
1878
  /// Emits a single region.
1879
  /// \param SingleOpGen Generator for the statement associated with the given
1880
  /// single region.
1881
  void emitSingleRegion(CodeGenFunction &CGF,
1882
                        const RegionCodeGenTy &SingleOpGen, SourceLocation Loc,
1883
                        ArrayRef<const Expr *> CopyprivateVars,
1884
                        ArrayRef<const Expr *> DestExprs,
1885
                        ArrayRef<const Expr *> SrcExprs,
1886
                        ArrayRef<const Expr *> AssignmentOps) override;
1887
1888
  /// Emit an ordered region.
1889
  /// \param OrderedOpGen Generator for the statement associated with the given
1890
  /// ordered region.
1891
  void emitOrderedRegion(CodeGenFunction &CGF,
1892
                         const RegionCodeGenTy &OrderedOpGen,
1893
                         SourceLocation Loc, bool IsThreads) override;
1894
1895
  /// Emit an implicit/explicit barrier for OpenMP threads.
1896
  /// \param Kind Directive for which this implicit barrier call must be
1897
  /// generated. Must be OMPD_barrier for explicit barrier generation.
1898
  /// \param EmitChecks true if need to emit checks for cancellation barriers.
1899
  /// \param ForceSimpleCall true simple barrier call must be emitted, false if
1900
  /// runtime class decides which one to emit (simple or with cancellation
1901
  /// checks).
1902
  ///
1903
  void emitBarrierCall(CodeGenFunction &CGF, SourceLocation Loc,
1904
                       OpenMPDirectiveKind Kind, bool EmitChecks = true,
1905
                       bool ForceSimpleCall = false) override;
1906
1907
  /// This is used for non static scheduled types and when the ordered
1908
  /// clause is present on the loop construct.
1909
  /// Depending on the loop schedule, it is necessary to call some runtime
1910
  /// routine before start of the OpenMP loop to get the loop upper / lower
1911
  /// bounds \a LB and \a UB and stride \a ST.
1912
  ///
1913
  /// \param CGF Reference to current CodeGenFunction.
1914
  /// \param Loc Clang source location.
1915
  /// \param ScheduleKind Schedule kind, specified by the 'schedule' clause.
1916
  /// \param IVSize Size of the iteration variable in bits.
1917
  /// \param IVSigned Sign of the iteration variable.
1918
  /// \param Ordered true if loop is ordered, false otherwise.
1919
  /// \param DispatchValues struct containing llvm values for lower bound, upper
1920
  /// bound, and chunk expression.
1921
  /// For the default (nullptr) value, the chunk 1 will be used.
1922
  ///
1923
  void emitForDispatchInit(CodeGenFunction &CGF, SourceLocation Loc,
1924
                           const OpenMPScheduleTy &ScheduleKind,
1925
                           unsigned IVSize, bool IVSigned, bool Ordered,
1926
                           const DispatchRTInput &DispatchValues) override;
1927
1928
  /// Call the appropriate runtime routine to initialize it before start
1929
  /// of loop.
1930
  ///
1931
  /// This is used only in case of static schedule, when the user did not
1932
  /// specify a ordered clause on the loop construct.
1933
  /// Depending on the loop schedule, it is necessary to call some runtime
1934
  /// routine before start of the OpenMP loop to get the loop upper / lower
1935
  /// bounds LB and UB and stride ST.
1936
  ///
1937
  /// \param CGF Reference to current CodeGenFunction.
1938
  /// \param Loc Clang source location.
1939
  /// \param DKind Kind of the directive.
1940
  /// \param ScheduleKind Schedule kind, specified by the 'schedule' clause.
1941
  /// \param Values Input arguments for the construct.
1942
  ///
1943
  void emitForStaticInit(CodeGenFunction &CGF, SourceLocation Loc,
1944
                         OpenMPDirectiveKind DKind,
1945
                         const OpenMPScheduleTy &ScheduleKind,
1946
                         const StaticRTInput &Values) override;
1947
1948
  ///
1949
  /// \param CGF Reference to current CodeGenFunction.
1950
  /// \param Loc Clang source location.
1951
  /// \param SchedKind Schedule kind, specified by the 'dist_schedule' clause.
1952
  /// \param Values Input arguments for the construct.
1953
  ///
1954
  void emitDistributeStaticInit(CodeGenFunction &CGF, SourceLocation Loc,
1955
                                OpenMPDistScheduleClauseKind SchedKind,
1956
                                const StaticRTInput &Values) override;
1957
1958
  /// Call the appropriate runtime routine to notify that we finished
1959
  /// iteration of the ordered loop with the dynamic scheduling.
1960
  ///
1961
  /// \param CGF Reference to current CodeGenFunction.
1962
  /// \param Loc Clang source location.
1963
  /// \param IVSize Size of the iteration variable in bits.
1964
  /// \param IVSigned Sign of the iteration variable.
1965
  ///
1966
  void emitForOrderedIterationEnd(CodeGenFunction &CGF, SourceLocation Loc,
1967
                                  unsigned IVSize, bool IVSigned) override;
1968
1969
  /// Call the appropriate runtime routine to notify that we finished
1970
  /// all the work with current loop.
1971
  ///
1972
  /// \param CGF Reference to current CodeGenFunction.
1973
  /// \param Loc Clang source location.
1974
  /// \param DKind Kind of the directive for which the static finish is emitted.
1975
  ///
1976
  void emitForStaticFinish(CodeGenFunction &CGF, SourceLocation Loc,
1977
                           OpenMPDirectiveKind DKind) override;
1978
1979
  /// Call __kmpc_dispatch_next(
1980
  ///          ident_t *loc, kmp_int32 tid, kmp_int32 *p_lastiter,
1981
  ///          kmp_int[32|64] *p_lower, kmp_int[32|64] *p_upper,
1982
  ///          kmp_int[32|64] *p_stride);
1983
  /// \param IVSize Size of the iteration variable in bits.
1984
  /// \param IVSigned Sign of the iteration variable.
1985
  /// \param IL Address of the output variable in which the flag of the
1986
  /// last iteration is returned.
1987
  /// \param LB Address of the output variable in which the lower iteration
1988
  /// number is returned.
1989
  /// \param UB Address of the output variable in which the upper iteration
1990
  /// number is returned.
1991
  /// \param ST Address of the output variable in which the stride value is
1992
  /// returned.
1993
  llvm::Value *emitForNext(CodeGenFunction &CGF, SourceLocation Loc,
1994
                           unsigned IVSize, bool IVSigned, Address IL,
1995
                           Address LB, Address UB, Address ST) override;
1996
1997
  /// Emits call to void __kmpc_push_num_threads(ident_t *loc, kmp_int32
1998
  /// global_tid, kmp_int32 num_threads) to generate code for 'num_threads'
1999
  /// clause.
2000
  /// \param NumThreads An integer value of threads.
2001
  void emitNumThreadsClause(CodeGenFunction &CGF, llvm::Value *NumThreads,
2002
                            SourceLocation Loc) override;
2003
2004
  /// Emit call to void __kmpc_push_proc_bind(ident_t *loc, kmp_int32
2005
  /// global_tid, int proc_bind) to generate code for 'proc_bind' clause.
2006
  void emitProcBindClause(CodeGenFunction &CGF,
2007
                          llvm::omp::ProcBindKind ProcBind,
2008
                          SourceLocation Loc) override;
2009
2010
  /// Returns address of the threadprivate variable for the current
2011
  /// thread.
2012
  /// \param VD Threadprivate variable.
2013
  /// \param VDAddr Address of the global variable \a VD.
2014
  /// \param Loc Location of the reference to threadprivate var.
2015
  /// \return Address of the threadprivate variable for the current thread.
2016
  Address getAddrOfThreadPrivate(CodeGenFunction &CGF, const VarDecl *VD,
2017
                                 Address VDAddr, SourceLocation Loc) override;
2018
2019
  /// Emit a code for initialization of threadprivate variable. It emits
2020
  /// a call to runtime library which adds initial value to the newly created
2021
  /// threadprivate variable (if it is not constant) and registers destructor
2022
  /// for the variable (if any).
2023
  /// \param VD Threadprivate variable.
2024
  /// \param VDAddr Address of the global variable \a VD.
2025
  /// \param Loc Location of threadprivate declaration.
2026
  /// \param PerformInit true if initialization expression is not constant.
2027
  llvm::Function *
2028
  emitThreadPrivateVarDefinition(const VarDecl *VD, Address VDAddr,
2029
                                 SourceLocation Loc, bool PerformInit,
2030
                                 CodeGenFunction *CGF = nullptr) override;
2031
2032
  /// Creates artificial threadprivate variable with name \p Name and type \p
2033
  /// VarType.
2034
  /// \param VarType Type of the artificial threadprivate variable.
2035
  /// \param Name Name of the artificial threadprivate variable.
2036
  Address getAddrOfArtificialThreadPrivate(CodeGenFunction &CGF,
2037
                                           QualType VarType,
2038
                                           StringRef Name) override;
2039
2040
  /// Emit flush of the variables specified in 'omp flush' directive.
2041
  /// \param Vars List of variables to flush.
2042
  void emitFlush(CodeGenFunction &CGF, ArrayRef<const Expr *> Vars,
2043
                 SourceLocation Loc, llvm::AtomicOrdering AO) override;
2044
2045
  /// Emit task region for the task directive. The task region is
2046
  /// emitted in several steps:
2047
  /// 1. Emit a call to kmp_task_t *__kmpc_omp_task_alloc(ident_t *, kmp_int32
2048
  /// gtid, kmp_int32 flags, size_t sizeof_kmp_task_t, size_t sizeof_shareds,
2049
  /// kmp_routine_entry_t *task_entry). Here task_entry is a pointer to the
2050
  /// function:
2051
  /// kmp_int32 .omp_task_entry.(kmp_int32 gtid, kmp_task_t *tt) {
2052
  ///   TaskFunction(gtid, tt->part_id, tt->shareds);
2053
  ///   return 0;
2054
  /// }
2055
  /// 2. Copy a list of shared variables to field shareds of the resulting
2056
  /// structure kmp_task_t returned by the previous call (if any).
2057
  /// 3. Copy a pointer to destructions function to field destructions of the
2058
  /// resulting structure kmp_task_t.
2059
  /// 4. Emit a call to kmp_int32 __kmpc_omp_task(ident_t *, kmp_int32 gtid,
2060
  /// kmp_task_t *new_task), where new_task is a resulting structure from
2061
  /// previous items.
2062
  /// \param D Current task directive.
2063
  /// \param TaskFunction An LLVM function with type void (*)(i32 /*gtid*/, i32
2064
  /// /*part_id*/, captured_struct */*__context*/);
2065
  /// \param SharedsTy A type which contains references the shared variables.
2066
  /// \param Shareds Context with the list of shared variables from the \p
2067
  /// TaskFunction.
2068
  /// \param IfCond Not a nullptr if 'if' clause was specified, nullptr
2069
  /// otherwise.
2070
  /// \param Data Additional data for task generation like tiednsee, final
2071
  /// state, list of privates etc.
2072
  void emitTaskCall(CodeGenFunction &CGF, SourceLocation Loc,
2073
                    const OMPExecutableDirective &D,
2074
                    llvm::Function *TaskFunction, QualType SharedsTy,
2075
                    Address Shareds, const Expr *IfCond,
2076
                    const OMPTaskDataTy &Data) override;
2077
2078
  /// Emit task region for the taskloop directive. The taskloop region is
2079
  /// emitted in several steps:
2080
  /// 1. Emit a call to kmp_task_t *__kmpc_omp_task_alloc(ident_t *, kmp_int32
2081
  /// gtid, kmp_int32 flags, size_t sizeof_kmp_task_t, size_t sizeof_shareds,
2082
  /// kmp_routine_entry_t *task_entry). Here task_entry is a pointer to the
2083
  /// function:
2084
  /// kmp_int32 .omp_task_entry.(kmp_int32 gtid, kmp_task_t *tt) {
2085
  ///   TaskFunction(gtid, tt->part_id, tt->shareds);
2086
  ///   return 0;
2087
  /// }
2088
  /// 2. Copy a list of shared variables to field shareds of the resulting
2089
  /// structure kmp_task_t returned by the previous call (if any).
2090
  /// 3. Copy a pointer to destructions function to field destructions of the
2091
  /// resulting structure kmp_task_t.
2092
  /// 4. Emit a call to void __kmpc_taskloop(ident_t *loc, int gtid, kmp_task_t
2093
  /// *task, int if_val, kmp_uint64 *lb, kmp_uint64 *ub, kmp_int64 st, int
2094
  /// nogroup, int sched, kmp_uint64 grainsize, void *task_dup ), where new_task
2095
  /// is a resulting structure from
2096
  /// previous items.
2097
  /// \param D Current task directive.
2098
  /// \param TaskFunction An LLVM function with type void (*)(i32 /*gtid*/, i32
2099
  /// /*part_id*/, captured_struct */*__context*/);
2100
  /// \param SharedsTy A type which contains references the shared variables.
2101
  /// \param Shareds Context with the list of shared variables from the \p
2102
  /// TaskFunction.
2103
  /// \param IfCond Not a nullptr if 'if' clause was specified, nullptr
2104
  /// otherwise.
2105
  /// \param Data Additional data for task generation like tiednsee, final
2106
  /// state, list of privates etc.
2107
  void emitTaskLoopCall(CodeGenFunction &CGF, SourceLocation Loc,
2108
                        const OMPLoopDirective &D, llvm::Function *TaskFunction,
2109
                        QualType SharedsTy, Address Shareds, const Expr *IfCond,
2110
                        const OMPTaskDataTy &Data) override;
2111
2112
  /// Emit a code for reduction clause. Next code should be emitted for
2113
  /// reduction:
2114
  /// \code
2115
  ///
2116
  /// static kmp_critical_name lock = { 0 };
2117
  ///
2118
  /// void reduce_func(void *lhs[<n>], void *rhs[<n>]) {
2119
  ///  ...
2120
  ///  *(Type<i>*)lhs[i] = RedOp<i>(*(Type<i>*)lhs[i], *(Type<i>*)rhs[i]);
2121
  ///  ...
2122
  /// }
2123
  ///
2124
  /// ...
2125
  /// void *RedList[<n>] = {&<RHSExprs>[0], ..., &<RHSExprs>[<n>-1]};
2126
  /// switch (__kmpc_reduce{_nowait}(<loc>, <gtid>, <n>, sizeof(RedList),
2127
  /// RedList, reduce_func, &<lock>)) {
2128
  /// case 1:
2129
  ///  ...
2130
  ///  <LHSExprs>[i] = RedOp<i>(*<LHSExprs>[i], *<RHSExprs>[i]);
2131
  ///  ...
2132
  /// __kmpc_end_reduce{_nowait}(<loc>, <gtid>, &<lock>);
2133
  /// break;
2134
  /// case 2:
2135
  ///  ...
2136
  ///  Atomic(<LHSExprs>[i] = RedOp<i>(*<LHSExprs>[i], *<RHSExprs>[i]));
2137
  ///  ...
2138
  /// break;
2139
  /// default:;
2140
  /// }
2141
  /// \endcode
2142
  ///
2143
  /// \param Privates List of private copies for original reduction arguments.
2144
  /// \param LHSExprs List of LHS in \a ReductionOps reduction operations.
2145
  /// \param RHSExprs List of RHS in \a ReductionOps reduction operations.
2146
  /// \param ReductionOps List of reduction operations in form 'LHS binop RHS'
2147
  /// or 'operator binop(LHS, RHS)'.
2148
  /// \param Options List of options for reduction codegen:
2149
  ///     WithNowait true if parent directive has also nowait clause, false
2150
  ///     otherwise.
2151
  ///     SimpleReduction Emit reduction operation only. Used for omp simd
2152
  ///     directive on the host.
2153
  ///     ReductionKind The kind of reduction to perform.
2154
  void emitReduction(CodeGenFunction &CGF, SourceLocation Loc,
2155
                     ArrayRef<const Expr *> Privates,
2156
                     ArrayRef<const Expr *> LHSExprs,
2157
                     ArrayRef<const Expr *> RHSExprs,
2158
                     ArrayRef<const Expr *> ReductionOps,
2159
                     ReductionOptionsTy Options) override;
2160
2161
  /// Emit a code for initialization of task reduction clause. Next code
2162
  /// should be emitted for reduction:
2163
  /// \code
2164
  ///
2165
  /// _task_red_item_t red_data[n];
2166
  /// ...
2167
  /// red_data[i].shar = &origs[i];
2168
  /// red_data[i].size = sizeof(origs[i]);
2169
  /// red_data[i].f_init = (void*)RedInit<i>;
2170
  /// red_data[i].f_fini = (void*)RedDest<i>;
2171
  /// red_data[i].f_comb = (void*)RedOp<i>;
2172
  /// red_data[i].flags = <Flag_i>;
2173
  /// ...
2174
  /// void* tg1 = __kmpc_task_reduction_init(gtid, n, red_data);
2175
  /// \endcode
2176
  ///
2177
  /// \param LHSExprs List of LHS in \a Data.ReductionOps reduction operations.
2178
  /// \param RHSExprs List of RHS in \a Data.ReductionOps reduction operations.
2179
  /// \param Data Additional data for task generation like tiedness, final
2180
  /// state, list of privates, reductions etc.
2181
  llvm::Value *emitTaskReductionInit(CodeGenFunction &CGF, SourceLocation Loc,
2182
                                     ArrayRef<const Expr *> LHSExprs,
2183
                                     ArrayRef<const Expr *> RHSExprs,
2184
                                     const OMPTaskDataTy &Data) override;
2185
2186
  /// Required to resolve existing problems in the runtime. Emits threadprivate
2187
  /// variables to store the size of the VLAs/array sections for
2188
  /// initializer/combiner/finalizer functions + emits threadprivate variable to
2189
  /// store the pointer to the original reduction item for the custom
2190
  /// initializer defined by declare reduction construct.
2191
  /// \param RCG Allows to reuse an existing data for the reductions.
2192
  /// \param N Reduction item for which fixups must be emitted.
2193
  void emitTaskReductionFixups(CodeGenFunction &CGF, SourceLocation Loc,
2194
                               ReductionCodeGen &RCG, unsigned N) override;
2195
2196
  /// Get the address of `void *` type of the privatue copy of the reduction
2197
  /// item specified by the \p SharedLVal.
2198
  /// \param ReductionsPtr Pointer to the reduction data returned by the
2199
  /// emitTaskReductionInit function.
2200
  /// \param SharedLVal Address of the original reduction item.
2201
  Address getTaskReductionItem(CodeGenFunction &CGF, SourceLocation Loc,
2202
                               llvm::Value *ReductionsPtr,
2203
                               LValue SharedLVal) override;
2204
2205
  /// Emit code for 'taskwait' directive.
2206
  void emitTaskwaitCall(CodeGenFunction &CGF, SourceLocation Loc) override;
2207
2208
  /// Emit code for 'cancellation point' construct.
2209
  /// \param CancelRegion Region kind for which the cancellation point must be
2210
  /// emitted.
2211
  ///
2212
  void emitCancellationPointCall(CodeGenFunction &CGF, SourceLocation Loc,
2213
                                 OpenMPDirectiveKind CancelRegion) override;
2214
2215
  /// Emit code for 'cancel' construct.
2216
  /// \param IfCond Condition in the associated 'if' clause, if it was
2217
  /// specified, nullptr otherwise.
2218
  /// \param CancelRegion Region kind for which the cancel must be emitted.
2219
  ///
2220
  void emitCancelCall(CodeGenFunction &CGF, SourceLocation Loc,
2221
                      const Expr *IfCond,
2222
                      OpenMPDirectiveKind CancelRegion) override;
2223
2224
  /// Emit outilined function for 'target' directive.
2225
  /// \param D Directive to emit.
2226
  /// \param ParentName Name of the function that encloses the target region.
2227
  /// \param OutlinedFn Outlined function value to be defined by this call.
2228
  /// \param OutlinedFnID Outlined function ID value to be defined by this call.
2229
  /// \param IsOffloadEntry True if the outlined function is an offload entry.
2230
  /// \param CodeGen Code generation sequence for the \a D directive.
2231
  /// An outlined function may not be an entry if, e.g. the if clause always
2232
  /// evaluates to false.
2233
  void emitTargetOutlinedFunction(const OMPExecutableDirective &D,
2234
                                  StringRef ParentName,
2235
                                  llvm::Function *&OutlinedFn,
2236
                                  llvm::Constant *&OutlinedFnID,
2237
                                  bool IsOffloadEntry,
2238
                                  const RegionCodeGenTy &CodeGen) override;
2239
2240
  /// Emit the target offloading code associated with \a D. The emitted
2241
  /// code attempts offloading the execution to the device, an the event of
2242
  /// a failure it executes the host version outlined in \a OutlinedFn.
2243
  /// \param D Directive to emit.
2244
  /// \param OutlinedFn Host version of the code to be offloaded.
2245
  /// \param OutlinedFnID ID of host version of the code to be offloaded.
2246
  /// \param IfCond Expression evaluated in if clause associated with the target
2247
  /// directive, or null if no if clause is used.
2248
  /// \param Device Expression evaluated in device clause associated with the
2249
  /// target directive, or null if no device clause is used.
2250
  void
2251
  emitTargetCall(CodeGenFunction &CGF, const OMPExecutableDirective &D,
2252
                 llvm::Function *OutlinedFn, llvm::Value *OutlinedFnID,
2253
                 const Expr *IfCond, const Expr *Device,
2254
                 llvm::function_ref<llvm::Value *(CodeGenFunction &CGF,
2255
                                                  const OMPLoopDirective &D)>
2256
                     SizeEmitter) override;
2257
2258
  /// Emit the target regions enclosed in \a GD function definition or
2259
  /// the function itself in case it is a valid device function. Returns true if
2260
  /// \a GD was dealt with successfully.
2261
  /// \param GD Function to scan.
2262
  bool emitTargetFunctions(GlobalDecl GD) override;
2263
2264
  /// Emit the global variable if it is a valid device global variable.
2265
  /// Returns true if \a GD was dealt with successfully.
2266
  /// \param GD Variable declaration to emit.
2267
  bool emitTargetGlobalVariable(GlobalDecl GD) override;
2268
2269
  /// Emit the global \a GD if it is meaningful for the target. Returns
2270
  /// if it was emitted successfully.
2271
  /// \param GD Global to scan.
2272
  bool emitTargetGlobal(GlobalDecl GD) override;
2273
2274
  /// Emits code for teams call of the \a OutlinedFn with
2275
  /// variables captured in a record which address is stored in \a
2276
  /// CapturedStruct.
2277
  /// \param OutlinedFn Outlined function to be run by team masters. Type of
2278
  /// this function is void(*)(kmp_int32 *, kmp_int32, struct context_vars*).
2279
  /// \param CapturedVars A pointer to the record with the references to
2280
  /// variables used in \a OutlinedFn function.
2281
  ///
2282
  void emitTeamsCall(CodeGenFunction &CGF, const OMPExecutableDirective &D,
2283
                     SourceLocation Loc, llvm::Function *OutlinedFn,
2284
                     ArrayRef<llvm::Value *> CapturedVars) override;
2285
2286
  /// Emits call to void __kmpc_push_num_teams(ident_t *loc, kmp_int32
2287
  /// global_tid, kmp_int32 num_teams, kmp_int32 thread_limit) to generate code
2288
  /// for num_teams clause.
2289
  /// \param NumTeams An integer expression of teams.
2290
  /// \param ThreadLimit An integer expression of threads.
2291
  void emitNumTeamsClause(CodeGenFunction &CGF, const Expr *NumTeams,
2292
                          const Expr *ThreadLimit, SourceLocation Loc) override;
2293
2294
  /// Emit the target data mapping code associated with \a D.
2295
  /// \param D Directive to emit.
2296
  /// \param IfCond Expression evaluated in if clause associated with the
2297
  /// target directive, or null if no device clause is used.
2298
  /// \param Device Expression evaluated in device clause associated with the
2299
  /// target directive, or null if no device clause is used.
2300
  /// \param Info A record used to store information that needs to be preserved
2301
  /// until the region is closed.
2302
  void emitTargetDataCalls(CodeGenFunction &CGF,
2303
                           const OMPExecutableDirective &D, const Expr *IfCond,
2304
                           const Expr *Device, const RegionCodeGenTy &CodeGen,
2305
                           TargetDataInfo &Info) override;
2306
2307
  /// Emit the data mapping/movement code associated with the directive
2308
  /// \a D that should be of the form 'target [{enter|exit} data | update]'.
2309
  /// \param D Directive to emit.
2310
  /// \param IfCond Expression evaluated in if clause associated with the target
2311
  /// directive, or null if no if clause is used.
2312
  /// \param Device Expression evaluated in device clause associated with the
2313
  /// target directive, or null if no device clause is used.
2314
  void emitTargetDataStandAloneCall(CodeGenFunction &CGF,
2315
                                    const OMPExecutableDirective &D,
2316
                                    const Expr *IfCond,
2317
                                    const Expr *Device) override;
2318
2319
  /// Emit initialization for doacross loop nesting support.
2320
  /// \param D Loop-based construct used in doacross nesting construct.
2321
  void emitDoacrossInit(CodeGenFunction &CGF, const OMPLoopDirective &D,
2322
                        ArrayRef<Expr *> NumIterations) override;
2323
2324
  /// Emit code for doacross ordered directive with 'depend' clause.
2325
  /// \param C 'depend' clause with 'sink|source' dependency kind.
2326
  void emitDoacrossOrdered(CodeGenFunction &CGF,
2327
                           const OMPDependClause *C) override;
2328
2329
  /// Translates the native parameter of outlined function if this is required
2330
  /// for target.
2331
  /// \param FD Field decl from captured record for the parameter.
2332
  /// \param NativeParam Parameter itself.
2333
  const VarDecl *translateParameter(const FieldDecl *FD,
2334
                                    const VarDecl *NativeParam) const override;
2335
2336
  /// Gets the address of the native argument basing on the address of the
2337
  /// target-specific parameter.
2338
  /// \param NativeParam Parameter itself.
2339
  /// \param TargetParam Corresponding target-specific parameter.
2340
  Address getParameterAddress(CodeGenFunction &CGF, const VarDecl *NativeParam,
2341
                              const VarDecl *TargetParam) const override;
2342
2343
  /// Gets the OpenMP-specific address of the local variable.
2344
  Address getAddressOfLocalVariable(CodeGenFunction &CGF,
2345
41.5k
                                    const VarDecl *VD) override {
2346
41.5k
    return Address::invalid();
2347
41.5k
  }
2348
};
2349
2350
} // namespace CodeGen
2351
} // namespace clang
2352
2353
#endif