mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-27 07:31:28 +00:00
[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:
parent
c5f445d143
commit
3b01cf9286
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
34
mlir/include/mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td
Normal file
34
mlir/include/mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td
Normal 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
|
@ -6,6 +6,7 @@ add_mlir_dialect_library(MLIROpenMP
|
||||
|
||||
DEPENDS
|
||||
MLIROpenMPOpsIncGen
|
||||
MLIROpenMPOpsInterfacesIncGen
|
||||
|
||||
LINK_LIBS PUBLIC
|
||||
MLIRIR
|
||||
|
Loading…
Reference in New Issue
Block a user