clang  6.0.0svn
Classes | Enumerations | Functions | Variables
CGOpenMPRuntime.cpp File Reference
#include "CGCXXABI.h"
#include "CGCleanup.h"
#include "CGOpenMPRuntime.h"
#include "CodeGenFunction.h"
#include "clang/CodeGen/ConstantInitBuilder.h"
#include "clang/AST/Decl.h"
#include "clang/AST/StmtOpenMP.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/BitmaskEnum.h"
#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/IR/CallSite.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
Include dependency graph for CGOpenMPRuntime.cpp:

Go to the source code of this file.

Classes

class  CleanupTy
 A basic class for pre|post-action for advanced codegen sequence for OpenMP region. More...
 

Enumerations

enum  OpenMPLocationFlags : unsigned
 Values for bit flags used in the ident_t to describe the fields. More...
 
enum  IdentFieldIndex {
  IdentField_Reserved_1, IdentField_Flags, IdentField_Reserved_2, IdentField_Reserved_3,
  IdentField_PSource
}
 
enum  OpenMPSchedType {
  OMP_sch_lower = 32, OMP_sch_static_chunked = 33, OMP_sch_static = 34, OMP_sch_dynamic_chunked = 35,
  OMP_sch_guided_chunked = 36, OMP_sch_runtime = 37, OMP_sch_auto = 38, OMP_sch_static_balanced_chunked = 45,
  OMP_ord_lower = 64, OMP_ord_static_chunked = 65, OMP_ord_static = 66, OMP_ord_dynamic_chunked = 67,
  OMP_ord_guided_chunked = 68, OMP_ord_runtime = 69, OMP_ord_auto = 70, OMP_sch_default = OMP_sch_static,
  OMP_dist_sch_static_chunked = 91, OMP_dist_sch_static = 92, OMP_sch_modifier_monotonic = (1 << 29), OMP_sch_modifier_nonmonotonic = (1 << 30)
}
 Schedule types for 'omp for' loops (these enumerators are taken from the enum sched_type in kmp.h). More...
 
enum  OpenMPRTLFunction {
  OMPRTL__kmpc_fork_call, OMPRTL__kmpc_threadprivate_cached, OMPRTL__kmpc_threadprivate_register, OMPRTL__kmpc_global_thread_num,
  OMPRTL__kmpc_critical, OMPRTL__kmpc_critical_with_hint, OMPRTL__kmpc_end_critical, OMPRTL__kmpc_cancel_barrier,
  OMPRTL__kmpc_barrier, OMPRTL__kmpc_for_static_fini, OMPRTL__kmpc_serialized_parallel, OMPRTL__kmpc_end_serialized_parallel,
  OMPRTL__kmpc_push_num_threads, OMPRTL__kmpc_flush, OMPRTL__kmpc_master, OMPRTL__kmpc_end_master,
  OMPRTL__kmpc_omp_taskyield, OMPRTL__kmpc_single, OMPRTL__kmpc_end_single, OMPRTL__kmpc_omp_task_alloc,
  OMPRTL__kmpc_omp_task, OMPRTL__kmpc_copyprivate, OMPRTL__kmpc_reduce, OMPRTL__kmpc_reduce_nowait,
  OMPRTL__kmpc_end_reduce, OMPRTL__kmpc_end_reduce_nowait, OMPRTL__kmpc_omp_task_begin_if0, OMPRTL__kmpc_omp_task_complete_if0,
  OMPRTL__kmpc_ordered, OMPRTL__kmpc_end_ordered, OMPRTL__kmpc_omp_taskwait, OMPRTL__kmpc_taskgroup,
  OMPRTL__kmpc_end_taskgroup, OMPRTL__kmpc_push_proc_bind, OMPRTL__kmpc_omp_task_with_deps, OMPRTL__kmpc_omp_wait_deps,
  OMPRTL__kmpc_cancellationpoint, OMPRTL__kmpc_cancel, OMPRTL__kmpc_push_num_teams, OMPRTL__kmpc_fork_teams,
  OMPRTL__kmpc_taskloop, OMPRTL__kmpc_doacross_init, OMPRTL__kmpc_doacross_fini, OMPRTL__kmpc_doacross_post,
  OMPRTL__kmpc_doacross_wait, OMPRTL__kmpc_task_reduction_init, OMPRTL__kmpc_task_reduction_get_th_data, OMPRTL__tgt_target,
  OMPRTL__tgt_target_nowait, OMPRTL__tgt_target_teams, OMPRTL__tgt_target_teams_nowait, OMPRTL__tgt_register_lib,
  OMPRTL__tgt_unregister_lib, OMPRTL__tgt_target_data_begin, OMPRTL__tgt_target_data_end, OMPRTL__tgt_target_data_update
}
 
enum  KmpTaskTFields
 Indexes of fields for type kmp_task_t. More...
 
enum  RTCancelKind
 
enum  OpenMPOffloadingReservedDeviceIDs
 
enum  ParamKindTy
 Kind of parameter in a function with 'declare simd' directive. More...
 

Functions

static const OMPDeclareReductionDeclgetReductionInit (const Expr *ReductionOp)
 Check if the combiner is a call to UDR combiner and if it is so return the UDR decl used for reduction. More...
 
static void emitInitWithReductionInitializer (CodeGenFunction &CGF, const OMPDeclareReductionDecl *DRD, const Expr *InitOp, Address Private, Address Original, QualType Ty)
 
