Coverage Report

Created: 2020-09-22 08:39

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