[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
This commit is contained in:
Kiran Chandramohan 2021-10-07 20:52:15 +02:00 committed by Valentin Clement
parent c5f445d143
commit 3b01cf9286
No known key found for this signature in database
GPG Key ID: 086D54783C928776
5 changed files with 40 additions and 1 deletions

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -6,6 +6,7 @@ add_mlir_dialect_library(MLIROpenMP
DEPENDS
MLIROpenMPOpsIncGen
MLIROpenMPOpsInterfacesIncGen
LINK_LIBS PUBLIC
MLIRIR