static void EmitOMPAggregateInit (CodeGenFunction &CGF, Address DestAddr, QualType Type, bool EmitDeclareReductionInit, const Expr *Init, const OMPDeclareReductionDecl *DRD, Address SrcAddr=Address::invalid())
 Emit initialization of arrays of complex types. More...
 
static LValue loadToBegin (CodeGenFunction &CGF, QualType BaseTy, QualType ElTy, LValue BaseLV)
 
static Address castToBase (CodeGenFunction &CGF, QualType BaseTy, QualType ElTy, llvm::Type *BaseLVType, CharUnits BaseLVAlignment, llvm::Value *Addr)
 
static llvm::Function * emitCombinerOrInitializer (CodeGenModule &CGM, QualType Ty, const Expr *CombinerInitializer, const VarDecl *In, const VarDecl *Out, bool IsCombiner)
 
static CharUnits getIdentAlign (CodeGenModule &CGM)
 
static CharUnits getIdentSize (CodeGenModule &CGM)
 
static CharUnits getOffsetOfIdentField (IdentFieldIndex Field)
 
static Address createIdentFieldGEP (CodeGenFunction &CGF, Address Addr, IdentFieldIndex Field, const llvm::Twine &Name="")
 
static llvm::ValueemitParallelOrTeamsOutlinedFunction (CodeGenModule &CGM, const OMPExecutableDirective &D, const CapturedStmt *CS, const VarDecl *ThreadIDVar, OpenMPDirectiveKind InnermostKind, const StringRef OutlinedHelperName, const RegionCodeGenTy &CodeGen)
 
static Address emitAddrOfVarFromArray (CodeGenFunction &CGF, Address Array, unsigned Index, const VarDecl *Var)
 Given an array of pointers to variables, project the address of a given variable. More...
 
static llvm::ValueemitCopyprivateCopyFunction (CodeGenModule &CGM, llvm::Type *ArgsType, ArrayRef< const Expr *> CopyprivateVars, ArrayRef< const Expr *> DestExprs, ArrayRef< const Expr *> SrcExprs, ArrayRef< const Expr *> AssignmentOps)
 
static OpenMPSchedType getRuntimeSchedule (OpenMPScheduleClauseKind ScheduleKind, bool Chunked, bool Ordered)
 Map the OpenMP loop schedule to the runtime enumeration. More...
 
static OpenMPSchedType getRuntimeSchedule (OpenMPDistScheduleClauseKind ScheduleKind, bool Chunked)
 Map the OpenMP distribute schedule to the runtime enumeration. More...
 
static int addMonoNonMonoModifier (OpenMPSchedType Schedule, OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2)
 
static void emitForStaticInitCall (CodeGenFunction &CGF, llvm::Value *UpdateLocation, llvm::Value *ThreadId, llvm::Constant *ForStaticInitFunction, OpenMPSchedType Schedule, OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2, const CGOpenMPRuntime::StaticRTInput &Values)
 
static llvm::Function * createOffloadingBinaryDescriptorFunction (CodeGenModule &CGM, StringRef Name, const RegionCodeGenTy &Codegen)
 Create a Ctor/Dtor-like function whose body is emitted through Codegen. More...
 
static FieldDecladdFieldToRecordDecl (ASTContext &C, DeclContext *DC, QualType FieldTy)
 
static RecordDeclcreatePrivatesRecordDecl (CodeGenModule &CGM, ArrayRef< PrivateDataTy > Privates)
 
static RecordDeclcreateKmpTaskTRecordDecl (CodeGenModule &CGM, OpenMPDirectiveKind Kind, QualType KmpInt32Ty, QualType KmpRoutineEntryPointerQTy)
 
static RecordDeclcreateKmpTaskTWithPrivatesRecordDecl (CodeGenModule &CGM, QualType KmpTaskTQTy, ArrayRef< PrivateDataTy > Privates)
 
static llvm::ValueemitProxyTaskFunction (CodeGenModule &CGM, SourceLocation Loc, OpenMPDirectiveKind Kind, QualType KmpInt32Ty, QualType KmpTaskTWithPrivatesPtrQTy, QualType KmpTaskTWithPrivatesQTy, QualType KmpTaskTQTy, QualType SharedsPtrTy, llvm::Value *TaskFunction, llvm::Value *TaskPrivatesMap)
 Emit a proxy function which accepts kmp_task_t as the second argument. More...
 
static llvm::ValueemitDestructorsFunction (CodeGenModule &CGM, SourceLocation Loc, QualType KmpInt32Ty, QualType KmpTaskTWithPrivatesPtrQTy, QualType KmpTaskTWithPrivatesQTy)
 
static llvm::ValueemitTaskPrivateMappingFunction (CodeGenModule &CGM, SourceLocation Loc, ArrayRef< const Expr *> PrivateVars, ArrayRef< const Expr *> FirstprivateVars, ArrayRef< const Expr *> LastprivateVars, QualType PrivatesQTy, ArrayRef< PrivateDataTy > Privates)
 Emit a privates mapping function for correct handling of private and firstprivate variables. More...
 
static bool stable_sort_comparator (const PrivateDataTy P1, const PrivateDataTy P2)
 
static void emitPrivatesInit (CodeGenFunction &CGF, const OMPExecutableDirective &D, Address KmpTaskSharedsPtr, LValue TDBase, const RecordDecl *KmpTaskTWithPrivatesQTyRD, QualType SharedsTy, QualType SharedsPtrTy, const OMPTaskDataTy &Data, ArrayRef< PrivateDataTy > Privates, bool ForDup)
 Emit initialization for private variables in task-based directives. More...
 
