clang  8.0.0svn
Namespaces | Classes | Typedefs | Enumerations | Functions | Variables
clang::CodeGen Namespace Reference

Namespaces

 swiftcall
 

Classes

class  ABIArgInfo
 ABIArgInfo - Helper class to encapsulate information about how a specific C type should be passed to or returned from a function. More...
 
class  ABIInfo
 ABIInfo - Target specific hooks for defining how a type should be passed or returned from functions. More...
 
class  Address
 An aligned address. More...
 
class  AggValueSlot
 An aggregate value slot. More...
 
class  ApplyDebugLocation
 A scoped helper to set the current debug location to the specified location or preferred location of the specified Expr. More...
 
class  ApplyInlineDebugLocation
 A scoped helper to set the current debug location to an inlined location. More...
 
class  BlockByrefHelpers
 A pair of helper functions for a __block variable. More...
 
class  BlockByrefInfo
 Information about the layout of a __block variable. More...
 
class  BlockFieldFlags
 
class  BlockFlags
 
struct  BranchFixup
 A branch fixup. More...
 
struct  CallArg
 
class  CallArgList
 CallArgList - Type for representing both the value and type of arguments in a call. More...
 
struct  CatchRetScope
 
struct  CatchTypeInfo
 The MS C++ ABI needs a pointer to RTTI data plus some flags to describe the type of a catch handler, so we use this wrapper. More...
 
struct  CGBitFieldInfo
 Structure with information about how a bitfield should be accessed. More...
 
class  CGBlockInfo
 CGBlockInfo - Information to generate a block literal. More...
 
class  CGBuilderInserter
 This is an IRBuilder insertion helper that forwards to CodeGenFunction::InsertHelper, which adds necessary metadata to instructions. More...
 
class  CGBuilderTy
 
class  CGCallee
 All available information about a concrete callee. More...
 
class  CGCalleeInfo
 Abstract information about a function or function prototype. More...
 
struct  CGCoroData
 
class  CGCUDARuntime
 
class  CGCXXABI
 Implements C++ ABI-specific code generation functions. More...
 
class  CGDebugInfo
 This class gathers all debug information during compilation and is responsible for emitting to llvm globals or pass directly to the backend. More...
 
class  CGFunctionInfo
 CGFunctionInfo - Class to encapsulate the information about a function definition. More...
 
struct  CGFunctionInfoArgInfo
 
class  CGObjCRuntime
 Implements runtime-specific code generation functions. More...
 
class  CGOpenCLRuntime
 
class  CGOpenMPRuntime
 
class  CGOpenMPRuntimeNVPTX
 
class  CGRecordLayout
 CGRecordLayout - This class handles struct and union layout info while lowering AST types to LLVM types. More...
 
class  CodeGenFunction
 CodeGenFunction - This class organizes the per-function state that is used while generating LLVM code. More...
 
class  CodeGenModule
 This class organizes the cross-function state that is used while generating LLVM code. More...
 
class  CodeGenPGO
 Per-function PGO state. More...
 
class  CodeGenTBAA
 CodeGenTBAA - This class organizes the cross-module state that is used while lowering AST types to LLVM types. More...
 
struct  CodeGenTypeCache
 This structure provides a set of types that are commonly used during IR emission. More...
 
class  CodeGenTypes
 This class organizes the cross-module state that is used while lowering AST types to LLVM types. More...
 
class  CodeGenVTables
 
class  ConstantAddress
 A specialization of Address that requires the address to be an LLVM Constant. More...
 
class  ConstantAggregateBuilderBase
 A concrete base class for struct and array aggregate initializer builders. More...
 
class  ConstantAggregateBuilderTemplateBase
 
class  ConstantArrayBuilder
 A helper class of ConstantInitBuilder, used for building constant array initializers. More...
 
class  ConstantArrayBuilderTemplateBase
 
class  ConstantEmitter
 
class  ConstantInitBuilder
 The standard implementation of ConstantInitBuilder used in Clang. More...
 
class  ConstantInitBuilderBase
 
class  ConstantInitBuilderTemplateBase
 A template class designed to allow other frontends to easily customize the builder classes used by ConstantInitBuilder, and thus to extend the API to work with the abstractions they prefer. More...
 
struct  ConstantInitBuilderTraits
 
class  ConstantInitFuture
 A "future" for a completed constant initializer, which can be passed around independently of any sub-builders (but not the original parent). More...
 
class  ConstantStructBuilder
 A helper class of ConstantInitBuilder, used for building constant struct initializers. More...
 
class  ConstantStructBuilderTemplateBase
 A template class designed to allow other frontends to easily customize the builder classes used by ConstantInitBuilder, and thus to extend the API to work with the abstractions they prefer. More...
 
class  CoverageMappingGen
 Organizes the per-function state that is used while generating code coverage mapping data. More...
 
class  CoverageMappingModuleGen
 Organizes the cross-function state that is used while generating code coverage mapping data. More...
 
struct  DispatchRTInput
 struct with the values to be passed to the dispatch runtime function More...
 
struct  DominatingLLVMValue
 Helper class with most of the code for saving a value for a conditional expression cleanup. More...
 
struct  DominatingPointer
 
struct  DominatingPointer< T, false >
 
struct  DominatingPointer< T, true >
 A partial specialization of DominatingValue for llvm::Values that might be llvm::Instructions. More...
 
struct  DominatingValue
 A metaprogramming class for ensuring that a value will dominate an arbitrary position in a function. More...
 
struct  DominatingValue< Address >
 A specialization of DominatingValue for Address. More...
 
struct  DominatingValue< RValue >
 A specialization of DominatingValue for RValue. More...
 
struct  DominatingValue< T * >
 
class  EHCatchScope
 A scope which attempts to handle some, possibly all, types of exceptions. More...
 
class  EHCleanupScope
 A cleanup scope which generates the cleanup blocks lazily. More...
 
class  EHFilterScope
 An exceptions scope which filters exceptions thrown through it. More...
 
class  EHPadEndScope
 
struct  EHPersonality
 The exceptions personality for a function. More...
 
class  EHScope
 A protected scope for zero-cost EH handling. More...
 
class  EHScopeStack
 A stack of scopes which respond to exceptions, including cleanups and catch blocks. More...
 
class  EHTerminateScope
 An exceptions scope which calls std::terminate if any exception reaches it. More...
 
class  FunctionArgList
 FunctionArgList - Type for representing both the decl and type of parameters to a function. More...
 
class  InstrProfStats
 This class records statistics on instrumentation based profiling. More...
 
struct  InvariantValue
 
struct  LoopAttributes
 Attributes that may be specified on loops. More...
 
class  LoopInfo
 Information used when generating a structured loop. More...
 
class  LoopInfoStack
 A stack of loop information corresponding to loop nesting levels. More...
 
class  LValue
 LValue - This represents an lvalue references. More...
 
class  LValueBaseInfo
 
struct  ObjCEntrypoints
 
class  OffloadEntriesInfoManagerTy
 Entity that registers the offloading constants that were emitted so far. More...
 
struct  OMPTaskDataTy
 
struct  OrderGlobalInits
 
class  PrePostActionTy
 A basic class for pre|post-action for advanced codegen sequence for OpenMP region. More...
 
class  ReductionCodeGen
 Class intended to support codegen of all kind of the reduction clauses. More...
 
struct  ReductionOptionsTy
 
class  RegionCodeGenTy
 Class provides a way to call simple version of codegen for OpenMP region, or an advanced with possible pre|post-actions in codegen. More...
 
class  RequiredArgs
 A class for recording the number of arguments that a function signature requires. More...
 
class  ReturnValueSlot
 ReturnValueSlot - Contains the address where the return value of a function can be stored, and whether the address is volatile or not. More...
 
class  RValue
 RValue - This trivial value class is used to represent the result of an expression that is evaluated. More...
 
class  SanitizerMetadata
 
struct  StaticRTInput
 Struct with the values to be passed to the static runtime function. More...
 
class  SwiftABIInfo
 A refining implementation of ABIInfo for targets that support swiftcall. More...
 
class  TargetCodeGenInfo
 TargetCodeGenInfo - This class organizes various target-specific codegeneration issues, like target-specific attributes, builtins and so on. More...
 
class  TargetDataInfo
 Struct that keeps all the relevant information that should be kept throughout a 'target data' region. More...
 
struct  TaskResultTy
 
struct  TBAAAccessInfo
 
class  VarBypassDetector
 The class detects jumps which bypass local variables declaration: goto L; int a; L: More...
 

Typedefs

typedef CGBuilderInserter CGBuilderInserterTy
 
typedef llvm::IRBuilder< llvm::ConstantFolder, CGBuilderInserterTyCGBuilderBaseTy
 

Enumerations

enum  BlockByrefFlags {
  BLOCK_BYREF_HAS_COPY_DISPOSE = (1 << 25), BLOCK_BYREF_LAYOUT_MASK = (0xF << 28), BLOCK_BYREF_LAYOUT_EXTENDED = (1 << 28), BLOCK_BYREF_LAYOUT_NON_OBJECT = (2 << 28),
  BLOCK_BYREF_LAYOUT_STRONG = (3 << 28), BLOCK_BYREF_LAYOUT_WEAK = (4 << 28), BLOCK_BYREF_LAYOUT_UNRETAINED = (5 << 28)
}
 
enum  BlockLiteralFlags {
  BLOCK_IS_NOESCAPE = (1 << 23), BLOCK_HAS_COPY_DISPOSE = (1 << 25), BLOCK_HAS_CXX_OBJ = (1 << 26), BLOCK_IS_GLOBAL = (1 << 28),
  BLOCK_USE_STRET = (1 << 29), BLOCK_HAS_SIGNATURE = (1 << 30), BLOCK_HAS_EXTENDED_LAYOUT = (1u << 31)
}
 
enum  BlockFieldFlag_t {
  BLOCK_FIELD_IS_OBJECT = 0x03, BLOCK_FIELD_IS_BLOCK = 0x07, BLOCK_FIELD_IS_BYREF = 0x08, BLOCK_FIELD_IS_WEAK = 0x10,
  BLOCK_FIELD_IS_ARC = 0x40, BLOCK_BYREF_CALLER = 128, BLOCK_BYREF_CURRENT_MAX = 256
}
 
enum  ARCPreciseLifetime_t { ARCImpreciseLifetime, ARCPreciseLifetime }
 Does an ARC strong l-value have precise lifetime? More...
 
enum  AlignmentSource { AlignmentSource::Decl, AlignmentSource::AttributedType, AlignmentSource::Type }
 The source of the alignment of an l-value; an expression of confidence in the alignment actually matching the estimate. More...
 
enum  TypeEvaluationKind { TEK_Scalar, TEK_Complex, TEK_Aggregate }
 The kind of evaluation to perform on values of a particular type. More...
 
enum  SanitizerHandler { LIST_SANITIZER_CHECKS }
 
enum  ForDefinition_t : bool { NotForDefinition = false, ForDefinition = true }
 
enum  TBAAAccessKind : unsigned { TBAAAccessKind::Ordinary, TBAAAccessKind::MayAlias, TBAAAccessKind::Incomplete }
 
enum  StructorType { StructorType::Complete, StructorType::Base, StructorType::Deleting }
 
enum  CleanupKind : unsigned {
  EHCleanup = 0x1, NormalCleanup = 0x2, NormalAndEHCleanup = EHCleanup | NormalCleanup, InactiveCleanup = 0x4,
  InactiveEHCleanup = EHCleanup | InactiveCleanup, InactiveNormalCleanup = NormalCleanup | InactiveCleanup, InactiveNormalAndEHCleanup = NormalAndEHCleanup | InactiveCleanup, LifetimeMarker = 0x8,
  NormalEHLifetimeMarker = LifetimeMarker | NormalAndEHCleanup
}
 

Functions

const CGFunctionInfoarrangeObjCMessageSendSignature (CodeGenModule &CGM, const ObjCMethodDecl *MD, QualType receiverType)
 
const CGFunctionInfoarrangeFreeFunctionType (CodeGenModule &CGM, CanQual< FunctionProtoType > Ty, const FunctionDecl *FD)
 
const CGFunctionInfoarrangeFreeFunctionType (CodeGenModule &CGM, CanQual< FunctionNoProtoType > Ty)
 
const CGFunctionInfoarrangeCXXMethodType (CodeGenModule &CGM, const CXXRecordDecl *RD, const FunctionProtoType *FTP, const CXXMethodDecl *MD)
 
const CGFunctionInfoarrangeFreeFunctionCall (CodeGenModule &CGM, CanQualType returnType, ArrayRef< CanQualType > argTypes, FunctionType::ExtInfo info, RequiredArgs args)
 
llvm::FunctionType * convertFreeFunctionType (CodeGenModule &CGM, const FunctionDecl *FD)
 Returns null if the function type is incomplete and can't be lowered. More...
 
llvm::TypeconvertTypeForMemory (CodeGenModule &CGM, QualType T)
 
unsigned getLLVMFieldNumber (CodeGenModule &CGM, const RecordDecl *RD, const FieldDecl *FD)
 Given a non-bitfield struct field, return its index within the elements of the struct's converted type. More...
 
BlockFlags operator| (BlockLiteralFlags l, BlockLiteralFlags r)
 
BlockFieldFlags operator| (BlockFieldFlag_t l, BlockFieldFlag_t r)
 
void computeSPIRKernelABIInfo (CodeGenModule &CGM, CGFunctionInfo &FI)
 
CGCUDARuntimeCreateNVCUDARuntime (CodeGenModule &CGM)
 Creates an instance of a CUDA runtime class. More...
 
CGCXXABICreateItaniumCXXABI (CodeGenModule &CGM)
 Creates an Itanium-family ABI. More...
 
CGCXXABICreateMicrosoftCXXABI (CodeGenModule &CGM)
 Creates a Microsoft-family ABI. More...
 
CGObjCRuntimeCreateGNUObjCRuntime (CodeGenModule &CGM)
 Creates an instance of an Objective-C runtime class. More...
 
CGObjCRuntimeCreateMacObjCRuntime (CodeGenModule &CGM)
 
llvm::Function * createOffloadingBinaryDescriptorRegistration ()
 Creates and registers offloading binary descriptor for the current compilation unit. More...
 
void createOffloadEntriesAndInfoMetadata ()
 Creates all the offload entries in the current compilation unit along with the associated metadata. More...
 
void loadOffloadInfoMetadata ()
 Loads all the offload entries information from the host IR metadata. More...
 
QualType getTgtOffloadEntryQTy ()
 Returns __tgt_offload_entry type. More...
 
QualType getTgtDeviceImageQTy ()
 Returns __tgt_device_image type. More...
 
QualType getTgtBinaryDescriptorQTy ()
 Returns __tgt_bin_desc type. More...
 
