clang  13.0.0git
Enumerations | Functions
CGOpenMPRuntime.cpp File Reference
#include "CGOpenMPRuntime.h"
#include "CGCXXABI.h"
#include "CGCleanup.h"
#include "CGRecordLayout.h"
#include "CodeGenFunction.h"
#include "clang/AST/APValue.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/OpenMPClause.h"
#include "clang/AST/StmtOpenMP.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/Basic/BitmaskEnum.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/OpenMPKinds.h"
#include "clang/Basic/SourceManager.h"
#include "clang/CodeGen/ConstantInitBuilder.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SetOperations.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/AtomicOrdering.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <numeric>
Include dependency graph for CGOpenMPRuntime.cpp:

Go to the source code of this file.

Enumerations

enum  OpenMPOffloadingRequiresDirFlags : int64_t
 Values for bit flags for marking which requires clauses have been used. More...
 
enum  OpenMPOffloadingReservedDeviceIDs
 

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 const VarDeclgetBaseDecl (const Expr *Ref, const DeclRefExpr *&DE)
 
static FieldDecladdFieldToRecordDecl (ASTContext &C, DeclContext *DC, QualType FieldTy)
 
static llvm::Function * emitCombinerOrInitializer (CodeGenModule &CGM, QualType Ty, const Expr *CombinerInitializer, const VarDecl *In, const VarDecl *Out, bool IsCombiner)
 
static llvm::Function * emitParallelOrTeamsOutlinedFunction (CodeGenModule &CGM, const OMPExecutableDirective &D, const CapturedStmt *CS, const VarDecl *ThreadIDVar, OpenMPDirectiveKind InnermostKind, const StringRef OutlinedHelperName, const RegionCodeGenTy &CodeGen)
 
static void buildStructValue (ConstantStructBuilder &Fields, CodeGenModule &CGM, const RecordDecl *RD, const CGRecordLayout &RL, ArrayRef< llvm::Constant * > Data)
 
template<class... As>
static llvm::GlobalVariable * createGlobalStruct (CodeGenModule &CGM, QualType Ty, bool IsConstant, ArrayRef< llvm::Constant * > Data, const Twine &Name, As &&... Args)
 
template<typename T >
static void createConstantGlobalStructAndAddToParent (CodeGenModule &CGM, QualType Ty, ArrayRef< llvm::Constant * > Data, T &Parent)
 
static StringRef getIdentStringFromSourceLocation (CodeGenFunction &CGF, SourceLocation Loc, SmallString< 128 > &Buffer)
 
static void getTargetEntryUniqueInfo (ASTContext &C, SourceLocation Loc, unsigned &DeviceID, unsigned &FileID, unsigned &LineNum)
 Obtain information that uniquely identifies a target entry. More...
 
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, SourceLocation Loc)
 
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 (CodeGenModule &CGM, OpenMPSchedType Schedule, OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2)
 
static void emitForStaticInitCall (CodeGenFunction &CGF, llvm::Value *UpdateLocation, llvm::Value *ThreadId, llvm::FunctionCallee ForStaticInitFunction, OpenMPSchedType Schedule, OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2, const CGOpenMPRuntime::StaticRTInput &Values)
 
static bool isAllocatableDecl (const VarDecl *VD)
 
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::Function * emitProxyTaskFunction (CodeGenModule &CGM, SourceLocation Loc, OpenMPDirectiveKind Kind, QualType KmpInt32Ty, QualType KmpTaskTWithPrivatesPtrQTy, QualType KmpTaskTWithPrivatesQTy, QualType KmpTaskTQTy, QualType SharedsPtrTy, llvm::Function *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, const OMPTaskDataTy &Data, QualType PrivatesQTy, ArrayRef< PrivateDataTy > Privates)
 Emit a privates mapping function for correct handling of private and firstprivate variables. More...
 
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, ArrayRef< PrivateDataTy > Privates)
 Checks if destructor function is required to be generated. More...
 
static std::pair< llvm::Value *, llvm::Value * > getPointerAndSize (CodeGenFunction &CGF, const Expr *E)
 
