[mlir][OpenMP] omp.parallel side effects

Add `NoSideEffects` trait to omp.parallel operation.

Reviewed By: ftynse

Differential Revision: https://reviews.llvm.org/D130657
This commit is contained in:
Shraiysh Vaishay 2022-08-08 15:18:55 +00:00 committed by Shraiysh
parent 4ac00789e1
commit dd14d471a5
2 changed files with 55 additions and 1 deletions

View File

@ -125,7 +125,7 @@ def ParallelOp : OpenMP_Op<"parallel", [
}];
}
def TerminatorOp : OpenMP_Op<"terminator", [Terminator]> {
def TerminatorOp : OpenMP_Op<"terminator", [Terminator, NoSideEffect]> {
let summary = "terminator for OpenMP regions";
let description = [{
A terminator operation for regions that appear in the body of OpenMP

View File

@ -72,3 +72,57 @@ func.func @update_unnecessary_computations(%x: memref<i32>) {
// CHECK-LABEL: func.func @update_unnecessary_computations
// CHECK-NOT: omp.atomic.update
// CHECK: omp.atomic.write
// -----
// CHECK-LABEL: func.func @parallel_empty
func.func @parallel_empty() {
omp.parallel {}
return
}
// CHECK-NOT: omp.parallel
// -----
// CHECK-LABEL: func.func @parallel_only_terminator
func.func @parallel_only_terminator() {
omp.parallel {
omp.terminator
}
return
}
// CHECK-NOT: omp.parallel
// CHECK-NOT: omp.terminator
// -----
// CHECK-LABEL: func.func @parallel_no_side_effects
func.func @parallel_no_side_effects(%a: i32, %b: i32) {
omp.parallel {
%x = arith.addi %a, %b : i32
omp.terminator
}
return
}
// CHECK-NOT: omp.parallel
// CHECK-NOT: omp.terminator
// -----
// CHECK-LABEL: func.func @parallel_maybe_side_effects
func.func @parallel_maybe_side_effects(%a: i32, %b: i32) {
omp.parallel {
func.call @foo() : () -> ()
omp.terminator
}
return
}
func.func private @foo() -> ()
// CHECK: omp.parallel
// CHECK: func.call @foo() : () -> ()
// CHECK: omp.terminator