add_mlir_doc(OpenMPOps OpenMPDialect Dialects/ -gen-dialect-doc)
add_public_tablegen_target(MLIROpenMPOpsIncGen)
add_dependencies(OpenMPDialectDocGen omp_common_td)
+add_mlir_interface(OpenMPOpsInterfaces)
#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
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";
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
--- /dev/null
+//===-- 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