clang  7.0.0svn
Public Member Functions | Public Attributes | List of all members
clang::CGOpenMPSIMDRuntime Class Referencefinal

Class supports emissionof SIMD-only code. More...

#include "/opt/doxygen-docs/src/llvm/tools/clang/lib/CodeGen/CGOpenMPRuntime.h"

Inheritance diagram for clang::CGOpenMPSIMDRuntime:
Inheritance graph
[legend]
Collaboration diagram for clang::CGOpenMPSIMDRuntime:
Collaboration graph
[legend]

Public Member Functions

 CGOpenMPSIMDRuntime (CodeGenModule &CGM)
 
 ~CGOpenMPSIMDRuntime () override
 
llvm::ValueemitParallelOutlinedFunction (const OMPExecutableDirective &D, const VarDecl *ThreadIDVar, OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen) override
 Emits outlined function for the specified OpenMP parallel directive D. More...
 
llvm::ValueemitTeamsOutlinedFunction (const OMPExecutableDirective &D, const VarDecl *ThreadIDVar, OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen) override
 Emits outlined function for the specified OpenMP teams directive D. More...
 
llvm::ValueemitTaskOutlinedFunction (const OMPExecutableDirective &D, const VarDecl *ThreadIDVar, const VarDecl *PartIDVar, const VarDecl *TaskTVar, OpenMPDirectiveKind InnermostKind, const RegionCodeGenTy &CodeGen, bool Tied, unsigned &NumberOfParts) override
 Emits outlined function for the OpenMP task directive D. More...
 
void emitParallelCall (CodeGenFunction &CGF, SourceLocation Loc, llvm::Value *OutlinedFn, ArrayRef< llvm::Value *> CapturedVars, const Expr *IfCond) override
 Emits code for parallel or serial call of the OutlinedFn with variables captured in a record which address is stored in CapturedStruct. More...
 
void emitCriticalRegion (CodeGenFunction &CGF, StringRef CriticalName, const RegionCodeGenTy &CriticalOpGen, SourceLocation Loc, const Expr *Hint=nullptr) override
 Emits a critical region. More...
 
void emitMasterRegion (CodeGenFunction &CGF, const RegionCodeGenTy &MasterOpGen, SourceLocation Loc) override
 Emits a master region. More...
 
void emitTaskyieldCall (CodeGenFunction &CGF, SourceLocation Loc) override
 Emits code for a taskyield directive. More...
 
void emitTaskgroupRegion (CodeGenFunction &CGF, const RegionCodeGenTy &TaskgroupOpGen, SourceLocation Loc) override
 Emit a taskgroup region. More...
 
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) override
 Emits a single region. More...
 
void emitOrderedRegion (CodeGenFunction &CGF, const RegionCodeGenTy &OrderedOpGen, SourceLocation Loc, bool IsThreads) override
 Emit an ordered region. More...
 
void emitBarrierCall (CodeGenFunction &CGF, SourceLocation Loc, OpenMPDirectiveKind Kind, bool EmitChecks=true, bool ForceSimpleCall=false) override
 Emit an implicit/explicit barrier for OpenMP threads. More...
 
void emitForDispatchInit (CodeGenFunction &CGF, SourceLocation Loc, const OpenMPScheduleTy &ScheduleKind, unsigned IVSize, bool IVSigned, bool Ordered, const DispatchRTInput &DispatchValues) override
 This is used for non static scheduled types and when the ordered clause is present on the loop construct. More...
 
void emitForStaticInit (CodeGenFunction &CGF, SourceLocation Loc, OpenMPDirectiveKind DKind, const OpenMPScheduleTy &ScheduleKind, const StaticRTInput &Values) override
 Call the appropriate runtime routine to initialize it before start of loop. More...
 
void emitDistributeStaticInit (CodeGenFunction &CGF, SourceLocation Loc, OpenMPDistScheduleClauseKind SchedKind, const StaticRTInput &Values) override
 