static bool checkInitIsRequired (CodeGenFunction &CGF, ArrayRef< PrivateDataTy > Privates)
 Check if duplication function is required for taskloops. More...
 
static llvm::ValueemitTaskDupFunction (CodeGenModule &CGM, SourceLocation Loc, const OMPExecutableDirective &D, QualType KmpTaskTWithPrivatesPtrQTy, const RecordDecl *KmpTaskTWithPrivatesQTyRD, const RecordDecl *KmpTaskTQTyRD, QualType SharedsTy, QualType SharedsPtrTy, const OMPTaskDataTy &Data, ArrayRef< PrivateDataTy > Privates, bool WithLastIter)
 Emit task_dup function (for initialization of private/firstprivate/lastprivate vars and last_iter flag) More...
 
static bool checkDestructorsRequired (const RecordDecl *KmpTaskTWithPrivatesQTyRD)
 Checks if destructor function is required to be generated. More...
 
static void EmitOMPAggregateReduction (CodeGenFunction &CGF, QualType Type, const VarDecl *LHSVar, const VarDecl *RHSVar, const llvm::function_ref< void(CodeGenFunction &CGF, const Expr *, const Expr *, const Expr *)> &RedOpGen, const Expr *XExpr=nullptr, const Expr *EExpr=nullptr, const Expr *UpExpr=nullptr)
 Emit reduction operation for each element of array (required for array sections) LHS op = RHS. More...
 
static void emitReductionCombiner (CodeGenFunction &CGF, const Expr *ReductionOp)
 Emit reduction combiner. More...
 
static std::string generateUniqueName (StringRef Prefix, SourceLocation Loc, unsigned N)
 Generates unique name for artificial threadprivate variables. More...
 
static llvm::ValueemitReduceInitFunction (CodeGenModule &CGM, SourceLocation Loc, ReductionCodeGen &RCG, unsigned N)
 Emits reduction initializer function: More...
 
static llvm::ValueemitReduceCombFunction (CodeGenModule &CGM, SourceLocation Loc, ReductionCodeGen &RCG, unsigned N, const Expr *ReductionOp, const Expr *LHS, const Expr *RHS, const Expr *PrivateRef)
 Emits reduction combiner function: More...
 
static llvm::ValueemitReduceFiniFunction (CodeGenModule &CGM, SourceLocation Loc, ReductionCodeGen &RCG, unsigned N)
 Emits reduction finalizer function: More...
 
static RTCancelKind getCancellationKind (OpenMPDirectiveKind CancelRegion)
 
static void getTargetEntryUniqueInfo (ASTContext &C, SourceLocation Loc, unsigned &DeviceID, unsigned &FileID, unsigned &LineNum)
 Obtain information that uniquely identifies a target entry. More...
 
static const StmtignoreCompoundStmts (const Stmt *Body)
 discard all CompoundStmts intervening between two constructs More...
 
static llvm::ValueemitNumTeamsForTargetDirective (CGOpenMPRuntime &OMPRuntime, CodeGenFunction &CGF, const OMPExecutableDirective &D)
 Emit the number of teams for a target directive. More...
 
static llvm::ValueemitNumThreadsForTargetDirective (CGOpenMPRuntime &OMPRuntime, CodeGenFunction &CGF, const OMPExecutableDirective &D)
 Emit the number of threads for a target directive. More...
 
static void emitOffloadingArrays (CodeGenFunction &CGF, MappableExprsHandler::MapBaseValuesArrayTy &BasePointers, MappableExprsHandler::MapValuesArrayTy &Pointers, MappableExprsHandler::MapValuesArrayTy &Sizes, MappableExprsHandler::MapFlagsArrayTy &MapTypes, CGOpenMPRuntime::TargetDataInfo &Info)
 Emit the arrays used to pass the captures and map information to the offloading runtime library. More...
 
static void emitOffloadingArraysArgument (CodeGenFunction &CGF, llvm::Value *&BasePointersArrayArg, llvm::Value *&PointersArrayArg, llvm::Value *&SizesArrayArg, llvm::Value *&MapTypesArrayArg, CGOpenMPRuntime::TargetDataInfo &Info)
 Emit the arguments to be passed to the runtime library based on the arrays of pointers, sizes and map types. More...
 
static unsigned evaluateCDTSize (const FunctionDecl *FD, ArrayRef< ParamAttrTy > ParamAttrs)
 
static void emitX86DeclareSimdFunction (const FunctionDecl *FD, llvm::Function *Fn, const llvm::APSInt &VLENVal, ArrayRef< ParamAttrTy > ParamAttrs, OMPDeclareSimdDeclAttr::BranchStateTy State)
 

Variables

 ident_t
 

Enumeration Type Documentation

◆ IdentFieldIndex

Enumerator
IdentField_Reserved_1 

might be used in Fortran

IdentField_Flags 

OMP_IDENT_xxx flags; OMP_IDENT_KMPC identifies this union member.

IdentField_Reserved_2 

Not really used in Fortran any more.

IdentField_Reserved_3 

Source[4] in Fortran, do not use for C++.

IdentField_PSource 

String describing the source location.

The string is composed of semi-colon separated fields which describe the source file, the function and a pair of line numbers that delimit the construct.

Definition at line 483 of file CGOpenMPRuntime.cpp.

◆ KmpTaskTFields

Indexes of fields for type kmp_task_t.

Definition at line 3232 of file CGOpenMPRuntime.cpp.

◆ OpenMPLocationFlags

enum OpenMPLocationFlags : unsigned

Values for bit flags used in the ident_t to describe the fields.

All enumeric elements are named and described in accordance with the code from http://llvm.org/svn/llvm-project/openmp/trunk/runtime/src/kmp.h