static void getKmpAffinityType (ASTContext &C, QualType &KmpTaskAffinityInfoTy)
 Builds kmp_depend_info, if it is not built yet, and builds flags type. More...
 
static RTLDependenceKindTy translateDependencyKind (OpenMPDependClauseKind K)
 Translates internal dependency kind into the runtime kind. More...
 
static void getDependTypes (ASTContext &C, QualType &KmpDependInfoTy, QualType &FlagsTy)
 Builds kmp_depend_info, if it is not built yet, and builds flags type. More...
 
static void emitDependData (CodeGenFunction &CGF, QualType &KmpDependInfoTy, llvm::PointerUnion< unsigned *, LValue * > Pos, const OMPTaskDataTy::DependData &Data, Address DependenciesArray)
 
static SmallVector< llvm::Value *, 4 > emitDepobjElementsSizes (CodeGenFunction &CGF, QualType &KmpDependInfoTy, const OMPTaskDataTy::DependData &Data)
 
static void emitDepobjElements (CodeGenFunction &CGF, QualType &KmpDependInfoTy, LValue PosLVal, const OMPTaskDataTy::DependData &Data, Address DependenciesArray)
 
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 (CodeGenModule &CGM, StringRef Prefix, const Expr *Ref)
 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 bool isTrivial (ASTContext &Ctx, const Expr *E)
 Checks if the expression is constant or does not have non-trivial function calls. More...
 
static llvm::ValueemitNumTeamsForTargetDirective (CodeGenFunction &CGF, const OMPExecutableDirective &D)
 Emit the number of teams for a target directive. More...
 
static llvm::ValuegetNumThreads (CodeGenFunction &CGF, const CapturedStmt *CS, llvm::Value *DefaultThreadLimitVal)
 
static llvm::ValueemitNumThreadsForTargetDirective (CodeGenFunction &CGF, const OMPExecutableDirective &D)
 Emit the number of threads for a target directive. More...
 
static void emitNonContiguousDescriptor (CodeGenFunction &CGF, MappableExprsHandler::MapCombinedInfoTy &CombinedInfo, CGOpenMPRuntime::TargetDataInfo &Info)
 
llvm::Constant * emitMappingInformation (CodeGenFunction &CGF, llvm::OpenMPIRBuilder &OMPBuilder, MappableExprsHandler::MappingExprInfo &MapExprs)
 Emit a string constant containing the names of the values mapped to the offloading runtime library. More...
 
static void emitOffloadingArrays (CodeGenFunction &CGF, MappableExprsHandler::MapCombinedInfoTy &CombinedInfo, CGOpenMPRuntime::TargetDataInfo &Info, llvm::OpenMPIRBuilder &OMPBuilder, bool IsNonContiguous=false)
 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, llvm::Value *&MapNamesArrayArg, llvm::Value *&MappersArrayArg, CGOpenMPRuntime::TargetDataInfo &Info, const ArgumentsOptions &Options=ArgumentsOptions())
 Emit the arguments to be passed to the runtime library based on the arrays of base pointers, pointers, sizes, map types, and mappers. More...
 
static const OMPExecutableDirectivegetNestedDistributeDirective (ASTContext &Ctx, const OMPExecutableDirective &D)
 Check for inner distribute directive. More...
 
static bool isAssumedToBeNotEmitted (const ValueDecl *VD, bool IsDevice)
 
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)
 
static bool getAArch64MTV (QualType QT, ParamKindTy Kind)
 Maps To Vector (MTV), as defined in 3.1.1 of the AAVFABI. More...
 
static bool getAArch64PBV (QualType QT, ASTContext &C)
 Pass By Value (PBV), as defined in 3.1.2 of the AAVFABI. More...
 
static unsigned getAArch64LS (QualType QT, ParamKindTy Kind, ASTContext &C)
 Computes the lane size (LS) of a return type or of an input parameter, as defined by LS(P) in 3.2.1 of the AAVFABI. More...
 
static std::tuple< unsigned, unsigned, boolgetNDSWDS (const FunctionDecl *FD, ArrayRef< ParamAttrTy > ParamAttrs)
 
static std::string mangleVectorParameters (ArrayRef< ParamAttrTy > ParamAttrs)
 Mangle the parameter part of the vector function name according to their OpenMP classification. More...
 
