[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
This commit is contained in:
Anchu Rajendran 2020-05-28 11:16:04 +05:30
parent dfc8244c24
commit dbb5979d15
2 changed files with 25 additions and 4 deletions

View File

@ -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";
}
//===----------------------------------------------------------------------===//
@ -137,6 +136,19 @@ def FlushOp : OpenMP_Op<"flush"> {
let assemblyFormat = "attr-dict ($varList^ `:` type($varList))?";
}
//===----------------------------------------------------------------------===//
// 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
//===----------------------------------------------------------------------===//

View File

@ -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<i32>, %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