[mlir] Add derived attribute op interface

Interface provides uniform access to the the derived attribute query method.
This commit is contained in:
Jacques Pienaar 2020-03-11 16:14:54 -07:00
parent bc9b6b33a0
commit 36e018b941
5 changed files with 98 additions and 0 deletions

View File

@ -8,6 +8,11 @@ mlir_tablegen(ControlFlowInterfaces.h.inc -gen-op-interface-decls)
mlir_tablegen(ControlFlowInterfaces.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIRControlFlowInterfacesIncGen)
set(LLVM_TARGET_DEFINITIONS DerivedAttributeOpInterface.td)
mlir_tablegen(DerivedAttributeOpInterface.h.inc -gen-op-interface-decls)
mlir_tablegen(DerivedAttributeOpInterface.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIRDerivedAttributeOpInterfaceIncGen)
set(LLVM_TARGET_DEFINITIONS InferTypeOpInterface.td)
mlir_tablegen(InferTypeOpInterface.h.inc -gen-op-interface-decls)
mlir_tablegen(InferTypeOpInterface.cpp.inc -gen-op-interface-defs)

View File

@ -0,0 +1,22 @@
//===- DerivedAttributeOpInterface.h ----------------------------*- C++ -*-===//
//
// 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 file contains a set of interfaces for derived attribute op interface.
//
//===----------------------------------------------------------------------===//
#ifndef MLIR_INTERFACES_DERIVEDATTRIBUTEOPINTERFACE_H_
#define MLIR_INTERFACES_DERIVEDATTRIBUTEOPINTERFACE_H_
#include "mlir/IR/OpDefinition.h"
namespace mlir {
#include "mlir/Interfaces/DerivedAttributeOpInterface.h.inc"
} // namespace mlir
#endif // MLIR_INTERFACES_DERIVEDATTRIBUTEOPINTERFACE_H_

View File

@ -0,0 +1,37 @@
//===- DerivedAttributeOpInterface.td ----------------------*- 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 file contains a set of interfaces for derived attribute op interface.
//
//===----------------------------------------------------------------------===//
#ifndef MLIR_DERIVEDATTRIBUTEOPINTERFACE
#define MLIR_DERIVEDATTRIBUTEOPINTERFACE
include "mlir/IR/OpBase.td"
def DerivedAttributeOpInterface : OpInterface<"DerivedAttributeOpInterface"> {
let description = [{
Interface to query derived attribute characteristics.
Derived attributes are not stored in the operation but are instead derived
from information of the operation. ODS generates convenience accessors for
derived attributes and can be used to simplify translations.
}];
let methods = [
StaticInterfaceMethod<
/*desc=*/"Returns whether name corresponds to a derived attribute.",
/*retTy=*/"bool",
/*methodName=*/"isDerivedAttribute",
/*args=*/(ins "StringRef":$name)
>,
];
}
#endif // MLIR_DERIVEDATTRIBUTEOPINTERFACE

View File

@ -1,6 +1,7 @@
set(LLVM_OPTIONAL_SOURCES
CallInterfaces.cpp
ControlFlowInterfaces.cpp
DerivedAttributeOpInterface.cpp
InferTypeOpInterface.cpp
SideEffects.cpp
)
@ -33,6 +34,20 @@ target_link_libraries(MLIRControlFlowInterfaces
MLIRIR
)
add_llvm_library(MLIRDerivedAttributeOpInterface
DerivedAttributeOpInterface.cpp
ADDITIONAL_HEADER_DIRS
${MLIR_MAIN_INCLUDE_DIR}/mlir/Interfaces
)
add_dependencies(MLIRDerivedAttributeOpInterface
MLIRDerivedAttributeOpInterfaceIncGen
)
target_link_libraries(MLIRDerivedAttributeOpInterface
PUBLIC
MLIRIR
)
add_llvm_library(MLIRInferTypeOpInterface
InferTypeOpInterface.cpp

View File

@ -0,0 +1,19 @@
//===- DerivedAttributeOpInterface.cpp -- Derived Attribute interfaces ----===//
//
// 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 file contains a set of interfaces for derived attribute op interface.
//
//===----------------------------------------------------------------------===//
#include "mlir/Interfaces/DerivedAttributeOpInterface.h"
using namespace mlir;
namespace mlir {
#include "mlir/Interfaces/DerivedAttributeOpInterface.cpp.inc"
} // namespace mlir