template<typename T >
static void addAArch64VectorName (T VLEN, StringRef LMask, StringRef Prefix, char ISA, StringRef ParSeq, StringRef MangledName, bool OutputBecomesInput, llvm::Function *Fn)
 
static void addAArch64AdvSIMDNDSNames (unsigned NDS, StringRef Mask, StringRef Prefix, char ISA, StringRef ParSeq, StringRef MangledName, bool OutputBecomesInput, llvm::Function *Fn)
 
static void emitAArch64DeclareSimdFunction (CodeGenModule &CGM, const FunctionDecl *FD, unsigned UserVLEN, ArrayRef< ParamAttrTy > ParamAttrs, OMPDeclareSimdDeclAttr::BranchStateTy State, StringRef MangledName, char ISA, unsigned VecRegSize, llvm::Function *Fn, SourceLocation SLoc)
 Emit vector function attributes for AArch64, as defined in the AAVFABI. More...
 

Enumeration Type Documentation

◆ OpenMPOffloadingRequiresDirFlags

Values for bit flags for marking which requires clauses have been used.

Definition at line 482 of file CGOpenMPRuntime.cpp.

◆ OpenMPOffloadingReservedDeviceIDs

Definition at line 498 of file CGOpenMPRuntime.cpp.

Function Documentation

◆ addAArch64AdvSIMDNDSNames()

static void addAArch64AdvSIMDNDSNames ( unsigned  NDS,
StringRef  Mask,
StringRef  Prefix,
char  ISA,
StringRef  ParSeq,
StringRef  MangledName,
bool  OutputBecomesInput,
llvm::Function *  Fn 
)
static

Definition at line 11540 of file CGOpenMPRuntime.cpp.

References addAArch64VectorName().

Referenced by emitAArch64DeclareSimdFunction().

◆ addAArch64VectorName()

template<typename T >
static void addAArch64VectorName ( VLEN,
StringRef  LMask,
StringRef  Prefix,
char  ISA,
StringRef  ParSeq,
StringRef  MangledName,
bool  OutputBecomesInput,
llvm::Function *  Fn 
)
static

◆ addFieldToRecordDecl()

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

◆ addMonoNonMonoModifier()

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

◆ buildStructValue()

static void buildStructValue ( ConstantStructBuilder Fields,
CodeGenModule CGM,
const RecordDecl RD,
const CGRecordLayout RL,
ArrayRef< llvm::Constant * >  Data 
)
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,
ArrayRef< PrivateDataTy >  Privates 
)
static

Checks if destructor function is required to be generated.

Returns
true if cleanups are required, false otherwise.

Definition at line 4043 of file CGOpenMPRuntime.cpp.

References clang::QualType::isDestructedType(), and P.

◆ checkInitIsRequired()

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

Check if duplication function is required for taskloops.

Definition at line 3944 of file CGOpenMPRuntime.cpp.

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

◆ createConstantGlobalStructAndAddToParent()

template<typename T >
static void createConstantGlobalStructAndAddToParent ( CodeGenModule CGM,
QualType  Ty,
ArrayRef< llvm::Constant * >  Data,
T &  Parent 
)
static

◆ createGlobalStruct()

template<class... As>
static llvm::GlobalVariable* createGlobalStruct ( CodeGenModule CGM,
QualType  Ty,
bool  IsConstant,
ArrayRef< llvm::Constant * >  Data,
const Twine &  Name,
As &&...  Args 
)
static

Definition at line 1369 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

◆ createPrivatesRecordDecl()

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

◆ emitAArch64DeclareSimdFunction()

static void emitAArch64DeclareSimdFunction ( CodeGenModule CGM,
const FunctionDecl FD,
unsigned  UserVLEN,
ArrayRef< ParamAttrTy >  ParamAttrs,
OMPDeclareSimdDeclAttr::BranchStateTy  State,
StringRef  MangledName,
char  ISA,
unsigned  VecRegSize,
llvm::Function *  Fn,
SourceLocation  SLoc 
)
static

◆ emitAddrOfVarFromArray()

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

Given an array of pointers to variables, project the address of a given variable.