void emitForOrderedIterationEnd (CodeGenFunction &CGF, SourceLocation Loc, unsigned IVSize, bool IVSigned) override
 Call the appropriate runtime routine to notify that we finished iteration of the ordered loop with the dynamic scheduling. More...
 
void emitForStaticFinish (CodeGenFunction &CGF, SourceLocation Loc, OpenMPDirectiveKind DKind) override
 Call the appropriate runtime routine to notify that we finished all the work with current loop. More...
 
llvm::ValueemitForNext (CodeGenFunction &CGF, SourceLocation Loc, unsigned IVSize, bool IVSigned, Address IL, Address LB, Address UB, Address ST) override
 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...
 
void emitNumThreadsClause (CodeGenFunction &CGF, llvm::Value *NumThreads, SourceLocation Loc) override
 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...
 
void emitProcBindClause (CodeGenFunction &CGF, OpenMPProcBindClauseKind ProcBind, SourceLocation Loc) override
 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...
 
Address getAddrOfThreadPrivate (CodeGenFunction &CGF, const VarDecl *VD, Address VDAddr, SourceLocation Loc) override
 Returns address of the threadprivate variable for the current thread. More...
 
llvm::Function * emitThreadPrivateVarDefinition (const VarDecl *VD, Address VDAddr, SourceLocation Loc, bool PerformInit, CodeGenFunction *CGF=nullptr) override
 Emit a code for initialization of threadprivate variable. More...
 
Address getAddrOfArtificialThreadPrivate (CodeGenFunction &CGF, QualType VarType, StringRef Name) override
 Creates artificial threadprivate variable with name Name and type VarType. More...
 
void emitFlush (CodeGenFunction &CGF, ArrayRef< const Expr *> Vars, SourceLocation Loc) override
 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 *void emitTaskCall (CodeGenFunction &CGF, SourceLocation Loc, const OMPExecutableDirective &D, llvm::Value *TaskFunction, QualType SharedsTy, Address Shareds, const Expr *IfCond, const OMPTaskDataTy &Data) override
 
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 *void emitTaskLoopCall (CodeGenFunction &CGF, SourceLocation Loc, const OMPLoopDirective &D, llvm::Value *TaskFunction, QualType SharedsTy, Address Shareds, const Expr *IfCond, const OMPTaskDataTy &Data) override
 
void emitReduction (CodeGenFunction &CGF, SourceLocation Loc, ArrayRef< const Expr *> Privates, ArrayRef< const Expr *> LHSExprs, ArrayRef< const Expr *> RHSExprs, ArrayRef< const Expr *> ReductionOps, ReductionOptionsTy Options) override
 Emit a code for reduction clause. More...
 
llvm::ValueemitTaskReductionInit (CodeGenFunction &CGF, SourceLocation Loc, ArrayRef< const Expr *> LHSExprs, ArrayRef< const Expr *> RHSExprs, const OMPTaskDataTy &Data) override
 Emit a code for initialization of task reduction clause. More...
 
void emitTaskReductionFixups (CodeGenFunction &CGF, SourceLocation Loc, ReductionCodeGen &RCG, unsigned N) override
 Required to resolve existing problems in the runtime. More...
 
Address getTaskReductionItem (CodeGenFunction &CGF, SourceLocation Loc, llvm::Value *ReductionsPtr, LValue SharedLVal) override
 Get the address of void * type of the privatue copy of the reduction item specified by the SharedLVal. More...
 
void emitTaskwaitCall (CodeGenFunction &CGF, SourceLocation Loc) override
 Emit code for 'taskwait' directive. More...
 
void emitCancellationPointCall (CodeGenFunction &CGF, SourceLocation Loc, OpenMPDirectiveKind CancelRegion) override
 Emit code for 'cancellation point' construct. More...
 
void emitCancelCall (CodeGenFunction &CGF, SourceLocation Loc, const Expr *IfCond, OpenMPDirectiveKind CancelRegion) override
 Emit code for 'cancel' construct. More...
 