Definition at line 431 of file CGOpenMPRuntime.cpp.

◆ OpenMPOffloadingReservedDeviceIDs

Definition at line 6789 of file CGOpenMPRuntime.cpp.

◆ OpenMPRTLFunction

Enumerator
OMPRTL__kmpc_fork_call 

Call to void __kmpc_fork_call(ident_t *loc, kmp_int32 argc, kmpc_micro microtask, ...);.

OMPRTL__kmpc_threadprivate_cached 

Call to void *__kmpc_threadprivate_cached(ident_t *loc, kmp_int32 global_tid, void *data, size_t size, void ***cache);.

OMPRTL__kmpc_threadprivate_register 

Call to void __kmpc_threadprivate_register( ident_t *, void *data, kmpc_ctor ctor, kmpc_cctor cctor, kmpc_dtor dtor);.

OMPRTL__kmpc_global_thread_num 
OMPRTL__kmpc_critical 
OMPRTL__kmpc_critical_with_hint 
OMPRTL__kmpc_end_critical 
OMPRTL__kmpc_cancel_barrier 
OMPRTL__kmpc_barrier 
OMPRTL__kmpc_for_static_fini 
OMPRTL__kmpc_serialized_parallel 
OMPRTL__kmpc_end_serialized_parallel 
OMPRTL__kmpc_push_num_threads 
OMPRTL__kmpc_flush 
OMPRTL__kmpc_master 
OMPRTL__kmpc_end_master 
OMPRTL__kmpc_omp_taskyield 
OMPRTL__kmpc_single 
OMPRTL__kmpc_end_single 
OMPRTL__kmpc_omp_task_alloc 
OMPRTL__kmpc_omp_task 
OMPRTL__kmpc_copyprivate 
OMPRTL__kmpc_reduce 
OMPRTL__kmpc_reduce_nowait 
OMPRTL__kmpc_end_reduce 
OMPRTL__kmpc_end_reduce_nowait 
OMPRTL__kmpc_omp_task_begin_if0 
OMPRTL__kmpc_omp_task_complete_if0 
OMPRTL__kmpc_ordered 
OMPRTL__kmpc_end_ordered 
OMPRTL__kmpc_omp_taskwait 
OMPRTL__kmpc_taskgroup 
OMPRTL__kmpc_end_taskgroup 
OMPRTL__kmpc_push_proc_bind 
OMPRTL__kmpc_omp_task_with_deps 
OMPRTL__kmpc_omp_wait_deps 
OMPRTL__kmpc_cancellationpoint 
OMPRTL__kmpc_cancel 
OMPRTL__kmpc_push_num_teams 
OMPRTL__kmpc_fork_teams 
OMPRTL__kmpc_taskloop 
OMPRTL__kmpc_doacross_init 
OMPRTL__kmpc_doacross_fini 
OMPRTL__kmpc_doacross_post 
OMPRTL__kmpc_doacross_wait 
OMPRTL__kmpc_task_reduction_init 
OMPRTL__kmpc_task_reduction_get_th_data 
OMPRTL__tgt_target 
OMPRTL__tgt_target_nowait 
OMPRTL__tgt_target_teams 
OMPRTL__tgt_target_teams_nowait 
OMPRTL__tgt_register_lib 
OMPRTL__tgt_unregister_lib 
OMPRTL__tgt_target_data_begin 
OMPRTL__tgt_target_data_end 
OMPRTL__tgt_target_data_update 

Definition at line 530 of file CGOpenMPRuntime.cpp.

◆ OpenMPSchedType

Schedule types for 'omp for' loops (these enumerators are taken from the enum sched_type in kmp.h).

Enumerator
OMP_sch_lower 

Lower bound for default (unordered) versions.

OMP_sch_static_chunked 
OMP_sch_static 
OMP_sch_dynamic_chunked 
OMP_sch_guided_chunked 
OMP_sch_runtime 
OMP_sch_auto 
OMP_sch_static_balanced_chunked 

static with chunk adjustment (e.g., simd)

OMP_ord_lower 

Lower bound for 'ordered' versions.

OMP_ord_static_chunked 
OMP_ord_static 
OMP_ord_dynamic_chunked 
OMP_ord_guided_chunked 
OMP_ord_runtime 
OMP_ord_auto 
OMP_sch_default 
OMP_dist_sch_static_chunked 

dist_schedule types

OMP_dist_sch_static 
OMP_sch_modifier_monotonic 

Support for OpenMP 4.5 monotonic and nonmonotonic schedule modifiers.

Set if the monotonic schedule modifier was present.

OMP_sch_modifier_nonmonotonic 

Set if the nonmonotonic schedule modifier was present.

Definition at line 500 of file CGOpenMPRuntime.cpp.

◆ ParamKindTy

Kind of parameter in a function with 'declare simd' directive.

Definition at line 7559 of file CGOpenMPRuntime.cpp.

◆ RTCancelKind

Definition at line 5631 of file CGOpenMPRuntime.cpp.

Function Documentation

◆ addFieldToRecordDecl()

static FieldDecl* addFieldToRecordDecl ( ASTContext C,
DeclContext DC,
QualType  FieldTy 
)
static

◆ addMonoNonMonoModifier()

static int addMonoNonMonoModifier ( OpenMPSchedType  Schedule,
OpenMPScheduleClauseModifier  M1,
OpenMPScheduleClauseModifier  M2 
)
static

◆ castToBase()