Definition at line 2353 of file CGOpenMPRuntime.cpp.

◆ 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,
SourceLocation  Loc 
)
static

◆ emitDependData()

static void emitDependData ( CodeGenFunction CGF,
QualType KmpDependInfoTy,
llvm::PointerUnion< unsigned *, LValue * >  Pos,
const OMPTaskDataTy::DependData Data,
Address  DependenciesArray 
)
static

◆ emitDepobjElements()

static void emitDepobjElements ( CodeGenFunction CGF,
QualType KmpDependInfoTy,
LValue  PosLVal,
const OMPTaskDataTy::DependData Data,
Address  DependenciesArray 
)
static

◆ emitDepobjElementsSizes()

static SmallVector<llvm::Value *, 4> emitDepobjElementsSizes ( CodeGenFunction CGF,
QualType KmpDependInfoTy,
const OMPTaskDataTy::DependData Data 
)
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::FunctionCallee  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

◆ emitMappingInformation()

llvm::Constant* emitMappingInformation ( CodeGenFunction CGF,
llvm::OpenMPIRBuilder &  OMPBuilder,
MappableExprsHandler::MappingExprInfo &  MapExprs 
)

◆ emitNonContiguousDescriptor()

static void emitNonContiguousDescriptor ( CodeGenFunction CGF,
MappableExprsHandler::MapCombinedInfoTy &  CombinedInfo,
CGOpenMPRuntime::TargetDataInfo Info 
)
static

◆ emitNumTeamsForTargetDirective()

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

◆ emitNumThreadsForTargetDirective()

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

◆ emitOffloadingArrays()

static void emitOffloadingArrays ( CodeGenFunction CGF,
MappableExprsHandler::MapCombinedInfoTy &  CombinedInfo,
CGOpenMPRuntime::TargetDataInfo Info,
llvm::OpenMPIRBuilder &  OMPBuilder,
bool  IsNonContiguous = false 
)
static

◆ emitOffloadingArraysArgument()

static void emitOffloadingArraysArgument ( CodeGenFunction CGF,
llvm::Value *&  BasePointersArrayArg,
llvm::Value *&  PointersArrayArg,
llvm::Value *&  SizesArrayArg,
llvm::Value *&  MapTypesArrayArg,
llvm::Value *&  MapNamesArrayArg,
llvm::Value *&  MappersArrayArg,
CGOpenMPRuntime::TargetDataInfo Info,
const ArgumentsOptions &  Options = ArgumentsOptions() 
)
static

Emit the arguments to be passed to the runtime library based on the arrays of base pointers, pointers, sizes, map types, and mappers.

If ForEndCall, emit map types to be passed for the end of the region instead of the beginning.

Definition at line 9491 of file CGOpenMPRuntime.cpp.

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

◆ 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 5321 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::CGOpenMPRuntime::emitSingleReductionCombiner().

◆ emitParallelOrTeamsOutlinedFunction()

static llvm::Function* 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

Emit initialization for private variables in task-based directives.

Definition at line 3822 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreatePointerBitCastOrAddrSpaceCast(), clang::CodeGen::CodeGenFunction::CurCodeDecl, clang::CodeGen::Decl, clang::CodeGen::CodeGenFunction::EmitAggregateAssign(), clang::CodeGen::CodeGenFunction::EmitAnyExprToMem(), clang::CodeGen::CodeGenFunction::EmitExprAsInit(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::CodeGenFunction::EmitLValueForField(), clang::CodeGen::CodeGenFunction::EmitOMPAggregateAssign(), clang::RecordDecl::field_begin(), clang::CodeGen::OMPTaskDataTy::FirstprivateVars, clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar(), clang::VarDecl::getAnyInitializer(), clang::OMPExecutableDirective::getCapturedStmt(), clang::CodeGen::CodeGenFunction::getContext(), clang::Decl::getDeclContext(), clang::OMPExecutableDirective::getDirectiveKind(), clang::CodeGen::LValue::getPointer(), clang::CodeGen::LValue::getTBAAInfo(), clang::CodeGen::LValue::getType(), clang::Type::isArrayType(), clang::isOpenMPTargetDataManagementDirective(), clang::isOpenMPTargetExecutionDirective(), clang::isOpenMPTaskLoopDirective(), clang::CodeGen::CodeGenFunction::isTrivialInitializer(), clang::CodeGen::Address::isValid(), clang::CodeGen::CodeGenFunction::LambdaCaptureFields, clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), clang::CodeGen::CodeGenFunction::MakeAddrLValue(), and clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize().

