From dbb5979d158cd7c49fdb31a03a4a73dfb402cf66 Mon Sep 17 00:00:00 2001 From: Anchu Rajendran Date: Thu, 28 May 2020 11:16:04 +0530 Subject: [PATCH] [MLIR][OpenMP] Defined master operation in OpenMP Dialect Summary: Implemented the basic changes for defining master operation in OpenMP. It uses the generic parser and printer. Reviewed By: kiranchandramohan, ftynse Differential Revision: https://reviews.llvm.org/D80689 --- mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td | 18 +++++++++++++++--- mlir/test/Dialect/OpenMP/ops.mlir | 11 ++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td index 27b2110..78b56ca 100644 --- a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td @@ -94,7 +94,7 @@ def ParallelOp : OpenMP_Op<"parallel", [AttrSizedOperandSegments]> { } def TerminatorOp : OpenMP_Op<"terminator", [Terminator]> { - let summary = "terminator for OpenMP regions."; + let summary = "terminator for OpenMP regions"; let description = [{ A terminator operation for regions that appear in the body of OpenMP operation. These regions are not expected to return any value so the @@ -102,8 +102,7 @@ def TerminatorOp : OpenMP_Op<"terminator", [Terminator]> { enclosing op. }]; - let parser = [{ return success(); }]; - let printer = [{ p << getOperationName(); }]; + let assemblyFormat = "attr-dict"; } //===----------------------------------------------------------------------===// @@ -138,6 +137,19 @@ def FlushOp : OpenMP_Op<"flush"> { } //===----------------------------------------------------------------------===// +// 2.16 master Construct +//===----------------------------------------------------------------------===// +def MasterOp : OpenMP_Op<"master"> { + let summary = "master construct"; + let description = [{ + The master construct specifies a structured block that is executed by + the master thread of the team. + }]; + + let regions = (region AnyRegion:$region); +} + +//===----------------------------------------------------------------------===// // 2.17.2 barrier Construct //===----------------------------------------------------------------------===// diff --git a/mlir/test/Dialect/OpenMP/ops.mlir b/mlir/test/Dialect/OpenMP/ops.mlir index bffc824..e780ceb 100644 --- a/mlir/test/Dialect/OpenMP/ops.mlir +++ b/mlir/test/Dialect/OpenMP/ops.mlir @@ -6,6 +6,15 @@ func @omp_barrier() -> () { return } +func @omp_master() -> () { + // CHECK: omp.master + "omp.master" ()({ + // CHECK: omp.terminator + omp.terminator + }):()->() + return +} + func @omp_taskwait() -> () { // CHECK: omp.taskwait omp.taskwait @@ -42,7 +51,7 @@ func @omp_terminator() -> () { } func @omp_parallel(%data_var : memref, %if_cond : i1, %num_threads : si32) -> () { - // CHECK: omp_parallel + // CHECK: omp.parallel "omp.parallel" (%if_cond, %num_threads, %data_var, %data_var, %data_var, %data_var) ({ // test without if condition -- 2.7.4