void emitTargetOutlinedFunction (const OMPExecutableDirective &D, StringRef ParentName, llvm::Function *&OutlinedFn, llvm::Constant *&OutlinedFnID, bool IsOffloadEntry, const RegionCodeGenTy &CodeGen) override
 Emit outilined function for 'target' directive. More...
 
void emitTargetCall (CodeGenFunction &CGF, const OMPExecutableDirective &D, llvm::Value *OutlinedFn, llvm::Value *OutlinedFnID, const Expr *IfCond, const Expr *Device) override
 Emit the target offloading code associated with D. More...
 
bool emitTargetFunctions (GlobalDecl GD) override
 Emit the target regions enclosed in GD function definition or the function itself in case it is a valid device function. More...
 
bool emitTargetGlobalVariable (GlobalDecl GD) override
 Emit the global variable if it is a valid device global variable. More...
 
bool emitTargetGlobal (GlobalDecl GD) override
 Emit the global GD if it is meaningful for the target. More...
 
llvm::Function * emitRegistrationFunction () override
 Creates the offloading descriptor in the event any target region was emitted in the current module and return the function that registers it. More...
 
void emitTeamsCall (CodeGenFunction &CGF, const OMPExecutableDirective &D, SourceLocation Loc, llvm::Value *OutlinedFn, ArrayRef< llvm::Value *> CapturedVars) override
 Emits code for teams call of the OutlinedFn with variables captured in a record which address is stored in CapturedStruct. More...
 
void emitNumTeamsClause (CodeGenFunction &CGF, const Expr *NumTeams, const Expr *ThreadLimit, SourceLocation Loc) override
 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...
 
void emitTargetDataCalls (CodeGenFunction &CGF, const OMPExecutableDirective &D, const Expr *IfCond, const Expr *Device, const RegionCodeGenTy &CodeGen, TargetDataInfo &Info) override
 Emit the target data mapping code associated with D. More...
 
void emitTargetDataStandAloneCall (CodeGenFunction &CGF, const OMPExecutableDirective &D, const Expr *IfCond, const Expr *Device) override
 Emit the data mapping/movement code associated with the directive D that should be of the form 'target [{enter|exit} data | update]'. More...
 
void emitDoacrossInit (CodeGenFunction &CGF, const OMPLoopDirective &D) override
 Emit initialization for doacross loop nesting support. More...
 
void emitDoacrossOrdered (CodeGenFunction &CGF, const OMPDependClause *C) override
 Emit code for doacross ordered directive with 'depend' clause. More...
 
const VarDecltranslateParameter (const FieldDecl *FD, const VarDecl *NativeParam) const override
 Translates the native parameter of outlined function if this is required for target. More...
 
Address getParameterAddress (CodeGenFunction &CGF, const VarDecl *NativeParam, const VarDecl *TargetParam) const override
 Gets the address of the native argument basing on the address of the target-specific parameter. More...
 

Public Attributes

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
 
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 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 final * state
 

Detailed Description

Class supports emissionof SIMD-only code.

Definition at line 1513 of file CGOpenMPRuntime.h.

Constructor & Destructor Documentation

◆ CGOpenMPSIMDRuntime()

clang::CGOpenMPSIMDRuntime::CGOpenMPSIMDRuntime ( CodeGenModule &  CGM)
inlineexplicit

Definition at line 1515 of file CGOpenMPRuntime.h.

◆ ~CGOpenMPSIMDRuntime()

clang::CGOpenMPSIMDRuntime::~CGOpenMPSIMDRuntime ( )
inlineoverride

Member Function Documentation

◆ emitBarrierCall()

void CGOpenMPSIMDRuntime::emitBarrierCall ( CodeGenFunction CGF,
SourceLocation  Loc,
OpenMPDirectiveKind  Kind,
bool  EmitChecks = true,
bool  ForceSimpleCall = false 
)
override

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).

Definition at line 8729 of file CGOpenMPRuntime.cpp.

◆ emitCancelCall()

void CGOpenMPSIMDRuntime::emitCancelCall ( CodeGenFunction CGF,
SourceLocation  Loc,
const Expr IfCond,
OpenMPDirectiveKind  CancelRegion 
)
override

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.