static Address castToBase ( CodeGenFunction CGF,
QualType  BaseTy,
QualType  ElTy,
llvm::Type *  BaseLVType,
CharUnits  BaseLVAlignment,
llvm::Value Addr 
)
static

◆ checkDestructorsRequired()

static bool checkDestructorsRequired ( const RecordDecl KmpTaskTWithPrivatesQTyRD)
static

Checks if destructor function is required to be generated.

Returns
true if cleanups are required, false otherwise.

Definition at line 4284 of file CGOpenMPRuntime.cpp.

References clang::RecordDecl::field_begin().

◆ checkInitIsRequired()

static bool checkInitIsRequired ( CodeGenFunction CGF,
ArrayRef< PrivateDataTy >  Privates 
)
static

Check if duplication function is required for taskloops.

Definition at line 4190 of file CGOpenMPRuntime.cpp.

References clang::VarDecl::getAnyInitializer(), and clang::CodeGen::CodeGenFunction::isTrivialInitializer().

◆ createIdentFieldGEP()

static Address createIdentFieldGEP ( CodeGenFunction CGF,
Address  Addr,
IdentFieldIndex  Field,
const llvm::Twine &  Name = "" 
)
static

Definition at line 1284 of file CGOpenMPRuntime.cpp.

◆ createKmpTaskTRecordDecl()

static RecordDecl* createKmpTaskTRecordDecl ( CodeGenModule CGM,
OpenMPDirectiveKind  Kind,
QualType  KmpInt32Ty,
QualType  KmpRoutineEntryPointerQTy 
)
static

◆ createKmpTaskTWithPrivatesRecordDecl()

static RecordDecl* createKmpTaskTWithPrivatesRecordDecl ( CodeGenModule CGM,
QualType  KmpTaskTQTy,
ArrayRef< PrivateDataTy >  Privates 
)
static

◆ createOffloadingBinaryDescriptorFunction()

static llvm::Function* createOffloadingBinaryDescriptorFunction ( CodeGenModule CGM,
StringRef  Name,
const RegionCodeGenTy Codegen 
)
static

Create a Ctor/Dtor-like function whose body is emitted through Codegen.

This is used to emit the two functions that register and unregister the descriptor of the current compilation unit.

Definition at line 3333 of file CGOpenMPRuntime.cpp.

Referenced by clang::CodeGen::createOffloadingBinaryDescriptorRegistration().

◆ createPrivatesRecordDecl()

static RecordDecl* createPrivatesRecordDecl ( CodeGenModule CGM,
ArrayRef< PrivateDataTy >  Privates 
)
static

◆ emitAddrOfVarFromArray()

static Address emitAddrOfVarFromArray ( CodeGenFunction CGF,
Address  Array,
unsigned  Index,
const VarDecl Var 
)
static

◆ emitCombinerOrInitializer()

static llvm::Function* emitCombinerOrInitializer ( CodeGenModule CGM,
QualType  Ty,
const Expr CombinerInitializer,
const VarDecl In,
const VarDecl Out,
bool  IsCombiner 
)
static

◆ emitCopyprivateCopyFunction()

static llvm::Value* emitCopyprivateCopyFunction ( CodeGenModule CGM,
llvm::Type *  ArgsType,
ArrayRef< const Expr *>  CopyprivateVars,
ArrayRef< const Expr *>  DestExprs,
ArrayRef< const Expr *>  SrcExprs,
ArrayRef< const Expr *>  AssignmentOps 
)
static

◆ emitDestructorsFunction()

static llvm::Value* emitDestructorsFunction ( CodeGenModule CGM,
SourceLocation  Loc,
QualType  KmpInt32Ty,
QualType  KmpTaskTWithPrivatesPtrQTy,
QualType  KmpTaskTWithPrivatesQTy 
)
static

◆ emitForStaticInitCall()

static void emitForStaticInitCall ( CodeGenFunction CGF,
llvm::Value UpdateLocation,
llvm::Value ThreadId,
llvm::Constant *  ForStaticInitFunction,
OpenMPSchedType  Schedule,
OpenMPScheduleClauseModifier  M1,
OpenMPScheduleClauseModifier  M2,
const CGOpenMPRuntime::StaticRTInput &  Values 
)
static

◆ emitInitWithReductionInitializer()

static void emitInitWithReductionInitializer ( CodeGenFunction CGF,
const OMPDeclareReductionDecl DRD,
const Expr InitOp,
Address  Private,
Address  Original,
QualType  Ty 
)
static

◆ emitNumTeamsForTargetDirective()

static llvm::Value* emitNumTeamsForTargetDirective ( CGOpenMPRuntime OMPRuntime,
CodeGenFunction CGF,
const OMPExecutableDirective D 
)
static

Emit the number of teams for a target directive.

Inspect the num_teams clause associated with a teams construct combined or closely nested with the target directive.

Emit a team of size one for directives such as 'target parallel' that have no associated teams construct.

Otherwise, return nullptr.

