Skip to content

Commit

Permalink
[mlir] Add derived attribute op interface
Browse files Browse the repository at this point in the history
Interface provides uniform access to the the derived attribute query method.
  • Loading branch information
jpienaar committed Mar 12, 2020
1 parent bc9b6b3 commit 36e018b
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 0 deletions.
5 changes: 5 additions & 0 deletions mlir/include/mlir/Interfaces/CMakeLists.txt
Expand Up @@ -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)
Expand Down
22 changes: 22 additions & 0 deletions mlir/include/mlir/Interfaces/DerivedAttributeOpInterface.h
@@ -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_
37 changes: 37 additions & 0 deletions mlir/include/mlir/Interfaces/DerivedAttributeOpInterface.td
@@ -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
15 changes: 15 additions & 0 deletions mlir/lib/Interfaces/CMakeLists.txt
@@ -1,6 +1,7 @@
set(LLVM_OPTIONAL_SOURCES
CallInterfaces.cpp
ControlFlowInterfaces.cpp
DerivedAttributeOpInterface.cpp
InferTypeOpInterface.cpp
SideEffects.cpp
)
Expand Down Expand Up @@ -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

Expand Down
19 changes: 19 additions & 0 deletions mlir/lib/Interfaces/DerivedAttributeOpInterface.cpp
@@ -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

0 comments on commit 36e018b

Please sign in to comment.