Definition at line 8869 of file CGOpenMPRuntime.cpp.

◆ emitCancellationPointCall()

void CGOpenMPSIMDRuntime::emitCancellationPointCall ( CodeGenFunction CGF,
SourceLocation  Loc,
OpenMPDirectiveKind  CancelRegion 
)
override

Emit code for 'cancellation point' construct.

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

Definition at line 8863 of file CGOpenMPRuntime.cpp.

◆ emitCriticalRegion()

void CGOpenMPSIMDRuntime::emitCriticalRegion ( CodeGenFunction CGF,
StringRef  CriticalName,
const RegionCodeGenTy CriticalOpGen,
SourceLocation  Loc,
const Expr Hint = nullptr 
)
override

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).

Definition at line 8690 of file CGOpenMPRuntime.cpp.

◆ emitDistributeStaticInit()

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

Definition at line 8750 of file CGOpenMPRuntime.cpp.

◆ emitDoacrossInit()

void CGOpenMPSIMDRuntime::emitDoacrossInit ( CodeGenFunction CGF,
const OMPLoopDirective D 
)
override

Emit initialization for doacross loop nesting support.

Parameters
DLoop-based construct used in doacross nesting construct.

Definition at line 8933 of file CGOpenMPRuntime.cpp.

◆ emitDoacrossOrdered()

void CGOpenMPSIMDRuntime::emitDoacrossOrdered ( CodeGenFunction CGF,
const OMPDependClause C 
)
override

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

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

Definition at line 8938 of file CGOpenMPRuntime.cpp.

◆ emitFlush()

void CGOpenMPSIMDRuntime::emitFlush ( CodeGenFunction CGF,
ArrayRef< const Expr *>  Vars,
SourceLocation  Loc 
)
override

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

Parameters
VarsList of variables to flush.

Definition at line 8807 of file CGOpenMPRuntime.cpp.

◆ emitForDispatchInit()

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

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.

Definition at line 8737 of file CGOpenMPRuntime.cpp.

◆ emitForNext()

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

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.

Definition at line 8769 of file CGOpenMPRuntime.cpp.

◆ emitForOrderedIterationEnd()

void CGOpenMPSIMDRuntime::emitForOrderedIterationEnd ( CodeGenFunction CGF,
SourceLocation  Loc,
unsigned  IVSize,
bool  IVSigned 
)
override

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.

Definition at line 8756 of file CGOpenMPRuntime.cpp.

◆ emitForStaticFinish()

void CGOpenMPSIMDRuntime::emitForStaticFinish ( CodeGenFunction CGF,
SourceLocation  Loc,
OpenMPDirectiveKind  DKind 
)
override

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.

Definition at line 8763 of file CGOpenMPRuntime.cpp.

◆ emitForStaticInit()

void CGOpenMPSIMDRuntime::emitForStaticInit ( CodeGenFunction CGF,
SourceLocation  Loc,
OpenMPDirectiveKind  DKind,
const OpenMPScheduleTy ScheduleKind,
const StaticRTInput Values 
)
override

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.

Definition at line 8744 of file CGOpenMPRuntime.cpp.

◆ emitMasterRegion()

void CGOpenMPSIMDRuntime::emitMasterRegion ( CodeGenFunction CGF,
const RegionCodeGenTy MasterOpGen,
SourceLocation  Loc 
)
override

Emits a master region.

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

Definition at line 8697 of file CGOpenMPRuntime.cpp.

◆ emitNumTeamsClause()

void CGOpenMPSIMDRuntime::emitNumTeamsClause ( CodeGenFunction CGF,
const Expr NumTeams,
const Expr ThreadLimit,
SourceLocation  Loc 
)
override

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.

Definition at line 8914 of file CGOpenMPRuntime.cpp.

◆ emitNumThreadsClause()

void CGOpenMPSIMDRuntime::emitNumThreadsClause ( CodeGenFunction CGF,
llvm::Value NumThreads,
SourceLocation  Loc 
)
override

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.