◆ emitProxyTaskFunction()

static llvm::Function* emitProxyTaskFunction ( CodeGenModule CGM,
SourceLocation  Loc,
OpenMPDirectiveKind  Kind,
QualType  KmpInt32Ty,
QualType  KmpTaskTWithPrivatesPtrQTy,
QualType  KmpTaskTWithPrivatesQTy,
QualType  KmpTaskTQTy,
QualType  SharedsPtrTy,
llvm::Function *  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 3560 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ImplicitParamDecl::Other, string(), 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 5929 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ImplicitParamDecl::Other, and string().

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

◆ emitReduceFiniFunction()

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

◆ emitReduceInitFunction()

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

◆ emitReductionCombiner()

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

Emit reduction combiner.

If the combiner is a simple expression emit it as is, otherwise consider it as combiner of UDR decl and emit it as a call of UDR combiner function.

Definition at line 5395 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), and clang::CodeGen::CGOpenMPRuntime::getUserDefinedReduction().

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

◆ 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

Emit task_dup function (for initialization of private/firstprivate/lastprivate vars and last_iter flag)

void __task_dup_entry(kmp_task_t *task_dst, const kmp_task_t *task_src, int
lastpriv) {
// setup lastprivate flag
task_dst->last = lastpriv;
// could be constructor calls here...
}

Definition at line 3972 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ImplicitParamDecl::Other, and string().

◆ emitTaskPrivateMappingFunction()

static llvm::Value* emitTaskPrivateMappingFunction ( CodeGenModule CGM,
SourceLocation  Loc,
const OMPTaskDataTy Data,
QualType  PrivatesQTy,
ArrayRef< PrivateDataTy >  Privates 
)
static

◆ emitX86DeclareSimdFunction()

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

◆ evaluateCDTSize()

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

◆ generateUniqueName()

static std::string generateUniqueName ( CodeGenModule CGM,
StringRef  Prefix,
const Expr Ref 
)
static

Generates unique name for artificial threadprivate variables.

Format is: <Prefix> "." <Decl_mangled_name> "_" "<Decl_start_loc_raw_enc>"

Definition at line 5834 of file CGOpenMPRuntime.cpp.

References getBaseDecl(), clang::VarDecl::getCanonicalDecl(), and string().

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

◆ getAArch64LS()

static unsigned getAArch64LS ( QualType  QT,
ParamKindTy  Kind,
ASTContext C 
)
static

Computes the lane size (LS) of a return type or of an input parameter, as defined by LS(P) in 3.2.1 of the AAVFABI.

TODO: Add support for references, section 3.2.1, item 1.

Definition at line 11439 of file CGOpenMPRuntime.cpp.

References getAArch64MTV(), getAArch64PBV(), clang::QualType::getCanonicalType(), clang::Type::getPointeeType(), and clang::Type::isPointerType().

Referenced by getNDSWDS().

◆ getAArch64MTV()

static bool getAArch64MTV ( QualType  QT,
ParamKindTy  Kind 
)
static

Maps To Vector (MTV), as defined in 3.1.1 of the AAVFABI.

TODO: Need to implement the behavior for reference marked with a var or no linear modifiers (1.b in the section). For this, we need to extend ParamKindTy to support the linear modifiers.

Definition at line 11393 of file CGOpenMPRuntime.cpp.

References clang::QualType::getCanonicalType(), and clang::Type::isVoidType().

Referenced by getAArch64LS(), and getNDSWDS().

◆ getAArch64PBV()

static bool getAArch64PBV ( QualType  QT,
ASTContext C 
)
static

Pass By Value (PBV), as defined in 3.1.2 of the AAVFABI.

Definition at line 11414 of file CGOpenMPRuntime.cpp.