void scanForTargetRegionsFunctions (const Stmt *S, StringRef ParentName)
 Start scanning from statement S and and emit all target regions found along the way. More...
 
void emitKmpRoutineEntryT (QualType KmpInt32Ty)
 Build type kmp_routine_entry_t (if not built yet). More...
 
llvm::TypegetKmpc_MicroPointerTy ()
 Returns pointer to kmpc_micro type. More...
 
llvm::Constant * createRuntimeFunction (unsigned Function)
 Returns specified OpenMP runtime function. More...
 
llvm::Constant * createForStaticInitFunction (unsigned IVSize, bool IVSigned)
 Returns __kmpc_for_static_init_* runtime function for the specified size IVSize and sign IVSigned. More...
 
llvm::Constant * createDispatchInitFunction (unsigned IVSize, bool IVSigned)
 Returns __kmpc_dispatch_init_* runtime function for the specified size IVSize and sign IVSigned. More...
 
llvm::Constant * createDispatchNextFunction (unsigned IVSize, bool IVSigned)
 Returns __kmpc_dispatch_next_* runtime function for the specified size IVSize and sign IVSigned. More...
 
llvm::Constant * createDispatchFiniFunction (unsigned IVSize, bool IVSigned)
 Returns __kmpc_dispatch_fini_* runtime function for the specified size IVSize and sign IVSigned. More...
 
llvm::Constant * getOrCreateThreadPrivateCache (const VarDecl *VD)
 If the specified mangled name is not in the module, create and return threadprivate cache object. More...
 
llvm::Constant * getOrCreateInternalVariable (llvm::Type *Ty, const llvm::Twine &Name)
 Gets (if variable with the given name already exist) or creates internal global variable with the specified Name. More...
 
void emitThreadPrivateVarInit (CodeGenFunction &CGF, Address VDAddr, llvm::Value *Ctor, llvm::Value *CopyCtor, llvm::Value *Dtor, SourceLocation Loc)
 Emits initialization code for the threadprivate variables. More...
 
i32 captured_struct **param SharedsTy A type which contains references the shared variables *param Shareds Context with the list of shared variables from the p *TaskFunction *param Data Additional data for task generation like final list of privates etc *TaskResultTy emitTaskInit (CodeGenFunction &CGF, SourceLocation Loc, const OMPExecutableDirective &D, llvm::Value *TaskFunction, QualType SharedsTy, Address Shareds, const OMPTaskDataTy &Data)
 
 CGOpenMPRuntime (CodeGenModule &CGM)
 
virtual ~CGOpenMPRuntime ()
 
virtual void clear ()
 
std::string getName (ArrayRef< StringRef > Parts) const
 Get the platform-specific name separator. More...
 
virtual void emitUserDefinedReduction (CodeGenFunction *CGF, const OMPDeclareReductionDecl *D)
 Emit code for the specified user defined reduction construct. More...
 
virtual std::pair< llvm::Function *, llvm::Function * > getUserDefinedReduction (const OMPDeclareReductionDecl *D)
 Get combiner/initializer for the specified user-defined reduction, if any. More...
 
virtual llvm::ValueemitParallelOutlinedFunction (const OMPExecutableDirective &D, const VarDecl *ThreadIDVar, OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen)
 Emits outlined function for the specified OpenMP parallel directive D. More...
 
virtual llvm::ValueemitTeamsOutlinedFunction (const OMPExecutableDirective &D, const VarDecl *ThreadIDVar, OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen)
 Emits outlined function for the specified OpenMP teams directive D. More...
 
virtual llvm::ValueemitTaskOutlinedFunction (const OMPExecutableDirective &D, const VarDecl *ThreadIDVar, const VarDecl *PartIDVar, const VarDecl *TaskTVar, OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen, bool Tied, unsigned &NumberOfParts)
 Emits outlined function for the OpenMP task directive D. More...
 
virtual void functionFinished (CodeGenFunction &CGF)
 Cleans up references to the objects in finished function. More...
 
virtual void emitParallelCall (CodeGenFunction &CGF, SourceLocation Loc, llvm::Value *OutlinedFn, ArrayRef< llvm::Value *> CapturedVars, const Expr *IfCond)
 Emits code for parallel or serial call of the OutlinedFn with variables captured in a record which address is stored in CapturedStruct. More...
 
virtual void emitCriticalRegion (CodeGenFunction &CGF, StringRef CriticalName, const RegionCodeGenTy &CriticalOpGen, SourceLocation Loc, const Expr *Hint=nullptr)
 Emits a critical region. More...
 
virtual void emitMasterRegion (CodeGenFunction &CGF, const RegionCodeGenTy &MasterOpGen, SourceLocation Loc)
 Emits a master region. More...
 
virtual void emitTaskyieldCall (CodeGenFunction &CGF, SourceLocation Loc)
 Emits code for a taskyield directive. More...
 
virtual void emitTaskgroupRegion (CodeGenFunction &CGF, const RegionCodeGenTy &TaskgroupOpGen, SourceLocation Loc)
 Emit a taskgroup region. More...
 
virtual void emitSingleRegion (CodeGenFunction &CGF, const RegionCodeGenTy &SingleOpGen, SourceLocation Loc, ArrayRef< const Expr *> CopyprivateVars, ArrayRef< const Expr *> DestExprs, ArrayRef< const Expr *> SrcExprs, ArrayRef< const Expr *> AssignmentOps)
 Emits a single region. More...
 
virtual void emitOrderedRegion (CodeGenFunction &CGF, const RegionCodeGenTy &OrderedOpGen, SourceLocation Loc, bool IsThreads)
 Emit an ordered region. More...
 
virtual void emitBarrierCall (CodeGenFunction &CGF, SourceLocation Loc, OpenMPDirectiveKind Kind, bool EmitChecks=true, bool ForceSimpleCall=false)
 Emit an implicit/explicit barrier for OpenMP threads. More...
 
virtual bool isStaticNonchunked (OpenMPScheduleClauseKind ScheduleKind, bool Chunked) const
 Check if the specified ScheduleKind is static non-chunked. More...
 
virtual bool isStaticNonchunked (OpenMPDistScheduleClauseKind ScheduleKind, bool Chunked) const
 Check if the specified ScheduleKind is static non-chunked. More...
 
virtual bool isStaticChunked (OpenMPScheduleClauseKind ScheduleKind, bool Chunked) const
 Check if the specified ScheduleKind is static chunked. More...
 
virtual bool isStaticChunked (OpenMPDistScheduleClauseKind ScheduleKind, bool Chunked) const
 Check if the specified ScheduleKind is static non-chunked. More...
 
virtual bool isDynamic (OpenMPScheduleClauseKind ScheduleKind) const
 Check if the specified ScheduleKind is dynamic. More...
 
virtual void emitForDispatchInit (CodeGenFunction &CGF, SourceLocation Loc, const OpenMPScheduleTy &ScheduleKind, unsigned IVSize, bool IVSigned, bool Ordered, const DispatchRTInput &DispatchValues)
 Call the appropriate runtime routine to initialize it before start of loop. More...
 
virtual void emitForStaticInit (CodeGenFunction &CGF, SourceLocation Loc, OpenMPDirectiveKind DKind, const OpenMPScheduleTy &ScheduleKind, const StaticRTInput &Values)
 Call the appropriate runtime routine to initialize it before start of loop. More...
 
virtual void emitDistributeStaticInit (CodeGenFunction &CGF, SourceLocation Loc, OpenMPDistScheduleClauseKind SchedKind, const StaticRTInput &Values)
 
virtual void emitForOrderedIterationEnd (CodeGenFunction &CGF, SourceLocation Loc, unsigned IVSize, bool IVSigned)
 Call the appropriate runtime routine to notify that we finished iteration of the ordered loop with the dynamic scheduling. More...
 
virtual void emitForStaticFinish (CodeGenFunction &CGF, SourceLocation Loc, OpenMPDirectiveKind DKind)
 Call the appropriate runtime routine to notify that we finished all the work with current loop. More...
 
virtual llvm::ValueemitForNext (CodeGenFunction &CGF, SourceLocation Loc, unsigned IVSize, bool IVSigned, Address IL, Address LB, Address UB, Address ST)
 Call __kmpc_dispatch_next( ident_t *loc, kmp_int32 tid, kmp_int32 *p_lastiter, kmp_int[32|64] *p_lower, kmp_int[32|64] *p_upper, kmp_int[32|64] *p_stride);. More...
 
virtual void emitNumThreadsClause (CodeGenFunction &CGF, llvm::Value *NumThreads, SourceLocation Loc)
 Emits call to void __kmpc_push_num_threads(ident_t *loc, kmp_int32 global_tid, kmp_int32 num_threads) to generate code for 'num_threads' clause. More...
 
virtual void emitProcBindClause (CodeGenFunction &CGF, OpenMPProcBindClauseKind ProcBind, SourceLocation Loc)
 Emit call to void __kmpc_push_proc_bind(ident_t *loc, kmp_int32 global_tid, int proc_bind) to generate code for 'proc_bind' clause. More...
 
virtual Address getAddrOfThreadPrivate (CodeGenFunction &CGF, const VarDecl *VD, Address VDAddr, SourceLocation Loc)
 Returns address of the threadprivate variable for the current thread. More...
 
virtual Address getAddrOfDeclareTargetLink (const VarDecl *VD)
 Returns the address of the variable marked as declare target with link clause. More...
 
virtual llvm::Function * emitThreadPrivateVarDefinition (const VarDecl *VD, Address VDAddr, SourceLocation Loc, bool PerformInit, CodeGenFunction *CGF=nullptr)
 Emit a code for initialization of threadprivate variable. More...
 
virtual bool emitDeclareTargetVarDefinition (const VarDecl *VD, llvm::GlobalVariable *Addr, bool PerformInit)
 Emit a code for initialization of declare target variable. More...
 
virtual Address getAddrOfArtificialThreadPrivate (CodeGenFunction &CGF, QualType VarType, StringRef Name)
 Creates artificial threadprivate variable with name Name and type VarType. More...
 
virtual void emitFlush (CodeGenFunction &CGF, ArrayRef< const Expr *> Vars, SourceLocation Loc)
 Emit flush of the variables specified in 'omp flush' directive. More...
 
i32 captured_struct **param SharedsTy A type which contains references the shared variables *param Shareds Context with the list of shared variables from the p *TaskFunction *param IfCond Not a nullptr if if clause was nullptr *otherwise *param Data Additional data for task generation like final list of privates etc *virtual void emitTaskCall (CodeGenFunction &CGF, SourceLocation Loc, const OMPExecutableDirective &D, llvm::Value *TaskFunction, QualType SharedsTy, Address Shareds, const Expr *IfCond, const OMPTaskDataTy &Data)
 
i32 captured_struct **param SharedsTy A type which contains references the shared variables *param Shareds Context with the list of shared variables from the p *TaskFunction *param IfCond Not a nullptr if if clause was nullptr *otherwise *param Data Additional data for task generation like final list of privates etc *virtual void emitTaskLoopCall (CodeGenFunction &CGF, SourceLocation Loc, const OMPLoopDirective &D, llvm::Value *TaskFunction, QualType SharedsTy, Address Shareds, const Expr *IfCond, const OMPTaskDataTy &Data)
 
virtual void emitInlinedDirective (CodeGenFunction &CGF, OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen, bool HasCancel=false)
 Emit code for the directive that does not require outlining. More...
 
llvm::ValueemitReductionFunction (CodeGenModule &CGM, SourceLocation Loc, llvm::Type *ArgsType, ArrayRef< const Expr *> Privates, ArrayRef< const Expr *> LHSExprs, ArrayRef< const Expr *> RHSExprs, ArrayRef< const Expr *> ReductionOps)
 Emits reduction function. More...
 
void emitSingleReductionCombiner (CodeGenFunction &CGF, const Expr *ReductionOp, const Expr *PrivateRef, const DeclRefExpr *LHS, const DeclRefExpr *RHS)
 Emits single reduction combiner. More...
 
virtual void emitReduction (CodeGenFunction &CGF, SourceLocation Loc, ArrayRef< const Expr *> Privates, ArrayRef< const Expr *> LHSExprs, ArrayRef< const Expr *> RHSExprs, ArrayRef< const Expr *> ReductionOps, ReductionOptionsTy Options)
 Emit a code for reduction clause. More...
 
virtual llvm::ValueemitTaskReductionInit (CodeGenFunction &CGF, SourceLocation Loc, ArrayRef< const Expr *> LHSExprs, ArrayRef< const Expr *> RHSExprs, const OMPTaskDataTy &Data)
 Emit a code for initialization of task reduction clause. More...
 
virtual void emitTaskReductionFixups (CodeGenFunction &CGF, SourceLocation Loc, ReductionCodeGen &RCG, unsigned N)
 Required to resolve existing problems in the runtime. More...
 
virtual Address getTaskReductionItem (CodeGenFunction &CGF, SourceLocation Loc, llvm::Value *ReductionsPtr, LValue SharedLVal)
 Get the address of void * type of the privatue copy of the reduction item specified by the SharedLVal. More...
 
virtual void emitTaskwaitCall (CodeGenFunction &CGF, SourceLocation Loc)
 Emit code for 'taskwait' directive. More...
 
virtual void emitCancellationPointCall (CodeGenFunction &CGF, SourceLocation Loc, OpenMPDirectiveKind CancelRegion)
 Emit code for 'cancellation point' construct. More...
 
virtual void emitCancelCall (CodeGenFunction &CGF, SourceLocation Loc, const Expr *IfCond, OpenMPDirectiveKind CancelRegion)
 Emit code for 'cancel' construct. More...
 
virtual void emitTargetOutlinedFunction (const OMPExecutableDirective &D, StringRef ParentName, llvm::Function *&OutlinedFn, llvm::Constant *&OutlinedFnID, bool IsOffloadEntry, const RegionCodeGenTy &CodeGen)
 Emit outilined function for 'target' directive. More...
 
virtual void emitTargetCall (CodeGenFunction &CGF, const OMPExecutableDirective &D, llvm::Value *OutlinedFn, llvm::Value *OutlinedFnID, const Expr *IfCond, const Expr *Device)
 Emit the target offloading code associated with D. More...
 
virtual bool emitTargetFunctions (GlobalDecl GD)
 Emit the target regions enclosed in GD function definition or the function itself in case it is a valid device function. More...
 
virtual bool emitTargetGlobalVariable (GlobalDecl GD)
 Emit the global variable if it is a valid device global variable. More...
 
virtual void registerTargetGlobalVariable (const VarDecl *VD, llvm::Constant *Addr)
 Checks if the provided global decl GD is a declare target variable and registers it when emitting code for the host. More...
 
virtual bool emitTargetGlobal (GlobalDecl GD)
 Emit the global GD if it is meaningful for the target. More...
 