Definition at line 8777 of file CGOpenMPRuntime.cpp.

◆ emitOrderedRegion()

void CGOpenMPSIMDRuntime::emitOrderedRegion ( CodeGenFunction CGF,
const RegionCodeGenTy OrderedOpGen,
SourceLocation  Loc,
bool  IsThreads 
)
override

Emit an ordered region.

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

Definition at line 8722 of file CGOpenMPRuntime.cpp.

◆ emitParallelCall()

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

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.

Definition at line 8682 of file CGOpenMPRuntime.cpp.

◆ emitParallelOutlinedFunction()

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

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.

Definition at line 8662 of file CGOpenMPRuntime.cpp.

◆ emitProcBindClause()

void CGOpenMPSIMDRuntime::emitProcBindClause ( CodeGenFunction CGF,
OpenMPProcBindClauseKind  ProcBind,
SourceLocation  Loc 
)
override

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.

Definition at line 8783 of file CGOpenMPRuntime.cpp.

◆ emitReduction()

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

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.

Definition at line 8829 of file CGOpenMPRuntime.cpp.

References clang::CodeGen::emitReduction(), and clang::CodeGen::ReductionOptionsTy::SimpleReduction.

◆ emitRegistrationFunction()

llvm::Function * CGOpenMPSIMDRuntime::emitRegistrationFunction ( )
override

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

Definition at line 8902 of file CGOpenMPRuntime.cpp.

◆ emitSingleRegion()

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

Emits a single region.

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

Definition at line 8714 of file CGOpenMPRuntime.cpp.

◆ emitTargetCall()

void CGOpenMPSIMDRuntime::emitTargetCall ( CodeGenFunction CGF,
const OMPExecutableDirective D,
llvm::Value OutlinedFn,
llvm::Value OutlinedFnID,
const Expr IfCond,
const Expr Device 
)
override

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.

Definition at line 8882 of file CGOpenMPRuntime.cpp.

◆ emitTargetDataCalls()

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

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.

Definition at line 8921 of file CGOpenMPRuntime.cpp.

◆ emitTargetDataStandAloneCall()

void CGOpenMPSIMDRuntime::emitTargetDataStandAloneCall ( CodeGenFunction CGF,
const OMPExecutableDirective D,
const Expr IfCond,
const Expr Device 
)
override

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.

Definition at line 8927 of file CGOpenMPRuntime.cpp.

◆ emitTargetFunctions()

bool CGOpenMPSIMDRuntime::emitTargetFunctions ( GlobalDecl  GD)
override

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.

Definition at line 8890 of file CGOpenMPRuntime.cpp.

◆ emitTargetGlobal()

bool CGOpenMPSIMDRuntime::emitTargetGlobal ( GlobalDecl  GD)
override

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

Returns if it was emitted successfully.

Parameters
GDGlobal to scan.

Definition at line 8898 of file CGOpenMPRuntime.cpp.

◆ emitTargetGlobalVariable()

bool CGOpenMPSIMDRuntime::emitTargetGlobalVariable ( GlobalDecl  GD)
override

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.

Definition at line 8894 of file CGOpenMPRuntime.cpp.

◆ emitTargetOutlinedFunction()

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

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.

Definition at line 8875 of file CGOpenMPRuntime.cpp.

◆ emitTaskCall()

void CGOpenMPSIMDRuntime::emitTaskCall ( CodeGenFunction CGF,
SourceLocation  Loc,
const OMPExecutableDirective D,
llvm::Value TaskFunction,
QualType  SharedsTy,
Address  Shareds,
const Expr IfCond,
const OMPTaskDataTy Data 
)
override

Definition at line 8813 of file CGOpenMPRuntime.cpp.

◆ emitTaskgroupRegion()

void CGOpenMPSIMDRuntime::emitTaskgroupRegion ( CodeGenFunction CGF,
const RegionCodeGenTy TaskgroupOpGen,
SourceLocation  Loc 
)
override

Emit a taskgroup region.

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

