Skip to content

Commit 187d9f8

Browse files
[OpenMP][MLIR] Add a conversion pattern for the master op
The conversion pattern is particularly useful for conversion of block arguments in the master op. Reviewed By: ftynse Differential Revision: https://reviews.llvm.org/D109610
1 parent 339c734 commit 187d9f8

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ struct RegionOpConversion : public ConvertOpToLLVMPattern<OpType> {
4747

4848
void mlir::populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter,
4949
RewritePatternSet &patterns) {
50-
patterns.add<RegionOpConversion<omp::ParallelOp>,
50+
patterns.add<RegionOpConversion<omp::MasterOp>,
51+
RegionOpConversion<omp::ParallelOp>,
5152
RegionOpConversion<omp::WsLoopOp>>(converter);
5253
}
5354

@@ -69,7 +70,7 @@ void ConvertOpenMPToLLVMPass::runOnOperation() {
6970
populateOpenMPToLLVMConversionPatterns(converter, patterns);
7071

7172
LLVMConversionTarget target(getContext());
72-
target.addDynamicallyLegalOp<omp::ParallelOp, omp::WsLoopOp>(
73+
target.addDynamicallyLegalOp<omp::MasterOp, omp::ParallelOp, omp::WsLoopOp>(
7374
[&](Operation *op) { return converter.isLegal(&op->getRegion(0)); });
7475
target.addLegalOp<omp::TerminatorOp, omp::TaskyieldOp, omp::FlushOp,
7576
omp::BarrierOp, omp::TaskwaitOp>();

mlir/test/Conversion/OpenMPToLLVM/convert-to-llvmir.mlir

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
// RUN: mlir-opt -convert-openmp-to-llvm %s -split-input-file | FileCheck %s
22

3+
// CHECK-LABEL: llvm.func @master_block_arg
4+
func @master_block_arg() {
5+
// CHECK: omp.master
6+
omp.master {
7+
// CHECK-NEXT: ^[[BB0:.*]](%[[ARG1:.*]]: i64, %[[ARG2:.*]]: i64):
8+
^bb0(%arg1: index, %arg2: index):
9+
// CHECK-NEXT: "test.payload"(%[[ARG1]], %[[ARG2]]) : (i64, i64) -> ()
10+
"test.payload"(%arg1, %arg2) : (index, index) -> ()
11+
omp.terminator
12+
}
13+
return
14+
}
15+
316
// CHECK-LABEL: llvm.func @branch_loop
417
func @branch_loop() {
518
%start = constant 0 : index

0 commit comments

Comments
 (0)