virtual llvm::Function * emitRegistrationFunction ()
 Creates the offloading descriptor in the event any target region was emitted in the current module and return the function that registers it. More...
 
virtual void emitTeamsCall (CodeGenFunction &CGF, const OMPExecutableDirective &D, SourceLocation Loc, llvm::Value *OutlinedFn, ArrayRef< llvm::Value *> CapturedVars)
 Emits code for teams call of the OutlinedFn with variables captured in a record which address is stored in CapturedStruct. More...
 
virtual void emitNumTeamsClause (CodeGenFunction &CGF, const Expr *NumTeams, const Expr *ThreadLimit, SourceLocation Loc)
 Emits call to void __kmpc_push_num_teams(ident_t *loc, kmp_int32 global_tid, kmp_int32 num_teams, kmp_int32 thread_limit) to generate code for num_teams clause. More...
 
virtual void emitTargetDataCalls (CodeGenFunction &CGF, const OMPExecutableDirective &D, const Expr *IfCond, const Expr *Device, const RegionCodeGenTy &CodeGen, TargetDataInfo &Info)
 Emit the target data mapping code associated with D. More...
 
virtual void emitTargetDataStandAloneCall (CodeGenFunction &CGF, const OMPExecutableDirective &D, const Expr *IfCond, const Expr *Device)
 Emit the data mapping/movement code associated with the directive D that should be of the form 'target [{enter|exit} data | update]'. More...
 
virtual void emitDeclareSimdFunction (const FunctionDecl *FD, llvm::Function *Fn)
 Marks function Fn with properly mangled versions of vector functions. More...
 
virtual void emitDoacrossInit (CodeGenFunction &CGF, const OMPLoopDirective &D, ArrayRef< Expr *> NumIterations)
 Emit initialization for doacross loop nesting support. More...
 
virtual void emitDoacrossOrdered (CodeGenFunction &CGF, const OMPDependClause *C)
 Emit code for doacross ordered directive with 'depend' clause. More...
 
virtual const VarDecltranslateParameter (const FieldDecl *FD, const VarDecl *NativeParam) const
 Translates the native parameter of outlined function if this is required for target. More...
 
virtual Address getParameterAddress (CodeGenFunction &CGF, const VarDecl *NativeParam, const VarDecl *TargetParam) const
 Gets the address of the native argument basing on the address of the target-specific parameter. More...
 
virtual void getDefaultDistScheduleAndChunk (CodeGenFunction &CGF, const OMPLoopDirective &S, OpenMPDistScheduleClauseKind &ScheduleKind, llvm::Value *&Chunk) const
 Choose default schedule type and chunk value for the dist_schedule clause. More...
 
virtual void getDefaultScheduleAndChunk (CodeGenFunction &CGF, const OMPLoopDirective &S, OpenMPScheduleClauseKind &ScheduleKind, const Expr *&ChunkExpr) const
 Choose default schedule type and chunk value for the schedule clause. More...
 
virtual void emitOutlinedFunctionCall (CodeGenFunction &CGF, SourceLocation Loc, llvm::Value *OutlinedFn, ArrayRef< llvm::Value *> Args=llvm::None) const
 Emits call of the outlined function with the provided arguments, translating these arguments to correct target-specific arguments. More...
 
virtual void emitFunctionProlog (CodeGenFunction &CGF, const Decl *D)
 Emits OpenMP-specific function prolog. More...
 
virtual Address getAddressOfLocalVariable (CodeGenFunction &CGF, const VarDecl *VD)
 Gets the OpenMP-specific address of the local variable. More...
 
bool markAsGlobalTarget (GlobalDecl GD)
 Marks the declaration as already emitted for the device code and returns true, if it was marked already, and false, otherwise. More...
 
void emitDeferredTargetDecls () const
 Emit deferred declare target variables marked for deferred emission. More...
 
virtual void adjustTargetSpecificDataForLambdas (CodeGenFunction &CGF, const OMPExecutableDirective &D) const
 Adjust some parameters for the target-based directives, like addresses of the variables captured by reference in lambdas. More...
 
virtual void checkArchForUnifiedAddressing (CodeGenModule &CGM, const OMPRequiresDecl *D) const
 Perform check on requires decl to ensure that target architecture supports unified addressing. More...
 
static AlignmentSource getFieldAlignmentSource (AlignmentSource Source)
 Given that the base address has the given alignment source, what's our confidence in the alignment of the field? More...
 
CXXCtorType toCXXCtorType (StructorType T)
 
StructorType getFromCtorType (CXXCtorType T)
 
CXXDtorType toCXXDtorType (StructorType T)
 
StructorType getFromDtorType (CXXDtorType T)
 

Variables

 true
 A convenience builder class for complex constant initializers, especially for anonymous global structures used by various language runtimes. More...
 
class clang::CodeGen::CGOpenMPRuntime kmp_task_t
 
*QualType KmpTaskTQTy
 
QualType SavedKmpTaskTQTy
 Saved kmp_task_t for task directive. More...
 
QualType SavedKmpTaskloopTQTy
 Saved kmp_task_t for taskloop-based directive. More...
 
QualType KmpDependInfoTy
 Type typedef struct kmp_depend_info { kmp_intptr_t base_addr; size_t len; struct { bool in:1; bool out:1; } flags; } kmp_depend_info_t;. More...
 
