Coverage Report

Created: 2022-07-16 07:03

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