[OPENMP] Codegen for 'ordered' directive.
Add codegen for 'ordered' directive:
__kmpc_ordered(ident_t *, gtid);
<associated statement>;
__kmpc_end_ordered(ident_t *, gtid);
Also for 'for' directives with the dynamic scheduling and an 'ordered' clause added a call to '__kmpc_dispatch_fini_(4|8)[u]()' function after increment expression for loop control variable:
while(__kmpc_dispatch_next(&LB, &UB)) {
idx = LB;
while (idx <= UB) { BODY; ++idx;
__kmpc_dispatch_fini_(4|8)[u](); // For ordered loops only.
} // inner loop
}
Differential Revision: http://reviews.llvm.org/D9070
llvm-svn: 235496
This commit is contained in:
@@ -2139,10 +2139,21 @@ public:
|
||||
void EmitOMPTargetDirective(const OMPTargetDirective &S);
|
||||
void EmitOMPTeamsDirective(const OMPTeamsDirective &S);
|
||||
|
||||
void
|
||||
EmitOMPInnerLoop(const Stmt &S, bool RequiresCleanup, const Expr *LoopCond,
|
||||
const Expr *IncExpr,
|
||||
const llvm::function_ref<void(CodeGenFunction &)> &BodyGen);
|
||||
/// \brief Emit inner loop of the worksharing/simd construct.
|
||||
///
|
||||
/// \param S Directive, for which the inner loop must be emitted.
|
||||
/// \param RequiresCleanup true, if directive has some associated private
|
||||
/// variables.
|
||||
/// \param LoopCond Bollean condition for loop continuation.
|
||||
/// \param IncExpr Increment expression for loop control variable.
|
||||
/// \param BodyGen Generator for the inner body of the inner loop.
|
||||
/// \param PostIncGen Genrator for post-increment code (required for ordered
|
||||
/// loop directvies).
|
||||
void EmitOMPInnerLoop(
|
||||
const Stmt &S, bool RequiresCleanup, const Expr *LoopCond,
|
||||
const Expr *IncExpr,
|
||||
const llvm::function_ref<void(CodeGenFunction &)> &BodyGen,
|
||||
const llvm::function_ref<void(CodeGenFunction &)> &PostIncGen);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user