Skip to content

Commit

Permalink
[flang][openacc] Add kernels construct lowering
Browse files Browse the repository at this point in the history
Lower the parse tree to acc dialects operations. Make use
of the compute construct lowering.

Depends on D148277

Reviewed By: PeteSteinfeld

Differential Revision: https://reviews.llvm.org/D148278
  • Loading branch information
clementval committed Apr 14, 2023
1 parent 33468a5 commit 3163f7a
Show file tree
Hide file tree
Showing 3 changed files with 943 additions and 8 deletions.
28 changes: 20 additions & 8 deletions flang/lib/Lower/OpenACC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -551,14 +551,15 @@ createComputeOp(Fortran::lower::AbstractConverter &converter,
llvm::SmallVector<int32_t, 8> operandSegments;
addOperand(operands, operandSegments, async);
addOperands(operands, operandSegments, waitOperands);
if constexpr (std::is_same_v<Op, mlir::acc::ParallelOp>) {
if constexpr (!std::is_same_v<Op, mlir::acc::SerialOp>) {
addOperand(operands, operandSegments, numGangs);
addOperand(operands, operandSegments, numWorkers);
addOperand(operands, operandSegments, vectorLength);
}
addOperand(operands, operandSegments, ifCond);
addOperand(operands, operandSegments, selfCond);
addOperands(operands, operandSegments, reductionOperands);
if constexpr (!std::is_same_v<Op, mlir::acc::KernelsOp>)
addOperands(operands, operandSegments, reductionOperands);
addOperands(operands, operandSegments, copyOperands);
addOperands(operands, operandSegments, copyinOperands);
addOperands(operands, operandSegments, copyinReadonlyOperands);
Expand All @@ -570,11 +571,18 @@ createComputeOp(Fortran::lower::AbstractConverter &converter,
addOperands(operands, operandSegments, presentOperands);
addOperands(operands, operandSegments, devicePtrOperands);
addOperands(operands, operandSegments, attachOperands);
addOperands(operands, operandSegments, privateOperands);
addOperands(operands, operandSegments, firstprivateOperands);
if constexpr (!std::is_same_v<Op, mlir::acc::KernelsOp>) {
addOperands(operands, operandSegments, privateOperands);
addOperands(operands, operandSegments, firstprivateOperands);
}

Op computeOp = createRegionOp<Op, mlir::acc::YieldOp>(
firOpBuilder, currentLocation, operands, operandSegments);
Op computeOp;
if constexpr (std::is_same_v<Op, mlir::acc::KernelsOp>)
computeOp = createRegionOp<Op, mlir::acc::TerminatorOp>(
firOpBuilder, currentLocation, operands, operandSegments);
else
computeOp = createRegionOp<Op, mlir::acc::YieldOp>(
firOpBuilder, currentLocation, operands, operandSegments);

if (addAsyncAttr)
computeOp.setAsyncAttrAttr(firOpBuilder.getUnitAttr());
Expand Down Expand Up @@ -697,7 +705,8 @@ genACC(Fortran::lower::AbstractConverter &converter,
createComputeOp<mlir::acc::SerialOp>(
converter, currentLocation, semanticsContext, stmtCtx, accClauseList);
} else if (blockDirective.v == llvm::acc::ACCD_kernels) {
TODO(currentLocation, "kernels construct lowering");
createComputeOp<mlir::acc::KernelsOp>(
converter, currentLocation, semanticsContext, stmtCtx, accClauseList);
} else if (blockDirective.v == llvm::acc::ACCD_host_data) {
TODO(currentLocation, "host_data construct lowering");
}
Expand All @@ -720,7 +729,10 @@ genACC(Fortran::lower::AbstractConverter &converter,
Fortran::lower::StatementContext stmtCtx;

if (combinedDirective.v == llvm::acc::ACCD_kernels_loop) {
TODO(currentLocation, "OpenACC Kernels Loop construct not lowered yet!");
createComputeOp<mlir::acc::KernelsOp>(
converter, currentLocation, semanticsContext, stmtCtx, accClauseList);
createLoopOp(converter, currentLocation, semanticsContext, stmtCtx,
accClauseList);
} else if (combinedDirective.v == llvm::acc::ACCD_parallel_loop) {
createComputeOp<mlir::acc::ParallelOp>(
converter, currentLocation, semanticsContext, stmtCtx, accClauseList);
Expand Down

0 comments on commit 3163f7a

Please sign in to comment.