[Mlir-commits] [mlir] 3b01cf9 - [mlir][openmp] Add an interface for Outlineable OpenMP ops
Valentin Clement
llvmlistbot at llvm.org
Thu Oct 7 11:53:57 PDT 2021
Author: Kiran Chandramohan
Date: 2021-10-07T20:53:48+02:00
New Revision: 3b01cf9286e3f3462865cd467ad1edb1534f50d3
URL: https://github.com/llvm/llvm-project/commit/3b01cf9286e3f3462865cd467ad1edb1534f50d3
DIFF: https://github.com/llvm/llvm-project/commit/3b01cf9286e3f3462865cd467ad1edb1534f50d3.diff
LOG: [mlir][openmp] Add an interface for Outlineable OpenMP ops
Add an interface for outlineable OpenMP operations.
This patch was initially done in fir-dev and is now needed
for the upstreaming.
Reviewed By: schweitz
Differential Revision: https://reviews.llvm.org/D111310
Added:
mlir/include/mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td
Modified:
mlir/include/mlir/Dialect/OpenMP/CMakeLists.txt
mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.h
mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td
mlir/lib/Dialect/OpenMP/CMakeLists.txt
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/OpenMP/CMakeLists.txt b/mlir/include/mlir/Dialect/OpenMP/CMakeLists.txt
index a0aa8ba8ab030..a558eb45e077d 100644
--- a/mlir/include/mlir/Dialect/OpenMP/CMakeLists.txt
+++ b/mlir/include/mlir/Dialect/OpenMP/CMakeLists.txt
@@ -14,3 +14,4 @@ mlir_tablegen(OpenMPTypeInterfaces.cpp.inc -gen-type-interface-defs)
add_mlir_doc(OpenMPOps OpenMPDialect Dialects/ -gen-dialect-doc)
add_public_tablegen_target(MLIROpenMPOpsIncGen)
add_dependencies(OpenMPDialectDocGen omp_common_td)
+add_mlir_interface(OpenMPOpsInterfaces)
diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.h b/mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.h
index 7e916f7fec7c0..375276180c9f7 100644
--- a/mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.h
+++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.h
@@ -22,6 +22,7 @@
#include "mlir/Dialect/OpenMP/OpenMPOpsDialect.h.inc"
#include "mlir/Dialect/OpenMP/OpenMPOpsEnums.h.inc"
+#include "mlir/Dialect/OpenMP/OpenMPOpsInterfaces.h.inc"
#include "mlir/Dialect/OpenMP/OpenMPTypeInterfaces.h.inc"
#define GET_OP_CLASSES
diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td
index 05d406d09fc67..73ee9df406c9a 100644
--- a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td
+++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td
@@ -20,6 +20,7 @@ include "mlir/Interfaces/ControlFlowInterfaces.td"
include "mlir/IR/SymbolInterfaces.td"
include "mlir/Dialect/OpenMP/OmpCommon.td"
include "mlir/Dialect/LLVMIR/LLVMOpBase.td"
+include "mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td"
def OpenMP_Dialect : Dialect {
let name = "omp";
@@ -72,7 +73,8 @@ def ClauseDefault : StrEnumAttr<
let cppNamespace = "::mlir::omp";
}
-def ParallelOp : OpenMP_Op<"parallel", [AttrSizedOperandSegments]> {
+def ParallelOp : OpenMP_Op<"parallel", [AttrSizedOperandSegments,
+ DeclareOpInterfaceMethods<OutlineableOpenMPOpInterface>]> {
let summary = "parallel construct";
let description = [{
The parallel construct includes a region of code which is to be executed
diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td
new file mode 100644
index 0000000000000..a99e496e11b07
--- /dev/null
+++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td
@@ -0,0 +1,34 @@
+//===-- OpenMPOpsInterfaces.td - OpenMP op interfaces ------*- tablegen -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This is the OpenMP Dialect interfaces definition file.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef OpenMP_OPS_INTERFACES
+#define OpenMP_OPS_INTERFACES
+
+include "mlir/IR/OpBase.td"
+
+def OutlineableOpenMPOpInterface : OpInterface<"OutlineableOpenMPOpInterface"> {
+ let description = [{
+ OpenMP operations whose region will be outlined will implement this
+ interface. These operations will
+ }];
+
+ let cppNamespace = "::mlir::omp";
+
+ let methods = [
+ InterfaceMethod<"Get alloca block", "::mlir::Block*", "getAllocaBlock",
+ (ins), [{
+ return &$_op.getRegion().front();
+ }]>,
+ ];
+}
+
+#endif // OpenMP_OPS_INTERFACES
diff --git a/mlir/lib/Dialect/OpenMP/CMakeLists.txt b/mlir/lib/Dialect/OpenMP/CMakeLists.txt
index 6fd75c611542f..7882b0fa832c1 100644
--- a/mlir/lib/Dialect/OpenMP/CMakeLists.txt
+++ b/mlir/lib/Dialect/OpenMP/CMakeLists.txt
@@ -6,6 +6,7 @@ add_mlir_dialect_library(MLIROpenMP
DEPENDS
MLIROpenMPOpsIncGen
+ MLIROpenMPOpsInterfacesIncGen
LINK_LIBS PUBLIC
MLIRIR
More information about the Mlir-commits
mailing list