QualType KmpDimTy
 struct kmp_dim { // loop bounds info casted to kmp_int64 kmp_int64 lo; // lower kmp_int64 up; // upper kmp_int64 st; // stride }; More...
 
QualType TgtOffloadEntryQTy
 Type struct __tgt_offload_entry{ void *addr; // Pointer to the offload entry info. More...
 
QualType TgtDeviceImageQTy
 struct __tgt_device_image{ void *ImageStart; // Pointer to the target code start. More...
 
QualType TgtBinaryDescriptorQTy
 struct __tgt_bin_desc{ int32_t NumDevices; // Number of devices supported. More...
 
OffloadEntriesInfoManagerTy OffloadEntriesInfoManager
 
bool ShouldMarkAsGlobal = true
 
llvm::StringSet AlreadyEmittedTargetFunctions
 List of the emitted functions. More...
 
llvm::StringMap< llvm::WeakTrackingVH > EmittedNonTargetVariables
 List of the global variables with their addresses that should not be emitted for the target. More...
 
llvm::SmallDenseSet< const VarDecl * > DeferredGlobalVariables
 List of variables that can become declare target implicitly and, thus, must be emitted. More...
 
llvm::StringSet ThreadPrivateWithDefinition
 Set of threadprivate variables with the generated initializer. More...
 
llvm::StringSet DeclareTargetWithDefinition
 Set of declare target variables with the generated initializer. More...
 
i32 captured_struct **param SharedsTy A type which contains references the shared variables *param Shareds Context with the list of shared variables from the p *TaskFunction *param Data Additional data for task generation like tiednsee
 
i32 captured_struct **param SharedsTy A type which contains references the shared variables *param Shareds Context with the list of shared variables from the p *TaskFunction *param Data Additional data for task generation like final * state
 
i32 captured_struct **param SharedsTy A type which contains references the shared variables *param Shareds Context with the list of shared variables from the p *TaskFunction *param IfCond Not a nullptr if if clause was specified
 

Typedef Documentation

◆ CGBuilderBaseTy

typedef llvm::IRBuilder<llvm::ConstantFolder, CGBuilderInserterTy> clang::CodeGen::CGBuilderBaseTy

Definition at line 43 of file CGBuilder.h.

◆ CGBuilderInserterTy

Definition at line 40 of file CGBuilder.h.

Enumeration Type Documentation

◆ AlignmentSource

The source of the alignment of an l-value; an expression of confidence in the alignment actually matching the estimate.

Enumerator
Decl 

The l-value was an access to a declared entity or something equivalently strong, like the address of an array allocated by a language runtime.

AttributedType 

The l-value was considered opaque, so the alignment was determined from a type, but that type was an explicitly-aligned typedef.

Type 

The l-value was considered opaque, so the alignment was determined from a type.

Definition at line 126 of file CGValue.h.

◆ ARCPreciseLifetime_t

Does an ARC strong l-value have precise lifetime?

Enumerator
ARCImpreciseLifetime 
ARCPreciseLifetime 

Definition at line 120 of file CGValue.h.

◆ BlockByrefFlags

Enumerator
BLOCK_BYREF_HAS_COPY_DISPOSE 
BLOCK_BYREF_LAYOUT_MASK 
BLOCK_BYREF_LAYOUT_EXTENDED 
BLOCK_BYREF_LAYOUT_NON_OBJECT 
BLOCK_BYREF_LAYOUT_STRONG 
BLOCK_BYREF_LAYOUT_WEAK 
BLOCK_BYREF_LAYOUT_UNRETAINED 

Definition at line 46 of file CGBlocks.h.

◆ BlockFieldFlag_t

Enumerator
BLOCK_FIELD_IS_OBJECT 
BLOCK_FIELD_IS_BLOCK 
BLOCK_FIELD_IS_BYREF 
BLOCK_FIELD_IS_WEAK 
BLOCK_FIELD_IS_ARC 
BLOCK_BYREF_CALLER 
BLOCK_BYREF_CURRENT_MAX 

Definition at line 95 of file CGBlocks.h.

◆ BlockLiteralFlags

Enumerator
BLOCK_IS_NOESCAPE 
BLOCK_HAS_COPY_DISPOSE 
BLOCK_HAS_CXX_OBJ 
BLOCK_IS_GLOBAL 
BLOCK_USE_STRET 
BLOCK_HAS_SIGNATURE 
BLOCK_HAS_EXTENDED_LAYOUT 

Definition at line 56 of file CGBlocks.h.

◆ CleanupKind

enum clang::CodeGen::CleanupKind : unsigned
Enumerator
EHCleanup 

Denotes a cleanup that should run when a scope is exited using exceptional control flow (a throw statement leading to stack unwinding, ).

NormalCleanup 

Denotes a cleanup that should run when a scope is exited using normal control flow (falling off the end of the scope, return, goto, ...).

NormalAndEHCleanup 
InactiveCleanup 
InactiveEHCleanup 
InactiveNormalCleanup 
InactiveNormalAndEHCleanup 
LifetimeMarker 
NormalEHLifetimeMarker 

Definition at line 78 of file EHScopeStack.h.

◆ ForDefinition_t

Enumerator
NotForDefinition 
ForDefinition 

Definition at line 98 of file CodeGenModule.h.

◆ SanitizerHandler

Enumerator
LIST_SANITIZER_CHECKS 

Definition at line 136 of file CodeGenFunction.h.

◆ StructorType

Enumerator
Complete 
Base 
Deleting 

Definition at line 58 of file CodeGenTypes.h.

◆ TBAAAccessKind

enum clang::CodeGen::TBAAAccessKind : unsigned
strong
Enumerator
Ordinary 
MayAlias 
Incomplete 

Definition at line 36 of file CodeGenTBAA.h.

◆ TypeEvaluationKind

The kind of evaluation to perform on values of a particular type.

Basically, is the code in CGExprScalar, CGExprComplex, or CGExprAgg?

TODO: should vectors maybe be split out into their own thing?

Enumerator
TEK_Scalar 
TEK_Complex 
TEK_Aggregate 

Definition at line 105 of file CodeGenFunction.h.

Function Documentation

◆ adjustTargetSpecificDataForLambdas()

virtual void clang::CodeGen::adjustTargetSpecificDataForLambdas ( CodeGenFunction CGF,
const OMPExecutableDirective D 
) const
virtual

Adjust some parameters for the target-based directives, like addresses of the variables captured by reference in lambdas.

Referenced by emitDeferredTargetDecls(), and emitFunctionProlog().

◆ arrangeCXXMethodType()

const CGFunctionInfo & clang::CodeGen::arrangeCXXMethodType ( CodeGenModule CGM,
const CXXRecordDecl RD,
const FunctionProtoType FTP,
const CXXMethodDecl MD 
)

◆ arrangeFreeFunctionCall()

const CGFunctionInfo & clang::CodeGen::arrangeFreeFunctionCall ( CodeGenModule CGM,
CanQualType  returnType,
ArrayRef< CanQualType argTypes,
FunctionType::ExtInfo  info,
RequiredArgs  args 
)

◆ arrangeFreeFunctionType() [1/2]

const CGFunctionInfo & clang::CodeGen::arrangeFreeFunctionType ( CodeGenModule CGM,
CanQual< FunctionProtoType Ty,
const FunctionDecl FD 
)

◆ arrangeFreeFunctionType() [2/2]

const CGFunctionInfo & clang::CodeGen::arrangeFreeFunctionType ( CodeGenModule CGM,
CanQual< FunctionNoProtoType Ty 
)

◆ arrangeObjCMessageSendSignature()

const CGFunctionInfo & clang::CodeGen::arrangeObjCMessageSendSignature ( CodeGenModule CGM,
const ObjCMethodDecl MD,
QualType  receiverType 
)

◆ CGOpenMPRuntime()

Definition at line 760 of file CGOpenMPRuntime.h.

Referenced by clang::CodeGen::CodeGenModule::~CodeGenModule().

◆ checkArchForUnifiedAddressing()

virtual void clang::CodeGen::checkArchForUnifiedAddressing ( CodeGenModule CGM,
const OMPRequiresDecl D 
) const
virtual

Perform check on requires decl to ensure that target architecture supports unified addressing.

Definition at line 1575 of file CGOpenMPRuntime.h.

◆ clear()

virtual void clang::CodeGen::clear ( )
virtual

◆ computeSPIRKernelABIInfo()

void clang::CodeGen::computeSPIRKernelABIInfo ( CodeGenModule CGM,
CGFunctionInfo FI 
)

◆ convertFreeFunctionType()

llvm::FunctionType * clang::CodeGen::convertFreeFunctionType ( CodeGenModule CGM,
const FunctionDecl FD 
)

Returns null if the function type is incomplete and can't be lowered.

Definition at line 69 of file CodeGenABITypes.cpp.

References clang::CodeGen::CodeGenTypes::ConvertFunctionType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), and Type.

◆ convertTypeForMemory()

llvm::Type * clang::CodeGen::convertTypeForMemory ( CodeGenModule CGM,
QualType  T 
)

◆ createDispatchFiniFunction()

llvm::Constant * CGOpenMPRuntime::createDispatchFiniFunction ( unsigned  IVSize,
bool  IVSigned 
)

Returns __kmpc_dispatch_fini_* runtime function for the specified size IVSize and sign IVSigned.

Definition at line 2394 of file CGOpenMPRuntime.cpp.

Referenced by emitForStaticInitCall().

◆ createDispatchInitFunction()

llvm::Constant * CGOpenMPRuntime::createDispatchInitFunction ( unsigned  IVSize,
bool  IVSigned 
)

Returns __kmpc_dispatch_init_* runtime function for the specified size IVSize and sign IVSigned.

Definition at line 2372 of file CGOpenMPRuntime.cpp.

Referenced by addMonoNonMonoModifier().

◆ createDispatchNextFunction()

llvm::Constant * CGOpenMPRuntime::createDispatchNextFunction ( unsigned  IVSize,
bool  IVSigned 
)

Returns __kmpc_dispatch_next_* runtime function for the specified size IVSize and sign IVSigned.

Definition at line 2411 of file CGOpenMPRuntime.cpp.

Referenced by emitForStaticInitCall().

◆ createForStaticInitFunction()

llvm::Constant * CGOpenMPRuntime::createForStaticInitFunction ( unsigned  IVSize,
bool  IVSigned 
)

Returns __kmpc_for_static_init_* runtime function for the specified size IVSize and sign IVSigned.

Definition at line 2346 of file CGOpenMPRuntime.cpp.

Referenced by emitForStaticInitCall().

◆ CreateGNUObjCRuntime()

CGObjCRuntime * clang::CodeGen::CreateGNUObjCRuntime ( CodeGenModule CGM)

◆ CreateItaniumCXXABI()

CodeGen::CGCXXABI * clang::CodeGen::CreateItaniumCXXABI ( CodeGenModule CGM)

◆ CreateMacObjCRuntime()

CGObjCRuntime* clang::CodeGen::CreateMacObjCRuntime ( CodeGenModule CGM)

◆ CreateMicrosoftCXXABI()

CGCXXABI * clang::CodeGen::CreateMicrosoftCXXABI ( CodeGenModule CGM)

Creates a Microsoft-family ABI.

Definition at line 3342 of file MicrosoftCXXABI.cpp.

Referenced by clang::CodeGen::CGCXXABI::adjustCallArgsForDestructorThunk(), and createCXXABI().

◆ CreateNVCUDARuntime()

CGCUDARuntime * clang::CodeGen::CreateNVCUDARuntime ( CodeGenModule CGM)

Creates an instance of a CUDA runtime class.

Definition at line 630 of file CGCUDANV.cpp.

Referenced by clang::CodeGen::CGCUDARuntime::CGCUDARuntime(), and clang::CodeGen::CodeGenModule::~CodeGenModule().

◆ createOffloadEntriesAndInfoMetadata()

void CGOpenMPRuntime::createOffloadEntriesAndInfoMetadata ( )

◆ createOffloadingBinaryDescriptorRegistration()

llvm::Function * CGOpenMPRuntime::createOffloadingBinaryDescriptorRegistration ( )

◆ createRuntimeFunction()

llvm::Constant * CGOpenMPRuntime::createRuntimeFunction ( unsigned  Function)

Returns specified OpenMP runtime function.

Parameters
FunctionOpenMP runtime function.
Returns
Specified function.

Definition at line 1666 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CGOpenMPRuntime::CGM, clang::CodeGen::CodeGenTypes::ConvertTypeForMem(), clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CGOpenMPRuntime::getIdentTyPointerTy(), getKmpc_MicroPointerTy(), clang::ASTContext::getPointerType(), getTgtBinaryDescriptorQTy(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::CodeGenTypeCache::IntPtrTy, clang::CodeGen::CodeGenTypeCache::IntTy, OMPRTL__kmpc_barrier, OMPRTL__kmpc_cancel, OMPRTL__kmpc_cancel_barrier, OMPRTL__kmpc_cancellationpoint, OMPRTL__kmpc_copyprivate, OMPRTL__kmpc_critical, OMPRTL__kmpc_critical_with_hint, OMPRTL__kmpc_doacross_fini, OMPRTL__kmpc_doacross_init, OMPRTL__kmpc_doacross_post, OMPRTL__kmpc_doacross_wait, OMPRTL__kmpc_end_critical, OMPRTL__kmpc_end_master, OMPRTL__kmpc_end_ordered, OMPRTL__kmpc_end_reduce, OMPRTL__kmpc_end_reduce_nowait, OMPRTL__kmpc_end_serialized_parallel, OMPRTL__kmpc_end_single, OMPRTL__kmpc_end_taskgroup, OMPRTL__kmpc_flush, OMPRTL__kmpc_for_static_fini, OMPRTL__kmpc_fork_call, OMPRTL__kmpc_fork_teams, OMPRTL__kmpc_global_thread_num, OMPRTL__kmpc_master, OMPRTL__kmpc_omp_task, OMPRTL__kmpc_omp_task_alloc, OMPRTL__kmpc_omp_task_begin_if0, OMPRTL__kmpc_omp_task_complete_if0, OMPRTL__kmpc_omp_task_with_deps, OMPRTL__kmpc_omp_taskwait, OMPRTL__kmpc_omp_taskyield, OMPRTL__kmpc_omp_wait_deps, OMPRTL__kmpc_ordered, OMPRTL__kmpc_push_num_teams, OMPRTL__kmpc_push_num_threads, OMPRTL__kmpc_push_proc_bind, OMPRTL__kmpc_reduce, OMPRTL__kmpc_reduce_nowait, OMPRTL__kmpc_serialized_parallel, OMPRTL__kmpc_single, OMPRTL__kmpc_task_reduction_get_th_data, OMPRTL__kmpc_task_reduction_init, OMPRTL__kmpc_taskgroup, OMPRTL__kmpc_taskloop, OMPRTL__kmpc_threadprivate_cached, OMPRTL__kmpc_threadprivate_register, OMPRTL__tgt_register_lib, OMPRTL__tgt_target, OMPRTL__tgt_target_data_begin, OMPRTL__tgt_target_data_begin_nowait, OMPRTL__tgt_target_data_end, OMPRTL__tgt_target_data_end_nowait, OMPRTL__tgt_target_data_update, OMPRTL__tgt_target_data_update_nowait, OMPRTL__tgt_target_nowait, OMPRTL__tgt_target_teams, OMPRTL__tgt_target_teams_nowait, OMPRTL__tgt_unregister_lib, clang::CodeGen::CodeGenTypeCache::SizeTy, Type, clang::CodeGen::CodeGenTypeCache::VoidPtrPtrTy, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.

Referenced by emitDeclareSimdFunction(), emitForStaticInitCall(), emitOffloadingArraysArgument(), emitParallelOrTeamsOutlinedFunction(), emitReduceFiniFunction(), emitTaskInit(), emitThreadPrivateVarInit(), getCancellationKind(), clang::CodeGen::CGOpenMPRuntime::getCriticalRegionLock(), clang::CodeGen::CGOpenMPRuntime::getDefaultFlagsForBarriers(), getOrCreateThreadPrivateCache(), clang::CodeGen::CGOpenMPRuntime::getThreadID(), and markAsGlobalTarget().

◆ emitBarrierCall()

virtual void clang::CodeGen::emitBarrierCall ( CodeGenFunction CGF,
SourceLocation  Loc,
OpenMPDirectiveKind  Kind,
bool  EmitChecks = true,
bool  ForceSimpleCall = false 
)
virtual

Emit an implicit/explicit barrier for OpenMP threads.

Parameters
KindDirective for which this implicit barrier call must be generated. Must be OMPD_barrier for explicit barrier generation.
EmitCheckstrue if need to emit checks for cancellation barriers.
ForceSimpleCalltrue simple barrier call must be emitted, false if runtime class decides which one to emit (simple or with cancellation checks).

Referenced by clang::CodeGen::CGOpenMPRuntime::getDefaultFlagsForBarriers(), ~CGOpenMPRuntime(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitCancelCall()

virtual void clang::CodeGen::emitCancelCall ( CodeGenFunction CGF,
SourceLocation  Loc,
const Expr IfCond,
OpenMPDirectiveKind  CancelRegion 
)
virtual

Emit code for 'cancel' construct.

Parameters
IfCondCondition in the associated 'if' clause, if it was specified, nullptr otherwise.
CancelRegionRegion kind for which the cancel must be emitted.

◆ emitCancellationPointCall()

virtual void clang::CodeGen::emitCancellationPointCall ( CodeGenFunction CGF,
SourceLocation  Loc,
OpenMPDirectiveKind  CancelRegion 
)
virtual

Emit code for 'cancellation point' construct.

Parameters
CancelRegionRegion kind for which the cancellation point must be emitted.

Referenced by getCancellationKind().

◆ emitCriticalRegion()

virtual void clang::CodeGen::emitCriticalRegion ( CodeGenFunction CGF,
StringRef  CriticalName,
const RegionCodeGenTy CriticalOpGen,
SourceLocation  Loc,
const Expr Hint = nullptr 
)
virtual

Emits a critical region.

Parameters
CriticalNameName of the critical region.
CriticalOpGenGenerator for the statement associated with the given critical region.
HintValue of the 'hint' clause (optional).

Referenced by clang::CodeGen::CGOpenMPRuntimeNVPTX::emitCriticalRegion(), clang::CodeGen::CGOpenMPRuntime::getCriticalRegionLock(), ~CGOpenMPRuntime(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitDeclareSimdFunction()

void CGOpenMPRuntime::emitDeclareSimdFunction ( const FunctionDecl FD,
llvm::Function *  Fn 
)
virtual

Marks function Fn with properly mangled versions of vector functions.

Parameters
FDFunction marked as 'declare simd'.
FnLLVM function that must be marked with 'declare simd' attributes.

Definition at line 9105 of file CGOpenMPRuntime.cpp.

References addFieldToRecordDecl(), clang::CodeGen::CodeGenFunction::Builder, clang::ASTContext::buildImplicitRecord(), clang::RecordDecl::completeDefinition(), clang::CodeGen::CGBuilderTy::CreateConstArrayGEP(), clang::CodeGen::CodeGenFunction::CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreatePointerBitCastOrAddrSpaceCast(), createRuntimeFunction(), clang::CodeGen::CodeGenFunction::EHStack, emitDoacrossInit(), emitDoacrossOrdered(), clang::CodeGen::CodeGenFunction::EmitLValueForField(), clang::CodeGen::CodeGenFunction::EmitNullInitialization(), clang::CodeGen::CodeGenFunction::EmitRuntimeCall(), clang::CodeGen::CodeGenFunction::EmitScalarConversion(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), clang::CodeGen::CGOpenMPRuntime::emitUpdateLocation(), emitX86DeclareSimdFunction(), clang::RecordDecl::field_begin(), clang::Type::getAsTagDecl(), clang::OMPExecutableDirective::getBeginLoc(), getCanonicalDecl(), clang::ASTContext::getConstantArrayType(), clang::CodeGen::CodeGenModule::getContext(), OMPDependClause::getDependencyKind(), clang::OMPExecutableDirective::getEndLoc(), clang::Expr::getExprLoc(), clang::APValue::getInt(), clang::ASTContext::getIntTypeForBitwidth(), OMPDependClause::getLoopData(), clang::Redeclarable< decl_type >::getMostRecentDecl(), clang::OMPLoopDirective::getNumIterations(), OMPDependClause::getNumLoops(), clang::ASTContext::getOpenMPDefaultSimdAlign(), clang::Redeclarable< decl_type >::getPreviousDecl(), clang::ASTContext::getRecordType(), clang::CodeGen::CGOpenMPRuntime::getThreadID(), clang::CodeGen::CodeGenModule::getTriple(), clang::Expr::getType(), clang::ASTContext::getTypeSizeInChars(), clang::CodeGen::CodeGenFunction::HaveInsertPoint(), clang::Expr::IgnoreParenImpCasts(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::QualType::isNull(), KmpDimTy, clang::CodeGen::CodeGenFunction::MakeAddrLValue(), clang::ArrayType::Normal, NormalAndEHCleanup, OMPRTL__kmpc_doacross_fini, OMPRTL__kmpc_doacross_init, OMPRTL__kmpc_doacross_post, OMPRTL__kmpc_doacross_wait, P, clang::FunctionDecl::parameters(), clang::Expr::SE_AllowSideEffects, clang::Decl::specific_attrs(), clang::TagDecl::startDefinition(), State, clang::ASTContext::toCharUnitsFromBits(), clang::Expr::EvalResult::Val, and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.

Referenced by clang::CodeGen::TargetDataInfo::requiresDevicePointerInfo().

◆ emitDeclareTargetVarDefinition()

bool CGOpenMPRuntime::emitDeclareTargetVarDefinition ( const VarDecl VD,
llvm::GlobalVariable *  Addr,
bool  PerformInit 
)
virtual

Emit a code for initialization of declare target variable.

Parameters
VDDeclare target variable.
AddrAddress of the global variable VD.
PerformInittrue if initialization expression is not constant.

Definition at line 2655 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CodeGenModule::addUsedGlobal(), clang::CodeGen::CodeGenTypes::arrangeNullaryFunction(), clang::CodeGen::CGOpenMPRuntime::CGM, clang::CodeGen::ApplyDebugLocation::CreateArtificial(), clang::CodeGen::ApplyDebugLocation::CreateEmpty(), clang::CodeGen::CodeGenModule::CreateGlobalInitOrDestructFunction(), DeclareTargetWithDefinition, clang::QualType::DK_none, clang::CodeGen::CodeGenFunction::EmitAnyExprToMem(), clang::CodeGen::CodeGenFunction::emitDestroy(), clang::CodeGen::CodeGenFunction::FinishFunction(), getAddrOfArtificialThreadPrivate(), clang::VarDecl::getAnyInitializer(), clang::DeclaratorDecl::getBeginLoc(), clang::VarDecl::getCanonicalDecl(), clang::CodeGen::CodeGenModule::getContext(), clang::ASTContext::getDeclAlign(), clang::VarDecl::getDefinition(), clang::CodeGen::CodeGenFunction::getDestroyer(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getMangledName(), clang::CodeGen::CodeGenModule::getModule(), clang::NamedDecl::getName(), clang::QualType::getQualifiers(), getTargetEntryUniqueInfo(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::QualType::isDestructedType(), Line, clang::CodeGen::CodeGenFunction::needsEHCleanup(), OffloadEntriesInfoManager, clang::CodeGen::OffloadEntriesInfoManagerTy::OMPTargetRegionEntryCtor, clang::CodeGen::OffloadEntriesInfoManagerTy::OMPTargetRegionEntryDtor, clang::CodeGen::OffloadEntriesInfoManagerTy::registerTargetRegionEntryInfo(), clang::CodeGen::CodeGenFunction::StartFunction(), and clang::ASTContext::VoidTy.

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

◆ emitDeferredTargetDecls()

void CGOpenMPRuntime::emitDeferredTargetDecls ( ) const

◆ emitDistributeStaticInit()

virtual void clang::CodeGen::emitDistributeStaticInit ( CodeGenFunction CGF,
SourceLocation  Loc,
OpenMPDistScheduleClauseKind  SchedKind,
const StaticRTInput Values 
)
virtual
Parameters
CGFReference to current CodeGenFunction.
LocClang source location.
SchedKindSchedule kind, specified by the 'dist_schedule' clause.
ValuesInput arguments for the construct.

Referenced by emitForStaticInitCall(), clang::CodeGen::StaticRTInput::StaticRTInput(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitDoacrossInit()

virtual void clang::CodeGen::emitDoacrossInit ( CodeGenFunction CGF,
const OMPLoopDirective D,
ArrayRef< Expr *>  NumIterations 
)
virtual

Emit initialization for doacross loop nesting support.

Parameters
DLoop-based construct used in doacross nesting construct.

Referenced by emitDeclareSimdFunction(), and clang::CodeGen::TargetDataInfo::requiresDevicePointerInfo().

◆ emitDoacrossOrdered()

virtual void clang::CodeGen::emitDoacrossOrdered ( CodeGenFunction CGF,
const OMPDependClause C 
)
virtual

Emit code for doacross ordered directive with 'depend' clause.

Parameters
C'depend' clause with 'sink|source' dependency kind.

Referenced by emitDeclareSimdFunction(), and clang::CodeGen::TargetDataInfo::requiresDevicePointerInfo().

◆ emitFlush()

virtual void clang::CodeGen::emitFlush ( CodeGenFunction CGF,
ArrayRef< const Expr *>  Vars,
SourceLocation  Loc 
)
virtual

Emit flush of the variables specified in 'omp flush' directive.

Parameters
VarsList of variables to flush.

Referenced by emitForStaticInitCall().

◆ emitForDispatchInit()

virtual void clang::CodeGen::emitForDispatchInit ( CodeGenFunction CGF,
SourceLocation  Loc,
const OpenMPScheduleTy ScheduleKind,
unsigned  IVSize,
bool  IVSigned,
bool  Ordered,
const DispatchRTInput DispatchValues 
)
virtual

Call the appropriate runtime routine to initialize it before start of loop.

This is used for non static scheduled types and when the ordered clause is present on the loop construct. Depending on the loop schedule, it is necessary to call some runtime routine before start of the OpenMP loop to get the loop upper / lower bounds LB and UB and stride ST.

Parameters
CGFReference to current CodeGenFunction.
LocClang source location.
ScheduleKindSchedule kind, specified by the 'schedule' clause.
IVSizeSize of the iteration variable in bits.
IVSignedSign of the iteration variable.
Orderedtrue if loop is ordered, false otherwise.
DispatchValuesstruct containing llvm values for lower bound, upper bound, and chunk expression. For the default (nullptr) value, the chunk 1 will be used.

Referenced by addMonoNonMonoModifier(), clang::CodeGen::DispatchRTInput::DispatchRTInput(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitForNext()

virtual llvm::Value* clang::CodeGen::emitForNext ( CodeGenFunction CGF,
SourceLocation  Loc,
unsigned  IVSize,
bool  IVSigned,
Address  IL,
Address  LB,
Address  UB,
Address  ST 
)
virtual

Call __kmpc_dispatch_next( ident_t *loc, kmp_int32 tid, kmp_int32 *p_lastiter, kmp_int[32|64] *p_lower, kmp_int[32|64] *p_upper, kmp_int[32|64] *p_stride);.

Parameters
IVSizeSize of the iteration variable in bits.
IVSignedSign of the iteration variable.
ILAddress of the output variable in which the flag of the last iteration is returned.
LBAddress of the output variable in which the lower iteration number is returned.
UBAddress of the output variable in which the upper iteration number is returned.
STAddress of the output variable in which the stride value is returned.

Referenced by emitForStaticInitCall(), clang::CodeGen::StaticRTInput::StaticRTInput(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitForOrderedIterationEnd()

virtual void clang::CodeGen::emitForOrderedIterationEnd ( CodeGenFunction CGF,
SourceLocation  Loc,
unsigned  IVSize,
bool  IVSigned 
)
virtual

Call the appropriate runtime routine to notify that we finished iteration of the ordered loop with the dynamic scheduling.

Parameters
CGFReference to current CodeGenFunction.
LocClang source location.
IVSizeSize of the iteration variable in bits.
IVSignedSign of the iteration variable.

Referenced by emitForStaticInitCall(), clang::CodeGen::StaticRTInput::StaticRTInput(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitForStaticFinish()

virtual void clang::CodeGen::emitForStaticFinish ( CodeGenFunction CGF,
SourceLocation  Loc,
OpenMPDirectiveKind  DKind 
)
virtual

Call the appropriate runtime routine to notify that we finished all the work with current loop.

Parameters
CGFReference to current CodeGenFunction.
LocClang source location.
DKindKind of the directive for which the static finish is emitted.

Referenced by emitForStaticInitCall(), clang::CodeGen::StaticRTInput::StaticRTInput(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitForStaticInit()

virtual void clang::CodeGen::emitForStaticInit ( CodeGenFunction CGF,
SourceLocation  Loc,
OpenMPDirectiveKind  DKind,
const OpenMPScheduleTy ScheduleKind,
const StaticRTInput Values 
)
virtual

Call the appropriate runtime routine to initialize it before start of loop.

This is used only in case of static schedule, when the user did not specify a ordered clause on the loop construct. Depending on the loop schedule, it is necessary to call some runtime routine before start of the OpenMP loop to get the loop upper / lower bounds LB and UB and stride ST.

Parameters
CGFReference to current CodeGenFunction.
LocClang source location.
DKindKind of the directive.
ScheduleKindSchedule kind, specified by the 'schedule' clause.
ValuesInput arguments for the construct.

Referenced by emitForStaticInitCall(), clang::CodeGen::StaticRTInput::StaticRTInput(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitFunctionProlog()

virtual void clang::CodeGen::emitFunctionProlog ( CodeGenFunction CGF,
const Decl D 
)
virtual

Emits OpenMP-specific function prolog.

Required for device constructs.

Definition at line 1554 of file CGOpenMPRuntime.h.

References adjustTargetSpecificDataForLambdas(), emitDeferredTargetDecls(), getAddressOfLocalVariable(), and markAsGlobalTarget().

◆ emitInlinedDirective()

void CGOpenMPRuntime::emitInlinedDirective ( CodeGenFunction CGF,
OpenMPDirectiveKind  InnermostKind,
const RegionCodeGenTy CodeGen,
bool  HasCancel = false 
)
virtual

Emit code for the directive that does not require outlining.

Parameters
InnermostKindKind of innermost directive (for simple directives it is a directive itself, for combined - its innermost directive).
CodeGenCode generation sequence for the D directive.
HasCanceltrue if region has inner cancel directive, false otherwise.

Definition at line 6196 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::CodeGenFunction::CapturedStmtInfo, clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::EmitBody(), and clang::CodeGen::CodeGenFunction::HaveInsertPoint().

Referenced by emitOffloadingArraysArgument(), clang::CodeGen::CGOpenMPRuntime::getCriticalRegionLock(), and markAsGlobalTarget().

◆ emitKmpRoutineEntryT()

void CGOpenMPRuntime::emitKmpRoutineEntryT ( QualType  KmpInt32Ty)

◆ emitMasterRegion()

virtual void clang::CodeGen::emitMasterRegion ( CodeGenFunction CGF,
const RegionCodeGenTy MasterOpGen,
SourceLocation  Loc 
)
virtual

Emits a master region.

Parameters
MasterOpGenGenerator for the statement associated with the given master region.

Referenced by clang::CodeGen::CGOpenMPRuntime::getCriticalRegionLock(), ~CGOpenMPRuntime(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitNumTeamsClause()

virtual void clang::CodeGen::emitNumTeamsClause ( CodeGenFunction CGF,
const Expr NumTeams,
const Expr ThreadLimit,
SourceLocation  Loc 
)
virtual

Emits call to void __kmpc_push_num_teams(ident_t *loc, kmp_int32 global_tid, kmp_int32 num_teams, kmp_int32 thread_limit) to generate code for num_teams clause.

Parameters
NumTeamsAn integer expression of teams.
ThreadLimitAn integer expression of threads.

Referenced by markAsGlobalTarget().

◆ emitNumThreadsClause()

virtual void clang::CodeGen::emitNumThreadsClause ( CodeGenFunction CGF,
llvm::Value NumThreads,
SourceLocation  Loc 
)
virtual

Emits call to void __kmpc_push_num_threads(ident_t *loc, kmp_int32 global_tid, kmp_int32 num_threads) to generate code for 'num_threads' clause.

Parameters
NumThreadsAn integer value of threads.

Referenced by emitForStaticInitCall(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitNumThreadsClause(), clang::CodeGen::StaticRTInput::StaticRTInput(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitOrderedRegion()

virtual void clang::CodeGen::emitOrderedRegion ( CodeGenFunction CGF,
const RegionCodeGenTy OrderedOpGen,
SourceLocation  Loc,
bool  IsThreads 
)
virtual

Emit an ordered region.

Parameters
OrderedOpGenGenerator for the statement associated with the given ordered region.

Referenced by ~CGOpenMPRuntime(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitOutlinedFunctionCall()

virtual void clang::CodeGen::emitOutlinedFunctionCall ( CodeGenFunction CGF,
SourceLocation  Loc,
llvm::Value OutlinedFn,
ArrayRef< llvm::Value *>  Args = llvm::None 
) const
virtual

Emits call of the outlined function with the provided arguments, translating these arguments to correct target-specific arguments.

Referenced by clang::CodeGen::CGOpenMPRuntime::emitCall(), emitOffloadingArraysArgument(), and clang::CodeGen::CGOpenMPRuntimeNVPTX::emitOutlinedFunctionCall().

◆ emitParallelCall()

virtual void clang::CodeGen::emitParallelCall ( CodeGenFunction CGF,
SourceLocation  Loc,
llvm::Value OutlinedFn,
ArrayRef< llvm::Value *>  CapturedVars,
const Expr IfCond 
)
virtual

Emits code for parallel or serial call of the OutlinedFn with variables captured in a record which address is stored in CapturedStruct.

Parameters
OutlinedFnOutlined function to be run in parallel threads. Type of this function is void(*)(kmp_int32 *, kmp_int32, struct context_vars*).
CapturedVarsA pointer to the record with the references to variables used in OutlinedFn function.
IfCondCondition in the associated 'if' clause, if it was specified, nullptr otherwise.

Referenced by clang::CodeGen::CGOpenMPRuntime::emitOMPIfClause(), ~CGOpenMPRuntime(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitParallelOutlinedFunction()

virtual llvm::Value* clang::CodeGen::emitParallelOutlinedFunction ( const OMPExecutableDirective D,
const VarDecl ThreadIDVar,
OpenMPDirectiveKind  InnermostKind,
const RegionCodeGenTy CodeGen 
)
virtual

Emits outlined function for the specified OpenMP parallel directive D.

This outlined function has type void(*)(kmp_int32 ThreadID, kmp_int32 BoundID, struct context_vars).

Parameters
DOpenMP directive.
ThreadIDVarVariable for thread id in the current OpenMP region.
InnermostKindKind of innermost directive (for simple directives it is a directive itself, for combined - its innermost directive).
CodeGenCode generation sequence for the D directive.

Referenced by emitParallelOrTeamsOutlinedFunction(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitParallelOutlinedFunction(), ~CGOpenMPRuntime(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitProcBindClause()

virtual void clang::CodeGen::emitProcBindClause ( CodeGenFunction CGF,
OpenMPProcBindClauseKind  ProcBind,
SourceLocation  Loc 
)
virtual

Emit call to void __kmpc_push_proc_bind(ident_t *loc, kmp_int32 global_tid, int proc_bind) to generate code for 'proc_bind' clause.

Referenced by emitForStaticInitCall(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitProcBindClause(), clang::CodeGen::StaticRTInput::StaticRTInput(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitReduction()

virtual void clang::CodeGen::emitReduction ( CodeGenFunction CGF,
SourceLocation  Loc,
ArrayRef< const Expr *>  Privates,
ArrayRef< const Expr *>  LHSExprs,
ArrayRef< const Expr *>  RHSExprs,
ArrayRef< const Expr *>  ReductionOps,
ReductionOptionsTy  Options 
)
virtual

Emit a code for reduction clause.

Next code should be emitted for reduction:

static kmp_critical_name lock = { 0 };
void reduce_func(void *lhs[<n>], void *rhs[<n>]) {
...
*(Type<i>*)lhs[i] = RedOp<i>(*(Type<i>*)lhs[i], *(Type<i>*)rhs[i]);
...
}
...
void *RedList[<n>] = {&<RHSExprs>[0], ..., &<RHSExprs>[<n>-1]};
switch (__kmpc_reduce{_nowait}(<loc>, <gtid>, <n>, sizeof(RedList),
RedList, reduce_func, &<lock>)) {
case 1:
...
<LHSExprs>[i] = RedOp<i>(*<LHSExprs>[i], *<RHSExprs>[i]);
...
__kmpc_end_reduce{_nowait}(<loc>, <gtid>, &<lock>);
break;
case 2:
...
Atomic(<LHSExprs>[i] = RedOp<i>(*<LHSExprs>[i], *<RHSExprs>[i]));
...
break;
default:;
}
Parameters
PrivatesList of private copies for original reduction arguments.
LHSExprsList of LHS in ReductionOps reduction operations.
RHSExprsList of RHS in ReductionOps reduction operations.
ReductionOpsList of reduction operations in form 'LHS binop RHS' or 'operator binop(LHS, RHS)'.
OptionsList of options for reduction codegen: WithNowait true if parent directive has also nowait clause, false otherwise. SimpleReduction Emit reduction operation only. Used for omp simd directive on the host. ReductionKind The kind of reduction to perform.

Referenced by clang::CGOpenMPSIMDRuntime::emitReduction(), and emitSingleReductionCombiner().

◆ emitReductionFunction()

llvm::Value* clang::CodeGen::emitReductionFunction ( CodeGenModule CGM,
SourceLocation  Loc,
llvm::Type ArgsType,
ArrayRef< const Expr *>  Privates,
ArrayRef< const Expr *>  LHSExprs,
ArrayRef< const Expr *>  RHSExprs,
ArrayRef< const Expr *>  ReductionOps 
)

Emits reduction function.

Parameters
ArgsTypeArray type containing pointers to reduction variables.
PrivatesList of private copies for original reduction arguments.
LHSExprsList of LHS in ReductionOps reduction operations.
RHSExprsList of RHS in ReductionOps reduction operations.
ReductionOpsList of reduction operations in form 'LHS binop RHS' or 'operator binop(LHS, RHS)'.

Referenced by emitReductionCombiner().

◆ emitRegistrationFunction()

virtual llvm::Function* clang::CodeGen::emitRegistrationFunction ( )
virtual

Creates the offloading descriptor in the event any target region was emitted in the current module and return the function that registers it.

Referenced by markAsGlobalTarget().

◆ emitSingleReductionCombiner()

void CGOpenMPRuntime::emitSingleReductionCombiner ( CodeGenFunction CGF,
const Expr ReductionOp,
const Expr PrivateRef,
const DeclRefExpr LHS,
const DeclRefExpr RHS 
)

◆ emitSingleRegion()

virtual void clang::CodeGen::emitSingleRegion ( CodeGenFunction CGF,
const RegionCodeGenTy SingleOpGen,
SourceLocation  Loc,
ArrayRef< const Expr *>  CopyprivateVars,
ArrayRef< const Expr *>  DestExprs,
ArrayRef< const Expr *>  SrcExprs,
ArrayRef< const Expr *>  AssignmentOps 
)
virtual

Emits a single region.

Parameters
SingleOpGenGenerator for the statement associated with the given single region.

Referenced by ~CGOpenMPRuntime(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitTargetCall()

virtual void clang::CodeGen::emitTargetCall ( CodeGenFunction CGF,
const OMPExecutableDirective D,
llvm::Value OutlinedFn,
llvm::Value OutlinedFnID,
const Expr IfCond,
const Expr Device 
)
virtual

Emit the target offloading code associated with D.

The emitted code attempts offloading the execution to the device, an the event of a failure it executes the host version outlined in OutlinedFn.

Parameters
DDirective to emit.
OutlinedFnHost version of the code to be offloaded.
OutlinedFnIDID of host version of the code to be offloaded.
IfCondExpression evaluated in if clause associated with the target directive, or null if no if clause is used.
DeviceExpression evaluated in device clause associated with the target directive, or null if no device clause is used.

Referenced by emitOffloadingArraysArgument().

◆ emitTargetDataCalls()

virtual void clang::CodeGen::emitTargetDataCalls ( CodeGenFunction CGF,
const OMPExecutableDirective D,
const Expr IfCond,
const Expr Device,
const RegionCodeGenTy CodeGen,
TargetDataInfo Info 
)
virtual

Emit the target data mapping code associated with D.

Parameters
DDirective to emit.
IfCondExpression evaluated in if clause associated with the target directive, or null if no device clause is used.
DeviceExpression evaluated in device clause associated with the target directive, or null if no device clause is used.
InfoA record used to store information that needs to be preserved until the region is closed.

Referenced by markAsGlobalTarget(), and clang::CodeGen::TargetDataInfo::requiresDevicePointerInfo().

◆ emitTargetDataStandAloneCall()

virtual void clang::CodeGen::emitTargetDataStandAloneCall ( CodeGenFunction CGF,
const OMPExecutableDirective D,
const Expr IfCond,
const Expr Device 
)
virtual

Emit the data mapping/movement code associated with the directive D that should be of the form 'target [{enter|exit} data | update]'.

Parameters
DDirective to emit.
IfCondExpression evaluated in if clause associated with the target directive, or null if no if clause is used.
DeviceExpression evaluated in device clause associated with the target directive, or null if no device clause is used.

Referenced by markAsGlobalTarget(), and clang::CodeGen::TargetDataInfo::requiresDevicePointerInfo().

◆ emitTargetFunctions()

virtual bool clang::CodeGen::emitTargetFunctions ( GlobalDecl  GD)
virtual

Emit the target regions enclosed in GD function definition or the function itself in case it is a valid device function.

Returns true if GD was dealt with successfully.

Parameters
GDFunction to scan.

Referenced by registerTargetGlobalVariable().

◆ emitTargetGlobal()

virtual bool clang::CodeGen::emitTargetGlobal ( GlobalDecl  GD)
virtual

Emit the global GD if it is meaningful for the target.

Returns if it was emitted successfully.

Parameters
GDGlobal to scan.

Referenced by registerTargetGlobalVariable().

◆ emitTargetGlobalVariable()

virtual bool clang::CodeGen::emitTargetGlobalVariable ( GlobalDecl  GD)
virtual

Emit the global variable if it is a valid device global variable.

Returns true if GD was dealt with successfully.

Parameters
GDVariable declaration to emit.

Referenced by registerTargetGlobalVariable().

◆ emitTargetOutlinedFunction()

virtual void clang::CodeGen::emitTargetOutlinedFunction ( const OMPExecutableDirective D,
StringRef  ParentName,
llvm::Function *&  OutlinedFn,
llvm::Constant *&  OutlinedFnID,
bool  IsOffloadEntry,
const RegionCodeGenTy CodeGen 
)
virtual

Emit outilined function for 'target' directive.

Parameters
DDirective to emit.
ParentNameName of the function that encloses the target region.
OutlinedFnOutlined function value to be defined by this call.
OutlinedFnIDOutlined function ID value to be defined by this call.
IsOffloadEntryTrue if the outlined function is an offload entry.
CodeGenCode generation sequence for the D directive. An outlined function may not be an entry if, e.g. the if clause always evaluates to false.

◆ emitTaskCall()

i32 captured_struct* * param SharedsTy A type which contains references the shared variables* param Shareds Context with the list of shared variables from the p* TaskFunction* param IfCond Not a nullptr if if clause was nullptr* otherwise* param Data Additional data for task generation like final list of privates etc* virtual void clang::CodeGen::emitTaskCall ( CodeGenFunction CGF,
SourceLocation  Loc,
const OMPExecutableDirective D,
llvm::Value TaskFunction,
QualType  SharedsTy,
Address  Shareds,
const Expr IfCond,
const OMPTaskDataTy Data 
)
virtual

Referenced by emitTaskInit().

◆ emitTaskgroupRegion()

virtual void clang::CodeGen::emitTaskgroupRegion ( CodeGenFunction CGF,
const RegionCodeGenTy TaskgroupOpGen,
SourceLocation  Loc 
)
virtual

Emit a taskgroup region.

Parameters
TaskgroupOpGenGenerator for the statement associated with the given taskgroup region.

Referenced by clang::CodeGen::CGOpenMPRuntime::getCriticalRegionLock(), ~CGOpenMPRuntime(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitTaskInit()

CGOpenMPRuntime::TaskResultTy CGOpenMPRuntime::emitTaskInit ( CodeGenFunction CGF,
SourceLocation  Loc,
const OMPExecutableDirective D,
llvm::Value TaskFunction,
QualType  SharedsTy,
Address  Shareds,
const OMPTaskDataTy Data 
)

Definition at line 4826 of file CGOpenMPRuntime.cpp.

References addFieldToRecordDecl(), clang::ASTContext::BoolTy, clang::CodeGen::CodeGenFunction::Builder, clang::ASTContext::buildImplicitRecord(), clang::CodeGen::CGOpenMPRuntime::CGM, checkDestructorsRequired(), checkInitIsRequired(), clang::RecordDecl::completeDefinition(), clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateConstArrayGEP(), createKmpTaskTRecordDecl(), createKmpTaskTWithPrivatesRecordDecl(), clang::CodeGen::CodeGenFunction::CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreatePointerBitCastOrAddrSpaceCast(), createRuntimeFunction(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), clang::CodeGen::OMPTaskDataTy::Dependences, clang::CodeGen::AggValueSlot::DoesNotOverlap, clang::CodeGen::CodeGenFunction::EmitAggregateCopy(), clang::CodeGen::CodeGenFunction::EmitAnyExprToMem(), emitDestructorsFunction(), emitKmpRoutineEntryT(), clang::CodeGen::CodeGenFunction::EmitLoadOfScalar(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::CodeGenFunction::EmitLValueForField(), clang::CodeGen::CodeGenFunction::EmitNullInitialization(), clang::CodeGen::CodeGenFunction::EmitOMPArraySectionExpr(), clang::CodeGen::CGOpenMPRuntime::emitOMPIfClause(), emitPrivatesInit(), emitProxyTaskFunction(), clang::CodeGen::CodeGenFunction::EmitRuntimeCall(), clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), emitTaskCall(), emitTaskDupFunction(), emitTaskLoopCall(), emitTaskPrivateMappingFunction(), clang::CodeGen::CGOpenMPRuntime::emitUpdateLocation(), clang::CodeGen::CodeGenFunction::EvaluateExprAsBool(), clang::RecordDecl::field_begin(), clang::RecordDecl::field_empty(), clang::CodeGen::OMPTaskDataTy::Final, clang::CodeGen::OMPTaskDataTy::FirstprivateCopies, clang::CodeGen::OMPTaskDataTy::FirstprivateInits, clang::CodeGen::OMPTaskDataTy::FirstprivateVars, clang::CodeGen::LValue::getAddress(), clang::Type::getAsStructureType(), clang::Type::getAsTagDecl(), clang::ASTContext::getConstantArrayType(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenFunction::getContext(), clang::RecordType::getDecl(), clang::ASTContext::getDeclAlign(), clang::OMPExecutableDirective::getDirectiveKind(), clang::ASTContext::getIntPtrType(), clang::ASTContext::getIntTypeForBitwidth(), clang::OMPLoopDirective::getLowerBoundVariable(), clang::CodeGen::CodeGenFunction::getNaturalTypeAlignment(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::CodeGen::Address::getPointer(), clang::CodeGen::LValue::getPointer(), clang::ASTContext::getPointerType(), clang::CodeGen::LValue::getQuals(), clang::ASTContext::getRecordType(), clang::CodeGen::CodeGenModule::getSize(), clang::ASTContext::getSizeType(), clang::OMPLoopDirective::getStrideVariable(), clang::CodeGen::CGOpenMPRuntime::getThreadID(), clang::Expr::getType(), clang::ASTContext::getTypeSize(), clang::CodeGen::CodeGenFunction::getTypeSize(), clang::ASTContext::getTypeSizeInChars(), clang::OMPLoopDirective::getUpperBoundVariable(), clang::CodeGen::CodeGenFunction::HaveInsertPoint(), clang::Expr::IgnoreParenImpCasts(), clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::CodeGenTypeCache::IntPtrTy, clang::CodeGen::CodeGenTypeCache::IntTy, clang::CodeGen::Address::invalid(), clang::QualType::isNull(), clang::isOpenMPTargetDataManagementDirective(), clang::isOpenMPTargetExecutionDirective(), clang::isOpenMPTaskLoopDirective(), KmpDependInfoTy, KmpTaskTQTy, clang::CodeGen::TaskResultTy::KmpTaskTQTyRD, clang::CodeGen::OMPTaskDataTy::LastprivateCopies, clang::CodeGen::OMPTaskDataTy::LastprivateVars, clang::CodeGen::CodeGenFunction::MakeAddrLValue(), clang::CodeGen::CodeGenFunction::MakeNaturalAlignAddrLValue(), clang::CodeGen::TaskResultTy::NewTask, clang::CodeGen::TaskResultTy::NewTaskNewTaskTTy, clang::ArrayType::Normal, clang::OMPC_DEPEND_unknown, OMPRTL__kmpc_omp_task, OMPRTL__kmpc_omp_task_alloc, OMPRTL__kmpc_omp_task_begin_if0, OMPRTL__kmpc_omp_task_complete_if0, OMPRTL__kmpc_omp_task_with_deps, OMPRTL__kmpc_omp_wait_deps, OMPRTL__kmpc_taskloop, clang::CodeGen::OMPTaskDataTy::Priority, clang::CodeGen::OMPTaskDataTy::PrivateCopies, Privates, clang::CodeGen::OMPTaskDataTy::PrivateVars, clang::CodeGen::OMPTaskDataTy::Reductions, SavedKmpTaskloopTQTy, SavedKmpTaskTQTy, clang::CodeGen::OMPTaskDataTy::Schedule, clang::CodeGen::RegionCodeGenTy::setAction(), clang::CodeGen::CodeGenTypeCache::SizeTy, stable_sort_comparator(), clang::TagDecl::startDefinition(), clang::CodeGen::TaskResultTy::TaskDupFn, clang::CodeGen::TaskResultTy::TaskEntry, clang::CodeGen::TaskResultTy::TDBase, clang::CodeGen::OMPTaskDataTy::Tied, Type, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, clang::ASTContext::VoidPtrTy, and clang::CharUnits::Zero().

◆ emitTaskLoopCall()

i32 captured_struct* * param SharedsTy A type which contains references the shared variables* param Shareds Context with the list of shared variables from the p* TaskFunction* param IfCond Not a nullptr if if clause was nullptr* otherwise* param Data Additional data for task generation like final list of privates etc* virtual void clang::CodeGen::emitTaskLoopCall ( CodeGenFunction CGF,
SourceLocation  Loc,
const OMPLoopDirective D,
llvm::Value TaskFunction,
QualType  SharedsTy,
Address  Shareds,
const Expr IfCond,
const OMPTaskDataTy Data 
)
virtual

Referenced by emitTaskInit().

◆ emitTaskOutlinedFunction()

virtual llvm::Value* clang::CodeGen::emitTaskOutlinedFunction ( const OMPExecutableDirective D,
const VarDecl ThreadIDVar,
const VarDecl PartIDVar,
const VarDecl TaskTVar,
OpenMPDirectiveKind  InnermostKind,
const RegionCodeGenTy CodeGen,
bool  Tied,
unsigned &  NumberOfParts 
)
virtual

Emits outlined function for the OpenMP task directive D.

This outlined function has type void(*)(kmp_int32 ThreadID, struct task_t* TaskT).

Parameters
DOpenMP directive.
ThreadIDVarVariable for thread id in the current OpenMP region.
PartIDVarVariable for partition id in the current OpenMP untied task region.
TaskTVarVariable for task_t argument.
InnermostKindKind of innermost directive (for simple directives it is a directive itself, for combined - its innermost directive).
CodeGenCode generation sequence for the D directive.
Tiedtrue if task is generated for tied task, false otherwise.
NumberOfPartsNumber of parts in untied task. Ignored for tied tasks.

Referenced by emitParallelOrTeamsOutlinedFunction(), ~CGOpenMPRuntime(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitTaskReductionFixups()

virtual void clang::CodeGen::emitTaskReductionFixups ( CodeGenFunction CGF,
SourceLocation  Loc,
ReductionCodeGen RCG,
unsigned  N 
)
virtual

Required to resolve existing problems in the runtime.

Emits threadprivate variables to store the size of the VLAs/array sections for initializer/combiner/finalizer functions + emits threadprivate variable to store the pointer to the original reduction item for the custom initializer defined by declare reduction construct.

Parameters
RCGAllows to reuse an existing data for the reductions.
NReduction item for which fixups must be emitted.

Referenced by emitReduceFiniFunction().

◆ emitTaskReductionInit()

virtual llvm::Value* clang::CodeGen::emitTaskReductionInit ( CodeGenFunction CGF,
SourceLocation  Loc,
ArrayRef< const Expr *>  LHSExprs,
ArrayRef< const Expr *>  RHSExprs,
const OMPTaskDataTy Data 
)
virtual

Emit a code for initialization of task reduction clause.

Next code should be emitted for reduction:

_task_red_item_t red_data[n];
...
red_data[i].shar = &origs[i];
red_data[i].size = sizeof(origs[i]);
red_data[i].f_init = (void*)RedInit<i>;
red_data[i].f_fini = (void*)RedDest<i>;
red_data[i].f_comb = (void*)RedOp<i>;
red_data[i].flags = <Flag_i>;
...
void* tg1 = __kmpc_task_reduction_init(gtid, n, red_data);
Parameters
LHSExprsList of LHS in Data.ReductionOps reduction operations.
RHSExprsList of RHS in Data.ReductionOps reduction operations.
DataAdditional data for task generation like tiedness, final state, list of privates, reductions etc.

Referenced by emitReduceFiniFunction().

◆ emitTaskwaitCall()

virtual void clang::CodeGen::emitTaskwaitCall ( CodeGenFunction CGF,
SourceLocation  Loc 
)
virtual

Emit code for 'taskwait' directive.

Referenced by emitReduceFiniFunction().

◆ emitTaskyieldCall()

virtual void clang::CodeGen::emitTaskyieldCall ( CodeGenFunction CGF,
SourceLocation  Loc 
)
virtual

◆ emitTeamsCall()

virtual void clang::CodeGen::emitTeamsCall ( CodeGenFunction CGF,
const OMPExecutableDirective D,
SourceLocation  Loc,
llvm::Value OutlinedFn,
ArrayRef< llvm::Value *>  CapturedVars 
)
virtual

Emits code for teams call of the OutlinedFn with variables captured in a record which address is stored in CapturedStruct.

Parameters
OutlinedFnOutlined function to be run by team masters. Type of this function is void(*)(kmp_int32 *, kmp_int32, struct context_vars*).
CapturedVarsA pointer to the record with the references to variables used in OutlinedFn function.

Referenced by markAsGlobalTarget().

◆ emitTeamsOutlinedFunction()

virtual llvm::Value* clang::CodeGen::emitTeamsOutlinedFunction ( const OMPExecutableDirective D,
const VarDecl ThreadIDVar,
OpenMPDirectiveKind  InnermostKind,
const RegionCodeGenTy CodeGen 
)
virtual

Emits outlined function for the specified OpenMP teams directive D.

This outlined function has type void(*)(kmp_int32 ThreadID, kmp_int32 BoundID, struct context_vars).

Parameters
DOpenMP directive.
ThreadIDVarVariable for thread id in the current OpenMP region.
InnermostKindKind of innermost directive (for simple directives it is a directive itself, for combined - its innermost directive).
CodeGenCode generation sequence for the D directive.

Referenced by emitParallelOrTeamsOutlinedFunction(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitTeamsOutlinedFunction(), ~CGOpenMPRuntime(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitThreadPrivateVarDefinition()

virtual llvm::Function* clang::CodeGen::emitThreadPrivateVarDefinition ( const VarDecl VD,
Address  VDAddr,
SourceLocation  Loc,
bool  PerformInit,
CodeGenFunction CGF = nullptr 
)
virtual

Emit a code for initialization of threadprivate variable.

It emits a call to runtime library which adds initial value to the newly created threadprivate variable (if it is not constant) and registers destructor for the variable (if any).

Parameters
VDThreadprivate variable.
VDAddrAddress of the global variable VD.
LocLocation of threadprivate declaration.
PerformInittrue if initialization expression is not constant.

Referenced by clang::CodeGen::CodeGenModule::EmitOMPThreadPrivateDecl(), emitThreadPrivateVarInit(), clang::CodeGen::StaticRTInput::StaticRTInput(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ emitThreadPrivateVarInit()

void CGOpenMPRuntime::emitThreadPrivateVarInit ( CodeGenFunction CGF,
Address  VDAddr,
llvm::Value Ctor,
llvm::Value CopyCtor,
llvm::Value Dtor,
SourceLocation  Loc 
)

◆ emitUserDefinedReduction()

void CGOpenMPRuntime::emitUserDefinedReduction ( CodeGenFunction CGF,
const OMPDeclareReductionDecl D 
)
virtual

◆ functionFinished()

virtual void clang::CodeGen::functionFinished ( CodeGenFunction CGF)
virtual

Cleans up references to the objects in finished function.

Referenced by clang::CodeGen::CGOpenMPRuntimeNVPTX::functionFinished(), clang::CodeGen::CGOpenMPRuntime::getThreadID(), and ~CGOpenMPRuntime().

◆ getAddressOfLocalVariable()

virtual Address clang::CodeGen::getAddressOfLocalVariable ( CodeGenFunction CGF,
const VarDecl VD 
)
virtual

Gets the OpenMP-specific address of the local variable.

Referenced by clang::CodeGen::CGOpenMPRuntime::emitCall(), and emitFunctionProlog().

◆ getAddrOfArtificialThreadPrivate()

virtual Address clang::CodeGen::getAddrOfArtificialThreadPrivate ( CodeGenFunction CGF,
QualType  VarType,
StringRef  Name 
)
virtual

Creates artificial threadprivate variable with name Name and type VarType.

Parameters
VarTypeType of the artificial threadprivate variable.
NameName of the artificial threadprivate variable.

Referenced by emitDeclareTargetVarDefinition(), emitReduceFiniFunction(), clang::CodeGen::StaticRTInput::StaticRTInput(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ getAddrOfDeclareTargetLink()

Address CGOpenMPRuntime::getAddrOfDeclareTargetLink ( const VarDecl VD)
virtual

◆ getAddrOfThreadPrivate()

virtual Address clang::CodeGen::getAddrOfThreadPrivate ( CodeGenFunction CGF,
const VarDecl VD,
Address  VDAddr,
SourceLocation  Loc 
)
virtual

Returns address of the threadprivate variable for the current thread.

Parameters
VDThreadprivate variable.
VDAddrAddress of the global variable VD.
LocLocation of the reference to threadprivate var.
Returns
Address of the threadprivate variable for the current thread.

Referenced by getOrCreateThreadPrivateCache(), clang::CodeGen::StaticRTInput::StaticRTInput(), and clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime().

◆ getDefaultDistScheduleAndChunk()

virtual void clang::CodeGen::getDefaultDistScheduleAndChunk ( CodeGenFunction CGF,
const OMPLoopDirective S,
OpenMPDistScheduleClauseKind ScheduleKind,
llvm::Value *&  Chunk 
) const
virtual

Choose default schedule type and chunk value for the dist_schedule clause.

Definition at line 1535 of file CGOpenMPRuntime.h.

◆ getDefaultScheduleAndChunk()

virtual void clang::CodeGen::getDefaultScheduleAndChunk ( CodeGenFunction CGF,
const OMPLoopDirective S,
OpenMPScheduleClauseKind ScheduleKind,
const Expr *&  ChunkExpr 
) const
virtual

Choose default schedule type and chunk value for the schedule clause.

Definition at line 1541 of file CGOpenMPRuntime.h.

◆ getFieldAlignmentSource()

static AlignmentSource clang::CodeGen::getFieldAlignmentSource ( AlignmentSource  Source)
inlinestatic

Given that the base address has the given alignment source, what's our confidence in the alignment of the field?

Definition at line 144 of file CGValue.h.

Referenced by clang::CodeGen::CodeGenFunction::EmitLValueForField(), and clang::CodeGen::CodeGenFunction::EmitLValueForFieldInitialization().

◆ getFromCtorType()

StructorType clang::CodeGen::getFromCtorType ( CXXCtorType  T)
inline

◆ getFromDtorType()

StructorType clang::CodeGen::getFromDtorType ( CXXDtorType  T)
inline

◆ getKmpc_MicroPointerTy()

llvm::Type * CGOpenMPRuntime::getKmpc_MicroPointerTy ( )

◆ getLLVMFieldNumber()

unsigned clang::CodeGen::getLLVMFieldNumber ( CodeGenModule CGM,
const RecordDecl RD,
const FieldDecl FD 
)

Given a non-bitfield struct field, return its index within the elements of the struct's converted type.

The returned index refers to a field number in the complete object type which is returned by convertTypeForMemory. FD must be a field in RD directly (i.e. not an inherited field).

Definition at line 84 of file CodeGenABITypes.cpp.

References clang::CodeGen::CodeGenTypes::getCGRecordLayout(), clang::CodeGen::CGRecordLayout::getLLVMFieldNo(), and clang::CodeGen::CodeGenModule::getTypes().

◆ getName()

std::string clang::CodeGen::getName ( ArrayRef< StringRef >  Parts) const

◆ getOrCreateInternalVariable()

llvm::Constant * CGOpenMPRuntime::getOrCreateInternalVariable ( llvm::Type Ty,
const llvm::Twine &  Name 
)

Gets (if variable with the given name already exist) or creates internal global variable with the specified Name.

The created variable has linkage CommonLinkage by default and is initialized by null value.

Parameters
TyType of the global variable. If it is exist already the type must be the same.
NameName of the variable.

Definition at line 2907 of file CGOpenMPRuntime.cpp.

Referenced by getAddrOfDeclareTargetLink(), clang::CodeGen::CGOpenMPRuntime::getCriticalRegionLock(), getOrCreateThreadPrivateCache(), and registerTargetGlobalVariable().

◆ getOrCreateThreadPrivateCache()

llvm::Constant * CGOpenMPRuntime::getOrCreateThreadPrivateCache ( const VarDecl VD)

◆ getParameterAddress()

virtual Address clang::CodeGen::getParameterAddress ( CodeGenFunction CGF,
const VarDecl NativeParam,
const VarDecl TargetParam 
) const
virtual

Gets the address of the native argument basing on the address of the target-specific parameter.

Parameters
NativeParamParameter itself.
TargetParamCorresponding target-specific parameter.

Referenced by clang::CodeGen::CGOpenMPRuntime::emitCall(), and translateParameter().

◆ getTaskReductionItem()

virtual Address clang::CodeGen::getTaskReductionItem ( CodeGenFunction CGF,
SourceLocation  Loc,
llvm::Value ReductionsPtr,
LValue  SharedLVal 
)
virtual

Get the address of void * type of the privatue copy of the reduction item specified by the SharedLVal.

Parameters
ReductionsPtrPointer to the reduction data returned by the emitTaskReductionInit function.
SharedLValAddress of the original reduction item.

Referenced by emitReduceFiniFunction().

◆ getTgtBinaryDescriptorQTy()

QualType CGOpenMPRuntime::getTgtBinaryDescriptorQTy ( )

◆ getTgtDeviceImageQTy()

QualType CGOpenMPRuntime::getTgtDeviceImageQTy ( )

◆ getTgtOffloadEntryQTy()

QualType CGOpenMPRuntime::getTgtOffloadEntryQTy ( )

◆ getUserDefinedReduction()

std::pair< llvm::Function *, llvm::Function * > CGOpenMPRuntime::getUserDefinedReduction ( const OMPDeclareReductionDecl D)
virtual

Get combiner/initializer for the specified user-defined reduction, if any.

Definition at line 1332 of file CGOpenMPRuntime.cpp.

References emitUserDefinedReduction().

Referenced by ~CGOpenMPRuntime().

◆ isDynamic()

bool CGOpenMPRuntime::isDynamic ( OpenMPScheduleClauseKind  ScheduleKind) const
virtual

Check if the specified ScheduleKind is dynamic.

This kind of worksharing directive is emitted without outer loop.

Parameters
ScheduleKindSchedule Kind specified in the 'schedule' clause.

Definition at line 3325 of file CGOpenMPRuntime.cpp.

References getRuntimeSchedule(), OMP_sch_static, and OMP_sch_static_chunked.

Referenced by ~CGOpenMPRuntime().

◆ isStaticChunked() [1/2]

bool CGOpenMPRuntime::isStaticChunked ( OpenMPScheduleClauseKind  ScheduleKind,
bool  Chunked 
) const
virtual

Check if the specified ScheduleKind is static chunked.

Parameters
ScheduleKindSchedule kind specified in the 'schedule' clause.
ChunkedTrue if chunk is specified in the clause.

Definition at line 3312 of file CGOpenMPRuntime.cpp.

References getRuntimeSchedule(), and OMP_sch_static_chunked.

◆ isStaticChunked() [2/2]

bool CGOpenMPRuntime::isStaticChunked ( OpenMPDistScheduleClauseKind  ScheduleKind,
bool  Chunked 
) const
virtual

Check if the specified ScheduleKind is static non-chunked.

Parameters
ScheduleKindSchedule kind specified in the 'dist_schedule' clause.
ChunkedTrue if chunk is specified in the clause.

Definition at line 3319 of file CGOpenMPRuntime.cpp.

References getRuntimeSchedule(), and OMP_dist_sch_static_chunked.

Referenced by ~CGOpenMPRuntime().

◆ isStaticNonchunked() [1/2]

bool CGOpenMPRuntime::isStaticNonchunked ( OpenMPScheduleClauseKind  ScheduleKind,
bool  Chunked 
) const
virtual

Check if the specified ScheduleKind is static non-chunked.

This kind of worksharing directive is emitted without outer loop.

Parameters
ScheduleKindSchedule kind specified in the 'schedule' clause.
ChunkedTrue if chunk is specified in the clause.

Definition at line 3299 of file CGOpenMPRuntime.cpp.

References getRuntimeSchedule(), and OMP_sch_static.

◆ isStaticNonchunked() [2/2]

bool CGOpenMPRuntime::isStaticNonchunked ( OpenMPDistScheduleClauseKind  ScheduleKind,
bool  Chunked 
) const
virtual

Check if the specified ScheduleKind is static non-chunked.

This kind of distribute directive is emitted without outer loop.

Parameters
ScheduleKindSchedule kind specified in the 'dist_schedule' clause.
ChunkedTrue if chunk is specified in the clause.

Definition at line 3306 of file CGOpenMPRuntime.cpp.

References getRuntimeSchedule(), and OMP_dist_sch_static.

Referenced by ~CGOpenMPRuntime().

◆ loadOffloadInfoMetadata()

void CGOpenMPRuntime::loadOffloadInfoMetadata ( )

◆ markAsGlobalTarget()

bool CGOpenMPRuntime::markAsGlobalTarget ( GlobalDecl  GD)

Marks the declaration as already emitted for the device code and returns true, if it was marked already, and false, otherwise.

Definition at line 8608 of file CGOpenMPRuntime.cpp.

References AlreadyEmittedTargetFunctions, clang::CodeGen::TargetDataInfo::BasePointersArray, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), createOffloadEntriesAndInfoMetadata(), createOffloadingBinaryDescriptorRegistration(), createRuntimeFunction(), emitInlinedDirective(), emitNumTeamsClause(), emitOffloadingArrays(), emitOffloadingArraysArgument(), clang::CodeGen::CGOpenMPRuntime::emitOMPIfClause(), emitRegistrationFunction(), clang::CodeGen::CodeGenFunction::EmitRuntimeCall(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), emitTargetDataCalls(), emitTargetDataStandAloneCall(), emitTeamsCall(), clang::CodeGen::CGOpenMPRuntime::emitUpdateLocation(), clang::GlobalDecl::getDecl(), clang::OMPExecutableDirective::getDirectiveKind(), clang::CodeGen::CodeGenModule::GetGlobalValue(), getKmpc_MicroPointerTy(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getMangledName(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CodeGen::CGOpenMPRuntime::getThreadID(), clang::OMPExecutableDirective::hasClausesOfKind(), clang::CodeGen::CodeGenFunction::HaveInsertPoint(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::TargetDataInfo::MapTypesArray, clang::CodeGen::TargetDataInfo::NumberOfPtrs, clang::OMPD_unknown, OMPRTL__kmpc_fork_teams, OMPRTL__kmpc_push_num_teams, OMPRTL__tgt_target_data_begin, OMPRTL__tgt_target_data_begin_nowait, OMPRTL__tgt_target_data_end, OMPRTL__tgt_target_data_end_nowait, OMPRTL__tgt_target_data_update, OMPRTL__tgt_target_data_update_nowait, clang::CodeGen::TargetDataInfo::PointersArray, ShouldMarkAsGlobal, and clang::CodeGen::TargetDataInfo::SizesArray.

Referenced by emitFunctionProlog().

◆ operator|() [1/2]

BlockFlags clang::CodeGen::operator| ( BlockLiteralFlags  l,
BlockLiteralFlags  r 
)
inline

Definition at line 91 of file CGBlocks.h.

◆ operator|() [2/2]

BlockFieldFlags clang::CodeGen::operator| ( BlockFieldFlag_t  l,
BlockFieldFlag_t  r 
)
inline

Definition at line 139 of file CGBlocks.h.

◆ registerTargetGlobalVariable()

void CGOpenMPRuntime::registerTargetGlobalVariable ( const VarDecl VD,
llvm::Constant *  Addr 
)
virtual

◆ scanForTargetRegionsFunctions()

void CGOpenMPRuntime::scanForTargetRegionsFunctions ( const Stmt S,
StringRef  ParentName 
)

Start scanning from statement S and and emit all target regions found along the way.

Parameters
SStarting statement.
ParentNameName of the function declaration that is being scanned.

Definition at line 8319 of file CGOpenMPRuntime.cpp.

◆ toCXXCtorType()

CXXCtorType clang::CodeGen::toCXXCtorType ( StructorType  T)
inline

◆ toCXXDtorType()

CXXDtorType clang::CodeGen::toCXXDtorType ( StructorType  T)
inline

◆ translateParameter()

virtual const VarDecl* clang::CodeGen::translateParameter ( const FieldDecl FD,
const VarDecl NativeParam 
) const
virtual

Translates the native parameter of outlined function if this is required for target.

Parameters
FDField decl from captured record for the parameter.
NativeParamParameter itself.

Definition at line 1520 of file CGOpenMPRuntime.h.

References getParameterAddress().

◆ ~CGOpenMPRuntime()

virtual clang::CodeGen::~CGOpenMPRuntime ( )
virtual

Variable Documentation

◆ AlreadyEmittedTargetFunctions

llvm::StringSet clang::CodeGen::AlreadyEmittedTargetFunctions

List of the emitted functions.

Definition at line 629 of file CGOpenMPRuntime.h.

Referenced by markAsGlobalTarget().

◆ DeclareTargetWithDefinition

llvm::StringSet clang::CodeGen::DeclareTargetWithDefinition

Set of declare target variables with the generated initializer.

Definition at line 712 of file CGOpenMPRuntime.h.

Referenced by emitDeclareTargetVarDefinition().

◆ DeferredGlobalVariables

llvm::SmallDenseSet<const VarDecl *> clang::CodeGen::DeferredGlobalVariables

List of variables that can become declare target implicitly and, thus, must be emitted.

Definition at line 636 of file CGOpenMPRuntime.h.

Referenced by emitDeferredTargetDecls().

◆ EmittedNonTargetVariables

llvm::StringMap<llvm::WeakTrackingVH> clang::CodeGen::EmittedNonTargetVariables

List of the global variables with their addresses that should not be emitted for the target.

Definition at line 632 of file CGOpenMPRuntime.h.

Referenced by clang::CodeGen::CGOpenMPRuntime::CGOpenMPRuntime(), and registerTargetGlobalVariable().

◆ kmp_task_t

class clang::CodeGen::CGOpenMPRuntime clang::CodeGen::kmp_task_t

◆ KmpDependInfoTy

QualType clang::CodeGen::KmpDependInfoTy

Type typedef struct kmp_depend_info { kmp_intptr_t base_addr; size_t len; struct { bool in:1; bool out:1; } flags; } kmp_depend_info_t;.

Definition at line 382 of file CGOpenMPRuntime.h.

Referenced by emitTaskInit().

◆ KmpDimTy

QualType clang::CodeGen::KmpDimTy

struct kmp_dim { // loop bounds info casted to kmp_int64 kmp_int64 lo; // lower kmp_int64 up; // upper kmp_int64 st; // stride };

Definition at line 388 of file CGOpenMPRuntime.h.

Referenced by emitDeclareSimdFunction().

◆ KmpTaskTQTy

* QualType clang::CodeGen::KmpTaskTQTy

Definition at line 369 of file CGOpenMPRuntime.h.

Referenced by emitTaskInit().

◆ OffloadEntriesInfoManager

OffloadEntriesInfoManagerTy clang::CodeGen::OffloadEntriesInfoManager

◆ SavedKmpTaskloopTQTy

QualType clang::CodeGen::SavedKmpTaskloopTQTy

Saved kmp_task_t for taskloop-based directive.

Definition at line 373 of file CGOpenMPRuntime.h.

Referenced by emitTaskInit().

◆ SavedKmpTaskTQTy

QualType clang::CodeGen::SavedKmpTaskTQTy

Saved kmp_task_t for task directive.

Definition at line 371 of file CGOpenMPRuntime.h.

Referenced by emitTaskInit().

◆ ShouldMarkAsGlobal

bool clang::CodeGen::ShouldMarkAsGlobal = true

Definition at line 627 of file CGOpenMPRuntime.h.

Referenced by markAsGlobalTarget().

◆ specified

i32 captured_struct **param SharedsTy A type which contains references the shared variables *param Shareds Context with the list of shared variables from the p *TaskFunction *param IfCond Not a nullptr if if clause was clang::CodeGen::specified

Definition at line 1153 of file CGOpenMPRuntime.h.

◆ state

i32 captured_struct **param SharedsTy A type which contains references the shared variables *param Shareds Context with the list of shared variables from the p *TaskFunction *param IfCond Not a nullptr if if clause was nullptr *otherwise *param Data Additional data for task generation like final * clang::CodeGen::state

Definition at line 747 of file CGOpenMPRuntime.h.

Referenced by addValue(), clang::ento::ProgramStateManager::ArrayToPointer(), clang::ento::retaincountchecker::RetainCountChecker::checkBeginFunction(), clang::ento::retaincountchecker::RetainCountChecker::checkBind(), clang::ento::retaincountchecker::RetainCountChecker::checkDeadSymbols(), clang::ento::retaincountchecker::RetainCountChecker::checkEndFunction(), clang::ento::retaincountchecker::RetainCountChecker::checkPostStmt(), clang::ento::retaincountchecker::RetainCountChecker::checkRegionChanges(), clang::ento::retaincountchecker::RetainCountChecker::checkSummary(), clang::ento::ProgramState::contains(), clang::ento::ExprEngine::CreateCXXTemporaryObject(), diagnoseDynamicExceptionSpecification(), clang::CodeGen::ConstantEmitter::emitAbstract(), clang::ento::retaincountchecker::RetainCountChecker::evalAssume(), clang::ento::ExprEngine::evalBind(), evalBinOpFieldRegionFieldRegion(), clang::ento::retaincountchecker::RetainCountChecker::evalCall(), clang::ento::ExprEngine::evalLoad(), evenFlexibleArraySize(), GetCFNumberSize(), clang::ento::ExprEngine::getGraph(), clang::ento::EnvironmentManager::getInitialEnvironment(), clang::ento::ExprEngine::getInitialState(), getNonNullAttrs(), getReturnTypeForMethod(), getSelfFlags(), getSimplifiedOffsets(), clang::Sema::GetTypeForDeclarator(), clang::Sema::GetTypeForDeclaratorCast(), clang::Sema::GetTypeFromParser(), clang::ento::retaincountchecker::RetainCountChecker::handleAutoreleaseCounts(), clang::ento::ExprEngine::handleLValueBitCast(), clang::ento::ExprEngine::handleLVectorSplat(), clang::ento::ExprEngine::handleUOExtension(), clang::ento::SValBuilder::haveSameType(), isArrayIndexOutOfBounds(), clang::ento::ExplodedGraph::isInterestingLValueExpr(), isInvalidSelf(), isReferenceCountingPointerDestructor(), clang::ento::retaincountchecker::RefVal::print(), clang::ento::ExprEngine::ProcessAutomaticObjDtor(), clang::ento::ExprEngine::processCallEnter(), clang::ento::ExprEngine::processCallExit(), clang::ento::ExprEngine::processIndirectGoto(), clang::ento::retaincountchecker::RetainCountChecker::processObjCLiterals(), clang::ento::retaincountchecker::RetainCountChecker::processSummaryOfInlined(), clang::ento::ExprEngine::processSwitch(), clang::ento::ProgramStateRelease(), clang::ento::ProgramStateRetain(), clang::Sema::DelayedDiagnostics::push(), clang::Sema::PushParsingDeclaration(), clang::Sema::DelayedDiagnostics::pushUndelayed(), REGISTER_TRAIT_WITH_PROGRAMSTATE(), clang::ento::ProgramStateManager::removeDeadBindings(), clang::ento::ProgramStateManager::removeGDM(), clang::ento::CheckerManager::runCheckersForEvalAssume(), clang::ento::CheckerManager::runCheckersForPostCall(), clang::ento::CheckerManager::runCheckersForRegionChanges(), clang::ento::ScanReachableSymbols::scan(), supportsNilWithFloatRet(), clang::CodeGen::ConstantEmitter::tryEmitAbstract(), clang::CodeGen::ConstantEmitter::tryEmitAbstractForInitializer(), tryRearrange(), clang::ento::retaincountchecker::RetainCountChecker::updateSymbol(), clang::ento::ExprEngine::VisitArraySubscriptExpr(), clang::ento::ExprEngine::VisitBinaryOperator(), clang::ento::ExprEngine::VisitCast(), clang::ento::ExprEngine::VisitCommonDeclRefExpr(), clang::ento::ExprEngine::VisitCXXCatchStmt(), clang::ento::ExprEngine::VisitCXXDeleteExpr(), clang::ento::ExprEngine::VisitCXXThisExpr(), clang::ento::ExprEngine::VisitDeclStmt(), clang::ento::ExprEngine::VisitGuardedExpr(), clang::ento::ExprEngine::VisitIncrementDecrementOperator(), clang::ento::ExprEngine::VisitInitListExpr(), clang::ento::ExprEngine::VisitLogicalExpr(), clang::ento::ExprEngine::VisitLvalObjCIvarRefExpr(), clang::ento::ExprEngine::VisitMemberExpr(), clang::ento::ExprEngine::VisitUnaryExprOrTypeTraitExpr(), clang::ento::ExprEngine::VisitUnaryOperator(), and clang::ento::SubEngine::~SubEngine().

◆ TgtBinaryDescriptorQTy

QualType clang::CodeGen::TgtBinaryDescriptorQTy

struct __tgt_bin_desc{ int32_t NumDevices; // Number of devices supported.

__tgt_device_image *DeviceImages; // Arrays of device images // (one per device). __tgt_offload_entry *EntriesBegin; // Begin of the table with all the // entries. __tgt_offload_entry *EntriesEnd; // End of the table with all the // entries (non inclusive). };

Definition at line 416 of file CGOpenMPRuntime.h.

Referenced by getTgtBinaryDescriptorQTy().

◆ TgtDeviceImageQTy

QualType clang::CodeGen::TgtDeviceImageQTy

struct __tgt_device_image{ void *ImageStart; // Pointer to the target code start.

void *ImageEnd; // Pointer to the target code end. // We also add the host entries to the device image, as it may be useful // for the target runtime to have access to that information. __tgt_offload_entry *EntriesBegin; // Begin of the table with all // the entries. __tgt_offload_entry *EntriesEnd; // End of the table with all the // entries (non inclusive). };

Definition at line 406 of file CGOpenMPRuntime.h.

Referenced by getTgtDeviceImageQTy().

◆ TgtOffloadEntryQTy

QualType clang::CodeGen::TgtOffloadEntryQTy

Type struct __tgt_offload_entry{ void *addr; // Pointer to the offload entry info.

// (function or global) char *name; // Name of the function or global. size_t size; // Size of the entry info (0 if it a function). };

Definition at line 395 of file CGOpenMPRuntime.h.

Referenced by getTgtOffloadEntryQTy().

◆ ThreadPrivateWithDefinition

llvm::StringSet clang::CodeGen::ThreadPrivateWithDefinition

Set of threadprivate variables with the generated initializer.

Definition at line 709 of file CGOpenMPRuntime.h.

Referenced by emitThreadPrivateVarInit().

◆ tiednsee

i32 captured_struct **param SharedsTy A type which contains references the shared variables *param Shareds Context with the list of shared variables from the p *TaskFunction *param IfCond Not a nullptr if if clause was nullptr *otherwise *param Data Additional data for task generation like clang::CodeGen::tiednsee

Definition at line 747 of file CGOpenMPRuntime.h.

◆ true

clang::CodeGen::true

A convenience builder class for complex constant initializers, especially for anonymous global structures used by various language runtimes.

The basic usage pattern is expected to be something like: ConstantInitBuilder builder(CGM); auto toplevel = builder.beginStruct(); toplevel.addInt(CGM.SizeTy, widgets.size()); auto widgetArray = builder.beginArray(); for (auto &widget : widgets) { auto widgetDesc = widgetArray.beginStruct(); widgetDesc.addInt(CGM.SizeTy, widget.getPower()); widgetDesc.add(CGM.GetAddrOfConstantString(widget.getName())); widgetDesc.add(CGM.GetAddrOfGlobal(widget.getInitializerDecl())); widgetDesc.finishAndAddTo(widgetArray); } widgetArray.finishAndAddTo(toplevel); auto global = toplevel.finishAndCreateGlobal("WIDGET_LIST", Align, /*constant

Definition at line 31 of file ConstantInitBuilder.h.