References clang::QualType::getCanonicalType(), clang::Type::isFloatingType(), clang::Type::isIntegerType(), and clang::Type::isPointerType().

Referenced by getAArch64LS(), and getNDSWDS().

◆ getBaseDecl()

static const VarDecl* getBaseDecl ( const Expr Ref,
const DeclRefExpr *&  DE 
)
static

◆ getCancellationKind()

static RTCancelKind getCancellationKind ( OpenMPDirectiveKind  CancelRegion)
static

◆ getDependTypes()

static void getDependTypes ( ASTContext C,
QualType KmpDependInfoTy,
QualType FlagsTy 
)
static

◆ getIdentStringFromSourceLocation()

static StringRef getIdentStringFromSourceLocation ( CodeGenFunction CGF,
SourceLocation  Loc,
SmallString< 128 > &  Buffer 
)
static

◆ getKmpAffinityType()

static void getKmpAffinityType ( ASTContext C,
QualType KmpTaskAffinityInfoTy 
)
static

Builds kmp_depend_info, if it is not built yet, and builds flags type.

Definition at line 4170 of file CGOpenMPRuntime.cpp.

References addFieldToRecordDecl(), clang::RecordDecl::completeDefinition(), clang::QualType::isNull(), and clang::TagDecl::startDefinition().

◆ getNDSWDS()

static std::tuple<unsigned, unsigned, bool> getNDSWDS ( const FunctionDecl FD,
ArrayRef< ParamAttrTy >  ParamAttrs 
)
static

◆ getNestedDistributeDirective()

static const OMPExecutableDirective* getNestedDistributeDirective ( ASTContext Ctx,
const OMPExecutableDirective D 
)
static

◆ getNumThreads()

static llvm::Value* getNumThreads ( CodeGenFunction CGF,
const CapturedStmt CS,
llvm::Value DefaultThreadLimitVal 
)
static

◆ getPointerAndSize()

static std::pair<llvm::Value *, llvm::Value *> getPointerAndSize ( CodeGenFunction CGF,
const Expr E 
)
static

◆ 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 608 of file CGOpenMPRuntime.cpp.

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

◆ getRuntimeSchedule() [1/2]

static OpenMPSchedType getRuntimeSchedule ( OpenMPDistScheduleClauseKind  ScheduleKind,
bool  Chunked 
)
static

Map the OpenMP distribute schedule to the runtime enumeration.

Definition at line 2638 of file CGOpenMPRuntime.cpp.

◆ getRuntimeSchedule() [2/2]

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

◆ getTargetEntryUniqueInfo()

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

◆ isAllocatableDecl()

static bool isAllocatableDecl ( const VarDecl VD)
static

◆ isAssumedToBeNotEmitted()

static bool isAssumedToBeNotEmitted ( const ValueDecl VD,
bool  IsDevice 
)
static

◆ isTrivial()

static bool isTrivial ( ASTContext Ctx,
const Expr E 
)
static

Checks if the expression is constant or does not have non-trivial function calls.

Definition at line 6546 of file CGOpenMPRuntime.cpp.

References clang::Expr::hasNonTrivialCall(), clang::Expr::HasSideEffects(), clang::Expr::isEvaluatable(), and clang::Expr::SE_AllowUndefinedBehavior.

Referenced by clang::TextNodeDumper::VisitCXXRecordDecl().

◆ loadToBegin()

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

◆ mangleVectorParameters()

static std::string mangleVectorParameters ( ArrayRef< ParamAttrTy >  ParamAttrs)
static

Mangle the parameter part of the vector function name according to their OpenMP classification.

The mangling function is defined in section 3.5 of the AAVFABI.

Definition at line 11491 of file CGOpenMPRuntime.cpp.

References string().

Referenced by emitAArch64DeclareSimdFunction().

◆ translateDependencyKind()

static RTLDependenceKindTy translateDependencyKind ( OpenMPDependClauseKind  K)
static

Translates internal dependency kind into the runtime kind.

Definition at line 4586 of file CGOpenMPRuntime.cpp.

References clang::OMPC_DEPEND_unknown.

type
std::arg
__DEVICE__ _Tp arg(const std::complex< _Tp > &__c)
Definition: complex_cmath.h:40