Definition at line 8708 of file CGOpenMPRuntime.cpp.

◆ emitTaskLoopCall()

void CGOpenMPSIMDRuntime::emitTaskLoopCall ( CodeGenFunction CGF,
SourceLocation  Loc,
const OMPLoopDirective D,
llvm::Value TaskFunction,
QualType  SharedsTy,
Address  Shareds,
const Expr IfCond,
const OMPTaskDataTy Data 
)
override

Definition at line 8822 of file CGOpenMPRuntime.cpp.

◆ emitTaskOutlinedFunction()

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

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.

Definition at line 8674 of file CGOpenMPRuntime.cpp.

◆ emitTaskReductionFixups()

void CGOpenMPSIMDRuntime::emitTaskReductionFixups ( CodeGenFunction CGF,
SourceLocation  Loc,
ReductionCodeGen RCG,
unsigned  N 
)
override

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.

Definition at line 8844 of file CGOpenMPRuntime.cpp.

◆ emitTaskReductionInit()

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

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.

Definition at line 8838 of file CGOpenMPRuntime.cpp.

◆ emitTaskwaitCall()

void CGOpenMPSIMDRuntime::emitTaskwaitCall ( CodeGenFunction CGF,
SourceLocation  Loc 
)
override

Emit code for 'taskwait' directive.

Definition at line 8858 of file CGOpenMPRuntime.cpp.

◆ emitTaskyieldCall()

void CGOpenMPSIMDRuntime::emitTaskyieldCall ( CodeGenFunction CGF,
SourceLocation  Loc 
)
override

Emits code for a taskyield directive.

Definition at line 8703 of file CGOpenMPRuntime.cpp.

◆ emitTeamsCall()

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

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.

Definition at line 8906 of file CGOpenMPRuntime.cpp.

◆ emitTeamsOutlinedFunction()

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

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.

Definition at line 8668 of file CGOpenMPRuntime.cpp.

◆ emitThreadPrivateVarDefinition()

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

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.

Definition at line 8796 of file CGOpenMPRuntime.cpp.

◆ getAddrOfArtificialThreadPrivate()

Address CGOpenMPSIMDRuntime::getAddrOfArtificialThreadPrivate ( CodeGenFunction CGF,
QualType  VarType,
StringRef  Name 
)
override

Creates artificial threadprivate variable with name Name and type VarType.

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

Definition at line 8802 of file CGOpenMPRuntime.cpp.

◆ getAddrOfThreadPrivate()

Address CGOpenMPSIMDRuntime::getAddrOfThreadPrivate ( CodeGenFunction CGF,
const VarDecl VD,
Address  VDAddr,
SourceLocation  Loc 
)
override

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.

Definition at line 8789 of file CGOpenMPRuntime.cpp.

◆ getParameterAddress()

Address CGOpenMPSIMDRuntime::getParameterAddress ( CodeGenFunction CGF,
const VarDecl NativeParam,
const VarDecl TargetParam 
) const
override

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

Parameters
NativeParamParameter itself.
TargetParamCorresponding target-specific parameter.

Definition at line 8950 of file CGOpenMPRuntime.cpp.

◆ getTaskReductionItem()

Address CGOpenMPSIMDRuntime::getTaskReductionItem ( CodeGenFunction CGF,
SourceLocation  Loc,
llvm::Value ReductionsPtr,
LValue  SharedLVal 
)
override

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.

Definition at line 8851 of file CGOpenMPRuntime.cpp.

◆ translateParameter()

const VarDecl * CGOpenMPSIMDRuntime::translateParameter ( const FieldDecl FD,
const VarDecl NativeParam 
) const
override

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

Member Data Documentation

◆ 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::CGOpenMPSIMDRuntime::specified

Definition at line 1794 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::CGOpenMPSIMDRuntime::state

Definition at line 1794 of file CGOpenMPRuntime.h.

◆ 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::CGOpenMPSIMDRuntime::tiednsee

Definition at line 1794 of file CGOpenMPRuntime.h.


The documentation for this class was generated from the following files: