Skip to content

Commit 2a6e9fd

Browse files
committed
Address review comments
1 parent 282aa6c commit 2a6e9fd

File tree

1 file changed

+35
-81
lines changed

1 file changed

+35
-81
lines changed

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 35 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -992,6 +992,29 @@ static OpTy genOpWithBody(const OpWithBodyGenInfo &info,
992992
return op;
993993
}
994994

995+
template <typename OpTy, typename ClauseOpsTy>
996+
static OpTy genWrapperOp(lower::AbstractConverter &converter,
997+
mlir::Location loc, const ClauseOpsTy &clauseOps,
998+
llvm::ArrayRef<mlir::Type> blockArgTypes) {
999+
static_assert(
1000+
OpTy::template hasTrait<mlir::omp::LoopWrapperInterface::Trait>(),
1001+
"expected a loop wrapper");
1002+
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
1003+
1004+
// Create wrapper.
1005+
auto op = firOpBuilder.create<OpTy>(loc, clauseOps);
1006+
1007+
// Create entry block with arguments.
1008+
llvm::SmallVector<mlir::Location> locs{blockArgTypes.size(), loc};
1009+
firOpBuilder.createBlock(&op.getRegion(), /*insertPt=*/{}, blockArgTypes,
1010+
locs);
1011+
1012+
firOpBuilder.setInsertionPoint(
1013+
lower::genOpenMPTerminator(firOpBuilder, op, loc));
1014+
1015+
return op;
1016+
}
1017+
9951018
//===----------------------------------------------------------------------===//
9961019
// Code generation functions for clauses
9971020
//===----------------------------------------------------------------------===//
@@ -1337,7 +1360,7 @@ genLoopNestOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
13371360
llvm::omp::Directive directive, DataSharingProcessor &dsp) {
13381361
auto ivCallback = [&](mlir::Operation *op) {
13391362
genLoopVars(op, converter, loc, iv, wrapperSyms, wrapperArgs);
1340-
return llvm::SmallVector<const semantics::Symbol *>(iv);
1363+
return llvm::SmallVector<const semantics::Symbol *>{iv};
13411364
};
13421365

13431366
auto *nestedEval =
@@ -1397,7 +1420,7 @@ static mlir::omp::ParallelOp genParallelOp(
13971420

13981421
auto reductionCallback = [&](mlir::Operation *op) {
13991422
genReductionVars(op, converter, loc, reductionSyms, reductionTypes);
1400-
return llvm::SmallVector<const semantics::Symbol *>(reductionSyms);
1423+
return llvm::SmallVector<const semantics::Symbol *>{reductionSyms};
14011424
};
14021425

14031426
OpWithBodyGenInfo genInfo =
@@ -1437,7 +1460,7 @@ static mlir::omp::ParallelOp genParallelOp(
14371460
firOpBuilder.createBlock(&region, /*insertPt=*/{}, allRegionArgTypes,
14381461
allRegionArgLocs);
14391462

1440-
llvm::SmallVector<const semantics::Symbol *> allSymbols(reductionSyms);
1463+
llvm::SmallVector<const semantics::Symbol *> allSymbols{reductionSyms};
14411464
allSymbols.append(dsp.getAllSymbolsToPrivatize().begin(),
14421465
dsp.getAllSymbolsToPrivatize().end());
14431466

@@ -1814,78 +1837,6 @@ genTeamsOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
18141837
queue, item, clauseOps);
18151838
}
18161839

1817-
//===----------------------------------------------------------------------===//
1818-
// Code generation functions for loop wrappers
1819-
//===----------------------------------------------------------------------===//
1820-
1821-
static mlir::omp::DistributeOp
1822-
genDistributeWrapperOp(lower::AbstractConverter &converter,
1823-
semantics::SemanticsContext &semaCtx,
1824-
lower::pft::Evaluation &eval, mlir::Location loc,
1825-
const mlir::omp::DistributeClauseOps &clauseOps) {
1826-
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
1827-
1828-
// Create omp.distribute wrapper.
1829-
auto distributeOp =
1830-
firOpBuilder.create<mlir::omp::DistributeOp>(loc, clauseOps);
1831-
1832-
// TODO: Populate entry block arguments with private variables.
1833-
firOpBuilder.createBlock(&distributeOp.getRegion());
1834-
firOpBuilder.setInsertionPoint(
1835-
lower::genOpenMPTerminator(firOpBuilder, distributeOp, loc));
1836-
1837-
return distributeOp;
1838-
}
1839-
1840-
static mlir::omp::SimdOp
1841-
genSimdWrapperOp(lower::AbstractConverter &converter,
1842-
semantics::SemanticsContext &semaCtx,
1843-
lower::pft::Evaluation &eval, mlir::Location loc,
1844-
const mlir::omp::SimdClauseOps &clauseOps) {
1845-
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
1846-
1847-
// Create omp.simd wrapper.
1848-
auto simdOp = firOpBuilder.create<mlir::omp::SimdOp>(loc, clauseOps);
1849-
1850-
// TODO: Populate entry block arguments with reduction and private variables.
1851-
firOpBuilder.createBlock(&simdOp.getRegion());
1852-
firOpBuilder.setInsertionPoint(
1853-
lower::genOpenMPTerminator(firOpBuilder, simdOp, loc));
1854-
1855-
return simdOp;
1856-
}
1857-
1858-
static mlir::omp::TaskloopOp
1859-
genTaskloopWrapperOp(lower::AbstractConverter &converter,
1860-
semantics::SemanticsContext &semaCtx,
1861-
lower::pft::Evaluation &eval, mlir::Location loc,
1862-
const mlir::omp::TaskloopClauseOps &clauseOps) {
1863-
TODO(loc, "Taskloop construct");
1864-
}
1865-
1866-
static mlir::omp::WsloopOp
1867-
genWsloopWrapperOp(lower::AbstractConverter &converter,
1868-
semantics::SemanticsContext &semaCtx,
1869-
lower::pft::Evaluation &eval, mlir::Location loc,
1870-
const mlir::omp::WsloopClauseOps &clauseOps,
1871-
llvm::ArrayRef<const semantics::Symbol *> reductionSyms,
1872-
llvm::ArrayRef<mlir::Type> reductionTypes) {
1873-
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
1874-
1875-
// Create omp.wsloop wrapper.
1876-
llvm::SmallVector<mlir::Location> reductionLocs(reductionSyms.size(), loc);
1877-
auto wsloopOp = firOpBuilder.create<mlir::omp::WsloopOp>(loc, clauseOps);
1878-
1879-
// Populate entry block arguments with reduction variables.
1880-
// TODO: Add private variables to entry block arguments.
1881-
firOpBuilder.createBlock(&wsloopOp.getRegion(), {}, reductionTypes,
1882-
reductionLocs);
1883-
firOpBuilder.setInsertionPoint(
1884-
lower::genOpenMPTerminator(firOpBuilder, wsloopOp, loc));
1885-
1886-
return wsloopOp;
1887-
}
1888-
18891840
//===----------------------------------------------------------------------===//
18901841
// Code generation functions for the standalone version of constructs that can
18911842
// also be a leaf of a composite construct
@@ -1907,8 +1858,9 @@ static void genStandaloneDistribute(
19071858
genLoopNestClauses(converter, semaCtx, eval, item->clauses, loc,
19081859
loopNestClauseOps, iv);
19091860

1910-
auto distributeOp = genDistributeWrapperOp(converter, semaCtx, eval, loc,
1911-
distributeClauseOps);
1861+
// TODO: Populate entry block arguments with private variables.
1862+
auto distributeOp = genWrapperOp<mlir::omp::DistributeOp>(
1863+
converter, loc, distributeClauseOps, /*blockArgTypes=*/{});
19121864

19131865
genLoopNestOp(converter, symTable, semaCtx, eval, loc, queue, item,
19141866
loopNestClauseOps, iv,
@@ -1936,9 +1888,9 @@ static void genStandaloneDo(lower::AbstractConverter &converter,
19361888
genLoopNestClauses(converter, semaCtx, eval, item->clauses, loc,
19371889
loopNestClauseOps, iv);
19381890

1939-
auto wsloopOp =
1940-
genWsloopWrapperOp(converter, semaCtx, eval, loc, wsloopClauseOps,
1941-
reductionSyms, reductionTypes);
1891+
// TODO: Add private variables to entry block arguments.
1892+
auto wsloopOp = genWrapperOp<mlir::omp::WsloopOp>(
1893+
converter, loc, wsloopClauseOps, reductionTypes);
19421894

19431895
genLoopNestOp(converter, symTable, semaCtx, eval, loc, queue, item,
19441896
loopNestClauseOps, iv, reductionSyms,
@@ -1977,7 +1929,9 @@ static void genStandaloneSimd(lower::AbstractConverter &converter,
19771929
genLoopNestClauses(converter, semaCtx, eval, item->clauses, loc,
19781930
loopNestClauseOps, iv);
19791931

1980-
auto simdOp = genSimdWrapperOp(converter, semaCtx, eval, loc, simdClauseOps);
1932+
// TODO: Populate entry block arguments with reduction and private variables.
1933+
auto simdOp = genWrapperOp<mlir::omp::SimdOp>(converter, loc, simdClauseOps,
1934+
/*blockArgTypes=*/{});
19811935

19821936
genLoopNestOp(converter, symTable, semaCtx, eval, loc, queue, item,
19831937
loopNestClauseOps, iv,

0 commit comments

Comments
 (0)