Definition at line 5850 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::CapturedStmt::getCapturedStmt(), clang::OMPExecutableDirective::getDirectiveKind(), clang::CodeGen::CodeGenFunction::getLangOpts(), clang::OMPExecutableDirective::getSingleClause(), ignoreCompoundStmts(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::isOpenMPParallelDirective(), and clang::isOpenMPTeamsDirective().

Referenced by emitOffloadingArraysArgument().

◆ emitNumThreadsForTargetDirective()

static llvm::Value* emitNumThreadsForTargetDirective ( CGOpenMPRuntime OMPRuntime,
CodeGenFunction CGF,
const OMPExecutableDirective D 
)
static

◆ emitOffloadingArrays()

static void emitOffloadingArrays ( CodeGenFunction CGF,
MappableExprsHandler::MapBaseValuesArrayTy BasePointers,
MappableExprsHandler::MapValuesArrayTy Pointers,
MappableExprsHandler::MapValuesArrayTy Sizes,
MappableExprsHandler::MapFlagsArrayTy MapTypes,
CGOpenMPRuntime::TargetDataInfo &  Info 
)
static

Emit the arrays used to pass the captures and map information to the offloading runtime library.

If there is no map or capture information, return nullptr by reference.

Definition at line 6800 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CodeGenFunction::CGM, and clang::CodeGen::CodeGenFunction::getContext().

Referenced by emitOffloadingArraysArgument(), clang::CodeGen::emitTargetDataCalls(), and clang::CodeGen::emitTargetDataStandAloneCall().

◆ emitOffloadingArraysArgument()

static void emitOffloadingArraysArgument ( CodeGenFunction CGF,
llvm::Value *&  BasePointersArrayArg,
llvm::Value *&  PointersArrayArg,
llvm::Value *&  SizesArrayArg,
llvm::Value *&  MapTypesArrayArg,
CGOpenMPRuntime::TargetDataInfo &  Info 
)
static

◆ EmitOMPAggregateInit()

static void EmitOMPAggregateInit ( CodeGenFunction CGF,
Address  DestAddr,
QualType  Type,
bool  EmitDeclareReductionInit,
const Expr Init,
const OMPDeclareReductionDecl DRD,
Address  SrcAddr = Address::invalid() 
)
static

◆ EmitOMPAggregateReduction()

static void EmitOMPAggregateReduction ( CodeGenFunction CGF,
QualType  Type,
const VarDecl LHSVar,
const VarDecl RHSVar,
const llvm::function_ref< void(CodeGenFunction &CGF, const Expr *, const Expr *, const Expr *)> &  RedOpGen,
const Expr XExpr = nullptr,
const Expr EExpr = nullptr,
const Expr UpExpr = nullptr 
)
static

Emit reduction operation for each element of array (required for array sections) LHS op = RHS.

Parameters
TypeType of array.
LHSVarVariable on the left side of the reduction operation (references element of array in original variable).
RHSVarVariable on the right side of the reduction operation (references element of array in original variable).
RedOpGenGenerator of reduction operation with use of LHSVar and RHSVar.

Definition at line 4769 of file CGOpenMPRuntime.cpp.

References clang::CharUnits::alignmentOfArrayElement(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CodeGenFunction::emitArrayLength(), clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar(), clang::CodeGen::Address::getAlignment(), clang::Type::getAsArrayTypeUnsafe(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::Address::getPointer(), and clang::ASTContext::getTypeSizeInChars().

Referenced by clang::CodeGen::emitSingleReductionCombiner().

◆ emitParallelOrTeamsOutlinedFunction()

static llvm::Value* emitParallelOrTeamsOutlinedFunction ( CodeGenModule CGM,
const OMPExecutableDirective D,
const CapturedStmt CS,
const VarDecl ThreadIDVar,
OpenMPDirectiveKind  InnermostKind,
const StringRef  OutlinedHelperName,
const RegionCodeGenTy CodeGen 
)
static

◆ emitPrivatesInit()

static void emitPrivatesInit ( CodeGenFunction CGF,
const OMPExecutableDirective D,
Address  KmpTaskSharedsPtr,
LValue  TDBase,
const RecordDecl KmpTaskTWithPrivatesQTyRD,
QualType  SharedsTy,
QualType  SharedsPtrTy,
const OMPTaskDataTy Data,
ArrayRef< PrivateDataTy >  Privates,
bool  ForDup 
)
static

◆ emitProxyTaskFunction()

static llvm::Value* emitProxyTaskFunction ( CodeGenModule CGM,
SourceLocation  Loc,
OpenMPDirectiveKind  Kind,
QualType  KmpInt32Ty,
QualType  KmpTaskTWithPrivatesPtrQTy,
QualType  KmpTaskTWithPrivatesQTy,
QualType  KmpTaskTQTy,
QualType  SharedsPtrTy,
llvm::Value TaskFunction,
llvm::Value TaskPrivatesMap 
)
static

Emit a proxy function which accepts kmp_task_t as the second argument.

kmp_int32 .omp_task_entry.(kmp_int32 gtid, kmp_task_t *tt) {
TaskFunction(gtid, tt->part_id, &tt->privates, task_privates_map, tt,
For taskloops:
tt->task_data.lb, tt->task_data.ub, tt->task_data.st, tt->task_data.liter,
tt->reductions, tt->shareds);
return 0;
}

Definition at line 3864 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::CodeGenFunction::Builder, clang::Type::castAs(), clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::Create(), clang::CodeGen::CGBuilderTy::CreatePointerBitCastOrAddrSpaceCast(), clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(), clang::CodeGen::CodeGenFunction::EmitLoadOfPointerLValue(), clang::CodeGen::CodeGenFunction::EmitLoadOfScalar(), clang::CodeGen::CodeGenFunction::EmitLValueForField(), clang::CodeGen::CodeGenFunction::EmitStoreThroughLValue(), clang::CodeGen::CodeGenFunction::FinishFunction(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar(), clang::Type::getAsTagDecl(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::CodeGen::LValue::getPointer(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::CodeGenModule::getTypes(), clang::InternalLinkage, clang::isOpenMPTaskLoopDirective(), clang::CodeGen::CodeGenFunction::MakeAddrLValue(), clang::ImplicitParamDecl::Other, clang::CodeGen::CodeGenFunction::ReturnValue, clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), clang::CodeGen::CodeGenFunction::StartFunction(), clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::QualType::withRestrict().

◆ emitReduceCombFunction()

static llvm::Value* emitReduceCombFunction ( CodeGenModule CGM,
SourceLocation  Loc,
ReductionCodeGen RCG,
unsigned  N,
const Expr ReductionOp,
const Expr LHS,
const Expr RHS,
const Expr PrivateRef 
)
static

Emits reduction combiner function:

void @.red_comb(void* %arg0, void* %arg1) {
%lhs = bitcast void* %arg0 to <type>*
%rhs = bitcast void* %arg1 to <type>*
%2 = <ReductionOp>(<type>* %lhs, <type>* %rhs)
store <type> %2, <type>* %lhs
ret void
}

Definition at line 5343 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::Create(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CodeGenFunction::disableDebugInfo(), clang::CodeGen::ReductionCodeGen::emitAggregateType(), clang::CodeGen::CodeGenFunction::EmitLoadOfPointer(), clang::CodeGen::CodeGenFunction::EmitLoadOfScalar(), clang::CodeGen::CodeGenFunction::FinishFunction(), generateUniqueName(), clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::CodeGen::ReductionCodeGen::getSizes(), clang::ASTContext::getSizeType(), clang::CodeGen::CodeGenModule::getTypes(), clang::InternalLinkage, clang::ImplicitParamDecl::Other, clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize(), clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), and clang::CodeGen::CodeGenFunction::StartFunction().

Referenced by emitReduceFiniFunction().

◆ emitReduceFiniFunction()

static llvm::Value* emitReduceFiniFunction ( CodeGenModule CGM,
SourceLocation  Loc,
ReductionCodeGen RCG,
unsigned  N 
)
static

Emits reduction finalizer function:

void @.red_fini(void* %arg) {
%0 = bitcast void* %arg to <type>*
<destroy>(<type>* %0)
ret void
}

Definition at line 5417 of file CGOpenMPRuntime.cpp.

References addFieldToRecordDecl(), clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::CodeGenFunction::Builder, clang::ASTContext::buildImplicitRecord(), clang::Create(), clang::CodeGen::CodeGenFunction::CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreatePointerBitCastOrAddrSpaceCast(), clang::CodeGen::createRuntimeFunction(), clang::CodeGen::CodeGenFunction::disableDebugInfo(), clang::CodeGen::ReductionCodeGen::emitAggregateType(), clang::CodeGen::CodeGenFunction::EmitCastToVoidPtr(), clang::CodeGen::CodeGenFunction::EmitCheckedInBoundsGEP(), clang::CodeGen::ReductionCodeGen::emitCleanups(), clang::CodeGen::CodeGenFunction::EmitLoadOfPointer(), clang::CodeGen::CodeGenFunction::EmitLoadOfScalar(), clang::CodeGen::CodeGenFunction::EmitLValueForField(), clang::CodeGen::CodeGenFunction::EmitNullInitialization(), emitReduceCombFunction(), emitReduceInitFunction(), clang::CodeGen::CodeGenFunction::EmitRuntimeCall(), clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), clang::CodeGen::emitTaskReductionInit(), clang::CodeGen::CodeGenFunction::FinishFunction(), generateUniqueName(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar(), clang::ASTContext::getConstantArrayType(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::ASTContext::getIntTypeForBitwidth(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::CodeGen::Address::getPointer(), clang::CodeGen::LValue::getPointer(), clang::ASTContext::getRecordType(), clang::CodeGen::ReductionCodeGen::getSharedLValue(), clang::CodeGen::ReductionCodeGen::getSizes(), clang::ASTContext::getSizeType(), clang::CodeGen::CGOpenMPRuntime::getThreadID(), clang::CodeGen::LValue::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::CodeGenFunction::HaveInsertPoint(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::InternalLinkage, clang::CodeGen::CodeGenTypeCache::IntTy, clang::CodeGen::CodeGenFunction::MakeNaturalAlignAddrLValue(), clang::CodeGen::ReductionCodeGen::needCleanups(), clang::ArrayType::Normal, OMPRTL__kmpc_task_reduction_init, clang::ImplicitParamDecl::Other, clang::CodeGen::OMPTaskDataTy::ReductionCopies, clang::CodeGen::OMPTaskDataTy::ReductionOps, clang::CodeGen::OMPTaskDataTy::ReductionVars, clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), clang::CodeGen::CodeGenTypeCache::SizeTy, clang::TagDecl::startDefinition(), clang::CodeGen::CodeGenFunction::StartFunction(), clang::CodeGen::ReductionCodeGen::usesReductionInitializer(), clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::ASTContext::VoidPtrTy.

◆ emitReduceInitFunction()

static llvm::Value* emitReduceInitFunction ( CodeGenModule CGM,
SourceLocation  Loc,
ReductionCodeGen RCG,
unsigned  N 
)
static

◆ emitReductionCombiner()

static void emitReductionCombiner ( CodeGenFunction CGF,
const Expr ReductionOp 
)
static

◆ emitTaskDupFunction()

static llvm::Value* emitTaskDupFunction ( CodeGenModule CGM,
SourceLocation  Loc,
const OMPExecutableDirective D,
QualType  KmpTaskTWithPrivatesPtrQTy,
const RecordDecl KmpTaskTWithPrivatesQTyRD,
const RecordDecl KmpTaskTQTyRD,
QualType  SharedsTy,
QualType  SharedsPtrTy,
const OMPTaskDataTy Data,
ArrayRef< PrivateDataTy >  Privates,
bool  WithLastIter 
)
static

◆ emitTaskPrivateMappingFunction()

static llvm::Value* emitTaskPrivateMappingFunction ( CodeGenModule CGM,
SourceLocation  Loc,
ArrayRef< const Expr *>  PrivateVars,
ArrayRef< const Expr *>  FirstprivateVars,
ArrayRef< const Expr *>  LastprivateVars,
QualType  PrivatesQTy,
ArrayRef< PrivateDataTy >  Privates 
)
static

Emit a privates mapping function for correct handling of private and firstprivate variables.

void .omp_task_privates_map.(const .privates. *noalias privs, <ty1>
**noalias priv1,..., <tyn> **noalias privn) {
*priv1 = &.privates.priv1;
...;
*privn = &.privates.privn;
}

Definition at line 4020 of file CGOpenMPRuntime.cpp.

References clang::ImplicitParamDecl::Create(), clang::CodeGen::CodeGenModule::getContext(), clang::Expr::getType(), and clang::ImplicitParamDecl::Other.

◆ emitX86DeclareSimdFunction()

static void emitX86DeclareSimdFunction ( const FunctionDecl FD,
llvm::Function *  Fn,
const llvm::APSInt &  VLENVal,
ArrayRef< ParamAttrTy >  ParamAttrs,
OMPDeclareSimdDeclAttr::BranchStateTy  State 
)
static

Definition at line 7621 of file CGOpenMPRuntime.cpp.

◆ evaluateCDTSize()

static unsigned evaluateCDTSize ( const FunctionDecl FD,
ArrayRef< ParamAttrTy >  ParamAttrs 
)
static

◆ generateUniqueName()

static std::string generateUniqueName ( StringRef  Prefix,
SourceLocation  Loc,
unsigned  N 
)
static

Generates unique name for artificial threadprivate variables.

Format is: <Prefix> "." <Loc_raw_encoding> "_" <N>

Definition at line 5262 of file CGOpenMPRuntime.cpp.

Referenced by emitReduceCombFunction(), emitReduceFiniFunction(), emitReduceInitFunction(), and clang::CodeGen::emitTaskReductionFixups().

◆ getCancellationKind()

static RTCancelKind getCancellationKind ( OpenMPDirectiveKind  CancelRegion)
static

◆ getIdentAlign()

static CharUnits getIdentAlign ( CodeGenModule CGM)
static

◆ getIdentSize()

static CharUnits getIdentSize ( CodeGenModule CGM)
static

◆ getOffsetOfIdentField()

static CharUnits getOffsetOfIdentField ( IdentFieldIndex  Field)
static

Definition at line 1280 of file CGOpenMPRuntime.cpp.

References clang::CharUnits::fromQuantity().

◆ getReductionInit()

static const OMPDeclareReductionDecl* getReductionInit ( const Expr ReductionOp)
static

Check if the combiner is a call to UDR combiner and if it is so return the UDR decl used for reduction.

Definition at line 732 of file CGOpenMPRuntime.cpp.

Referenced by clang::CodeGen::ReductionCodeGen::emitInitialization(), and clang::CodeGen::ReductionCodeGen::usesReductionInitializer().

◆ getRuntimeSchedule() [1/2]

static OpenMPSchedType getRuntimeSchedule ( OpenMPScheduleClauseKind  ScheduleKind,
bool  Chunked,
bool  Ordered 
)
static

◆ getRuntimeSchedule() [2/2]

static OpenMPSchedType getRuntimeSchedule ( OpenMPDistScheduleClauseKind  ScheduleKind,
bool  Chunked 
)
static

Map the OpenMP distribute schedule to the runtime enumeration.

Definition at line 2941 of file CGOpenMPRuntime.cpp.

References OMP_dist_sch_static, and OMP_dist_sch_static_chunked.

◆ getTargetEntryUniqueInfo()

static void getTargetEntryUniqueInfo ( ASTContext C,
SourceLocation  Loc,
unsigned &  DeviceID,
unsigned &  FileID,
unsigned &  LineNum 
)
static

Obtain information that uniquely identifies a target entry.

This consists of the file and device IDs as well as line number associated with the relevant entry source location.

Definition at line 5735 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::emitTargetOutlinedFunction(), clang::CodeGen::CGOpenMPRuntime::emitTargetOutlinedFunctionHelper(), clang::SourceManager::getPresumedLoc(), clang::ASTContext::getSourceManager(), clang::SourceLocation::isFileID(), clang::SourceLocation::isValid(), and SM.

Referenced by clang::CodeGen::CGOpenMPRuntime::emitTargetOutlinedFunctionHelper().

◆ ignoreCompoundStmts()

static const Stmt* ignoreCompoundStmts ( const Stmt Body)
static

discard all CompoundStmts intervening between two constructs

Definition at line 5834 of file CGOpenMPRuntime.cpp.

Referenced by emitNumTeamsForTargetDirective(), and emitNumThreadsForTargetDirective().

◆ loadToBegin()

static LValue loadToBegin ( CodeGenFunction CGF,
QualType  BaseTy,
QualType  ElTy,
LValue  BaseLV 
)
static

◆ stable_sort_comparator()

static bool stable_sort_comparator ( const PrivateDataTy  P1,
const PrivateDataTy  P2 
)
static

Definition at line 4104 of file CGOpenMPRuntime.cpp.

Variable Documentation

◆ ident_t

ident_t

Definition at line 482 of file CGOpenMPRuntime.cpp.