[Mlir-commits] [mlir] 598f527 - [mlir][interfaces] Add ShapedDimOpInterface
Matthias Springer
llvmlistbot at llvm.org
Sun Oct 2 21:59:12 PDT 2022
Author: Matthias Springer
Date: 2022-10-03T13:58:52+09:00
New Revision: 598f5275c16049b1e1b5bc934cbde447a82d485e
URL: https://github.com/llvm/llvm-project/commit/598f5275c16049b1e1b5bc934cbde447a82d485e
DIFF: https://github.com/llvm/llvm-project/commit/598f5275c16049b1e1b5bc934cbde447a82d485e.diff
LOG: [mlir][interfaces] Add ShapedDimOpInterface
This interface is implemented by memref.dim and tensor.dim. This change makes it possible to remove a build dependency of the Affine dialect on the Tensor dialect (and maybe also the MemRef dialect in the future).
Differential Revision: https://reviews.llvm.org/D133595
Added:
mlir/include/mlir/Interfaces/ShapedOpInterfaces.h
mlir/include/mlir/Interfaces/ShapedOpInterfaces.td
mlir/lib/Interfaces/ShapedOpInterfaces.cpp
Modified:
mlir/include/mlir/Dialect/MemRef/IR/MemRef.h
mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td
mlir/include/mlir/Dialect/Tensor/IR/Tensor.h
mlir/include/mlir/Dialect/Tensor/IR/TensorOps.td
mlir/include/mlir/Interfaces/CMakeLists.txt
mlir/lib/Dialect/Affine/IR/AffineOps.cpp
mlir/lib/Dialect/Affine/IR/CMakeLists.txt
mlir/lib/Dialect/MemRef/IR/CMakeLists.txt
mlir/lib/Dialect/Tensor/IR/CMakeLists.txt
mlir/lib/Interfaces/CMakeLists.txt
utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/MemRef/IR/MemRef.h b/mlir/include/mlir/Dialect/MemRef/IR/MemRef.h
index 297c330fc89e6..bd99cf2750fe9 100644
--- a/mlir/include/mlir/Dialect/MemRef/IR/MemRef.h
+++ b/mlir/include/mlir/Dialect/MemRef/IR/MemRef.h
@@ -15,6 +15,7 @@
#include "mlir/Interfaces/CastInterfaces.h"
#include "mlir/Interfaces/ControlFlowInterfaces.h"
#include "mlir/Interfaces/CopyOpInterface.h"
+#include "mlir/Interfaces/ShapedOpInterfaces.h"
#include "mlir/Interfaces/SideEffectInterfaces.h"
#include "mlir/Interfaces/ViewLikeInterface.h"
diff --git a/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td b/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td
index 6b0a5e24475a7..494d9ff8c7c6f 100644
--- a/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td
+++ b/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td
@@ -14,6 +14,7 @@ include "mlir/Dialect/MemRef/IR/MemRefBase.td"
include "mlir/Interfaces/CastInterfaces.td"
include "mlir/Interfaces/ControlFlowInterfaces.td"
include "mlir/Interfaces/CopyOpInterface.td"
+include "mlir/Interfaces/ShapedOpInterfaces.td"
include "mlir/Interfaces/SideEffectInterfaces.td"
include "mlir/Interfaces/ViewLikeInterface.td"
include "mlir/IR/SymbolInterfaces.td"
@@ -535,7 +536,8 @@ def MemRef_DeallocOp : MemRef_Op<"dealloc", [MemRefsNormalizable]> {
// DimOp
//===----------------------------------------------------------------------===//
-def MemRef_DimOp : MemRef_Op<"dim", [NoSideEffect, MemRefsNormalizable]> {
+def MemRef_DimOp : MemRef_Op<"dim", [NoSideEffect, MemRefsNormalizable,
+ ShapedDimOpInterface]> {
let summary = "dimension index operation";
let description = [{
The `dim` operation takes a memref and a dimension operand of type `index`.
@@ -577,6 +579,12 @@ def MemRef_DimOp : MemRef_Op<"dim", [NoSideEffect, MemRefsNormalizable]> {
let extraClassDeclaration = [{
/// Helper function to get the index as a simple integer if it is constant.
Optional<int64_t> getConstantIndex();
+
+ /// Interface method of ShapedDimOpInterface: Return the source memref.
+ Value getShapedValue() { return getSource(); }
+
+ /// Interface method of ShapedDimOpInterface: Return the dimension.
+ OpFoldResult getDimension() { return getIndex(); }
}];
let hasCanonicalizer = 1;
diff --git a/mlir/include/mlir/Dialect/Tensor/IR/Tensor.h b/mlir/include/mlir/Dialect/Tensor/IR/Tensor.h
index 0622c0ed32197..b7ebb1fd4c628 100644
--- a/mlir/include/mlir/Dialect/Tensor/IR/Tensor.h
+++ b/mlir/include/mlir/Dialect/Tensor/IR/Tensor.h
@@ -18,6 +18,7 @@
#include "mlir/Interfaces/ControlFlowInterfaces.h"
#include "mlir/Interfaces/InferTypeOpInterface.h"
#include "mlir/Interfaces/ParallelCombiningOpInterface.h"
+#include "mlir/Interfaces/ShapedOpInterfaces.h"
#include "mlir/Interfaces/SideEffectInterfaces.h"
#include "mlir/Interfaces/TilingInterface.h"
#include "mlir/Interfaces/ViewLikeInterface.h"
diff --git a/mlir/include/mlir/Dialect/Tensor/IR/TensorOps.td b/mlir/include/mlir/Dialect/Tensor/IR/TensorOps.td
index a55e6a45769b2..4842196c29d32 100644
--- a/mlir/include/mlir/Dialect/Tensor/IR/TensorOps.td
+++ b/mlir/include/mlir/Dialect/Tensor/IR/TensorOps.td
@@ -14,6 +14,7 @@ include "mlir/Interfaces/CastInterfaces.td"
include "mlir/Interfaces/ControlFlowInterfaces.td"
include "mlir/Interfaces/InferTypeOpInterface.td"
include "mlir/Interfaces/ParallelCombiningOpInterface.td"
+include "mlir/Interfaces/ShapedOpInterfaces.td"
include "mlir/Interfaces/SideEffectInterfaces.td"
include "mlir/Interfaces/TilingInterface.td"
include "mlir/Interfaces/ViewLikeInterface.td"
@@ -81,7 +82,7 @@ def Tensor_CastOp : Tensor_Op<"cast", [
// DimOp
//===----------------------------------------------------------------------===//
-def Tensor_DimOp : Tensor_Op<"dim", [NoSideEffect]> {
+def Tensor_DimOp : Tensor_Op<"dim", [NoSideEffect, ShapedDimOpInterface]> {
let summary = "dimension index operation";
let description = [{
The `tensor.dim` operation takes a tensor and a dimension operand of type
@@ -122,6 +123,12 @@ def Tensor_DimOp : Tensor_Op<"dim", [NoSideEffect]> {
let extraClassDeclaration = [{
/// Helper function to get the index as a simple integer if it is constant.
Optional<int64_t> getConstantIndex();
+
+ /// Interface method of ShapedDimOpInterface: Return the source tensor.
+ Value getShapedValue() { return getSource(); }
+
+ /// Interface method of ShapedDimOpInterface: Return the dimension.
+ OpFoldResult getDimension() { return getIndex(); }
}];
let hasCanonicalizer = 1;
diff --git a/mlir/include/mlir/Interfaces/CMakeLists.txt b/mlir/include/mlir/Interfaces/CMakeLists.txt
index 230df17b55a10..e471b9e7ccf8e 100644
--- a/mlir/include/mlir/Interfaces/CMakeLists.txt
+++ b/mlir/include/mlir/Interfaces/CMakeLists.txt
@@ -7,6 +7,7 @@ add_mlir_interface(InferIntRangeInterface)
add_mlir_interface(InferTypeOpInterface)
add_mlir_interface(LoopLikeInterface)
add_mlir_interface(ParallelCombiningOpInterface)
+add_mlir_interface(ShapedOpInterfaces)
add_mlir_interface(SideEffectInterfaces)
add_mlir_interface(TilingInterface)
add_mlir_interface(VectorInterfaces)
diff --git a/mlir/include/mlir/Interfaces/ShapedOpInterfaces.h b/mlir/include/mlir/Interfaces/ShapedOpInterfaces.h
new file mode 100644
index 0000000000000..eb9313f748ff0
--- /dev/null
+++ b/mlir/include/mlir/Interfaces/ShapedOpInterfaces.h
@@ -0,0 +1,30 @@
+//===- ShapedOpInterfaces.h - Interfaces for Shaped Ops ---------*- 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 ops that operate on shaped values.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef MLIR_INTERFACES_SHAPEDOPINTERFACES_H_
+#define MLIR_INTERFACES_SHAPEDOPINTERFACES_H_
+
+#include "mlir/IR/OpDefinition.h"
+
+namespace mlir {
+namespace detail {
+
+/// Verify invariants of ops that implement the ShapedDimOpInterface.
+LogicalResult verifyShapedDimOpInterface(Operation *op);
+
+} // namespace detail
+} // namespace mlir
+
+/// Include the generated interface declarations.
+#include "mlir/Interfaces/ShapedOpInterfaces.h.inc"
+
+#endif // MLIR_INTERFACES_SHAPEDOPINTERFACES_H_
diff --git a/mlir/include/mlir/Interfaces/ShapedOpInterfaces.td b/mlir/include/mlir/Interfaces/ShapedOpInterfaces.td
new file mode 100644
index 0000000000000..f1e175a578f1d
--- /dev/null
+++ b/mlir/include/mlir/Interfaces/ShapedOpInterfaces.td
@@ -0,0 +1,56 @@
+//===-- ShapedOpInterfaces.td - Interfaces for Shaped Ops --*- 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 ops that operate on shaped values.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef MLIR_INTERFACES_SHAPEDOPINTERFACES
+#define MLIR_INTERFACES_SHAPEDOPINTERFACES
+
+include "mlir/IR/OpBase.td"
+
+//===----------------------------------------------------------------------===//
+// ShapedDimOpInterface
+//===----------------------------------------------------------------------===//
+
+// Ops that return the dimension of a shaped value.
+def ShapedDimOpInterface : OpInterface<"ShapedDimOpInterface"> {
+ let description = [{
+ An interface for ops that return the dimension of a shaped value (such as a
+ tensor or a memref). It provides access to the source shaped value and to
+ the dimension.
+ }];
+ let cppNamespace = "::mlir";
+
+ let methods = [
+ InterfaceMethod<
+ /*desc=*/[{
+ Return the shaped value operand. This is the value that the dimension
+ is taken from.
+ }],
+ /*retTy=*/"::mlir::Value",
+ /*methodName=*/"getShapedValue",
+ /*args=*/(ins)
+ >,
+ InterfaceMethod<
+ /*desc=*/[{
+ Return the dimension operand. This can be a constant or an SSA value.
+ }],
+ /*retTy=*/"::mlir::OpFoldResult",
+ /*methodName=*/"getDimension",
+ /*args=*/(ins)
+ >
+ ];
+
+ let verify = [{
+ return verifyShapedDimOpInterface($_op);
+ }];
+}
+
+#endif // MLIR_INTERFACES_SHAPEDOPINTERFACES
diff --git a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
index 7506996a83373..8135cd6f8ba18 100644
--- a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
+++ b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
@@ -9,13 +9,13 @@
#include "mlir/Dialect/Affine/IR/AffineOps.h"
#include "mlir/Dialect/Affine/IR/AffineValueMap.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
-#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/IR/AffineExprVisitor.h"
#include "mlir/IR/BlockAndValueMapping.h"
#include "mlir/IR/IntegerSet.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/OpDefinition.h"
#include "mlir/IR/PatternMatch.h"
+#include "mlir/Interfaces/ShapedOpInterfaces.h"
#include "mlir/Transforms/InliningUtils.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/SmallBitVector.h"
@@ -65,9 +65,9 @@ remainsLegalAfterInline(Value value, Region *src, Region *dest,
// `dim`, which can appear anywhere and be valid, since the defining
// op won't be top-level anymore after inlining.
Attribute operandCst;
+ bool isDimLikeOp = isa<ShapedDimOpInterface>(value.getDefiningOp());
return matchPattern(value.getDefiningOp(), m_Constant(&operandCst)) ||
- value.getDefiningOp<memref::DimOp>() ||
- value.getDefiningOp<tensor::DimOp>();
+ isDimLikeOp;
}
/// Checks if all values known to be legal affine dimensions or symbols in `src`
@@ -300,10 +300,8 @@ bool mlir::isValidDim(Value value, Region *region) {
return applyOp.isValidDim(region);
// The dim op is okay if its operand memref/tensor is defined at the top
// level.
- if (auto dimOp = dyn_cast<memref::DimOp>(op))
- return isTopLevelValue(dimOp.getSource());
- if (auto dimOp = dyn_cast<tensor::DimOp>(op))
- return isTopLevelValue(dimOp.getSource());
+ if (auto dimOp = dyn_cast<ShapedDimOpInterface>(op))
+ return isTopLevelValue(dimOp.getShapedValue());
return false;
}
@@ -324,24 +322,23 @@ static bool isMemRefSizeValidSymbol(AnyMemRefDefOp memrefDefOp, unsigned index,
}
/// Returns true if the result of the dim op is a valid symbol for `region`.
-template <typename OpTy>
-static bool isDimOpValidSymbol(OpTy dimOp, Region *region) {
+static bool isDimOpValidSymbol(ShapedDimOpInterface dimOp, Region *region) {
// The dim op is okay if its source is defined at the top level.
- if (isTopLevelValue(dimOp.getSource()))
+ if (isTopLevelValue(dimOp.getShapedValue()))
return true;
// Conservatively handle remaining BlockArguments as non-valid symbols.
// E.g. scf.for iterArgs.
- if (dimOp.getSource().template isa<BlockArgument>())
+ if (dimOp.getShapedValue().template isa<BlockArgument>())
return false;
// The dim op is also okay if its operand memref is a view/subview whose
// corresponding size is a valid symbol.
- Optional<int64_t> index = dimOp.getConstantIndex();
+ Optional<int64_t> index = getConstantIntValue(dimOp.getDimension());
assert(index.has_value() &&
"expect only `dim` operations with a constant index");
int64_t i = index.value();
- return TypeSwitch<Operation *, bool>(dimOp.getSource().getDefiningOp())
+ return TypeSwitch<Operation *, bool>(dimOp.getShapedValue().getDefiningOp())
.Case<memref::ViewOp, memref::SubViewOp, memref::AllocOp>(
[&](auto op) { return isMemRefSizeValidSymbol(op, i, region); })
.Default([](Operation *) { return false; });
@@ -414,9 +411,7 @@ bool mlir::isValidSymbol(Value value, Region *region) {
return applyOp.isValidSymbol(region);
// Dim op results could be valid symbols at any level.
- if (auto dimOp = dyn_cast<memref::DimOp>(defOp))
- return isDimOpValidSymbol(dimOp, region);
- if (auto dimOp = dyn_cast<tensor::DimOp>(defOp))
+ if (auto dimOp = dyn_cast<ShapedDimOpInterface>(defOp))
return isDimOpValidSymbol(dimOp, region);
// Check for values dominating `region`'s parent op.
diff --git a/mlir/lib/Dialect/Affine/IR/CMakeLists.txt b/mlir/lib/Dialect/Affine/IR/CMakeLists.txt
index 9d35cb19cf05d..cef4771f79a1b 100644
--- a/mlir/lib/Dialect/Affine/IR/CMakeLists.txt
+++ b/mlir/lib/Dialect/Affine/IR/CMakeLists.txt
@@ -16,6 +16,6 @@ add_mlir_dialect_library(MLIRAffineDialect
MLIRIR
MLIRLoopLikeInterface
MLIRMemRefDialect
+ MLIRShapedOpInterfaces
MLIRSideEffectInterfaces
- MLIRTensorDialect
)
diff --git a/mlir/lib/Dialect/MemRef/IR/CMakeLists.txt b/mlir/lib/Dialect/MemRef/IR/CMakeLists.txt
index d74a4fbabcaf7..f9228380c4f25 100644
--- a/mlir/lib/Dialect/MemRef/IR/CMakeLists.txt
+++ b/mlir/lib/Dialect/MemRef/IR/CMakeLists.txt
@@ -19,6 +19,7 @@ add_mlir_dialect_library(MLIRMemRefDialect
MLIRDialectUtils
MLIRInferTypeOpInterface
MLIRIR
+ MLIRShapedOpInterfaces
MLIRSideEffectInterfaces
MLIRViewLikeInterface
)
diff --git a/mlir/lib/Dialect/Tensor/IR/CMakeLists.txt b/mlir/lib/Dialect/Tensor/IR/CMakeLists.txt
index d175954885217..4b3dee78b8a5a 100644
--- a/mlir/lib/Dialect/Tensor/IR/CMakeLists.txt
+++ b/mlir/lib/Dialect/Tensor/IR/CMakeLists.txt
@@ -27,6 +27,7 @@ add_mlir_dialect_library(MLIRTensorDialect
MLIRIR
MLIRInferTypeOpInterface
MLIRParallelCombiningOpInterface
+ MLIRShapedOpInterfaces
MLIRSideEffectInterfaces
MLIRSupport
MLIRViewLikeInterface
diff --git a/mlir/lib/Interfaces/CMakeLists.txt b/mlir/lib/Interfaces/CMakeLists.txt
index 783f3860c81cd..ab1fa87ed7901 100644
--- a/mlir/lib/Interfaces/CMakeLists.txt
+++ b/mlir/lib/Interfaces/CMakeLists.txt
@@ -9,6 +9,7 @@ set(LLVM_OPTIONAL_SOURCES
InferTypeOpInterface.cpp
LoopLikeInterface.cpp
ParallelCombiningOpInterface.cpp
+ ShapedOpInterfaces.cpp
SideEffectInterfaces.cpp
TilingInterface.cpp
VectorInterfaces.cpp
@@ -40,6 +41,7 @@ add_mlir_interface_library(DerivedAttributeOpInterface)
add_mlir_interface_library(InferIntRangeInterface)
add_mlir_interface_library(InferTypeOpInterface)
add_mlir_interface_library(ParallelCombiningOpInterface)
+add_mlir_interface_library(ShapedOpInterfaces)
add_mlir_interface_library(SideEffectInterfaces)
add_mlir_interface_library(TilingInterface)
add_mlir_interface_library(VectorInterfaces)
diff --git a/mlir/lib/Interfaces/ShapedOpInterfaces.cpp b/mlir/lib/Interfaces/ShapedOpInterfaces.cpp
new file mode 100644
index 0000000000000..5eda355f56d43
--- /dev/null
+++ b/mlir/lib/Interfaces/ShapedOpInterfaces.cpp
@@ -0,0 +1,26 @@
+//===- ShapedOpInterfaces.cpp - Interfaces for Shaped Ops -----------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "mlir/Interfaces/ShapedOpInterfaces.h"
+
+using namespace mlir;
+
+//===----------------------------------------------------------------------===//
+// ShapedDimOpInterface
+//===----------------------------------------------------------------------===//
+
+LogicalResult mlir::detail::verifyShapedDimOpInterface(Operation *op) {
+ if (op->getNumResults() != 1)
+ return op->emitError("expected single op result");
+ if (!op->getResult(0).getType().isIndex())
+ return op->emitError("expect index result type");
+ return success();
+}
+
+/// Include the definitions of the interface.
+#include "mlir/Interfaces/ShapedOpInterfaces.cpp.inc"
diff --git a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
index d68fc2bc86890..ff39f59a4e11a 100644
--- a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
@@ -978,6 +978,13 @@ td_library(
deps = [":OpBaseTdFiles"],
)
+td_library(
+ name = "ShapedOpInterfacesTdFiles",
+ srcs = ["include/mlir/Interfaces/ShapedOpInterfaces.td"],
+ includes = ["include"],
+ deps = [":OpBaseTdFiles"],
+)
+
td_library(
name = "ParallelCombiningOpInterfaceTdFiles",
srcs = ["include/mlir/Interfaces/ParallelCombiningOpInterface.td"],
@@ -2372,8 +2379,8 @@ cc_library(
":IR",
":LoopLikeInterface",
":MemRefDialect",
+ ":ShapedOpInterfaces",
":SideEffectInterfaces",
- ":TensorDialect",
"//llvm:Support",
],
)
@@ -2790,6 +2797,18 @@ cc_library(
],
)
+cc_library(
+ name = "ShapedOpInterfaces",
+ srcs = ["lib/Interfaces/ShapedOpInterfaces.cpp"],
+ hdrs = ["include/mlir/Interfaces/ShapedOpInterfaces.h"],
+ includes = ["include"],
+ deps = [
+ ":IR",
+ ":ShapedOpInterfacesIncGen",
+ "//llvm:Support",
+ ],
+)
+
cc_library(
name = "ParallelCombiningOpInterface",
srcs = ["lib/Interfaces/ParallelCombiningOpInterface.cpp"],
@@ -4963,6 +4982,7 @@ td_library(
":InferTypeOpInterfaceTdFiles",
":OpBaseTdFiles",
":ParallelCombiningOpInterfaceTdFiles",
+ ":ShapedOpInterfacesTdFiles",
":SideEffectInterfacesTdFiles",
":TilingInterfaceTdFiles",
":ViewLikeInterfaceTdFiles",
@@ -5020,6 +5040,7 @@ cc_library(
":IR",
":InferTypeOpInterface",
":ParallelCombiningOpInterface",
+ ":ShapedOpInterfaces",
":SideEffectInterfaces",
":TensorOpsIncGen",
":TilingInterface",
@@ -5288,6 +5309,24 @@ gentbl_cc_library(
deps = [":LoopLikeInterfaceTdFiles"],
)
+gentbl_cc_library(
+ name = "ShapedOpInterfacesIncGen",
+ strip_include_prefix = "include",
+ tbl_outs = [
+ (
+ ["-gen-op-interface-decls"],
+ "include/mlir/Interfaces/ShapedOpInterfaces.h.inc",
+ ),
+ (
+ ["-gen-op-interface-defs"],
+ "include/mlir/Interfaces/ShapedOpInterfaces.cpp.inc",
+ ),
+ ],
+ tblgen = ":mlir-tblgen",
+ td_file = "include/mlir/Interfaces/ShapedOpInterfaces.td",
+ deps = [":ShapedOpInterfacesTdFiles"],
+)
+
gentbl_cc_library(
name = "ParallelCombiningOpInterfaceIncGen",
strip_include_prefix = "include",
@@ -8870,6 +8909,7 @@ td_library(
":ControlFlowInterfacesTdFiles",
":CopyOpInterfaceTdFiles",
":OpBaseTdFiles",
+ ":ShapedOpInterfacesTdFiles",
":SideEffectInterfacesTdFiles",
":ViewLikeInterfaceTdFiles",
],
@@ -8914,7 +8954,9 @@ gentbl_cc_library(
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/MemRef/IR/MemRefOps.td",
- deps = [":MemRefOpsTdFiles"],
+ deps = [
+ ":MemRefOpsTdFiles",
+ ],
)
cc_library(
@@ -8941,6 +8983,7 @@ cc_library(
":InferTypeOpInterface",
":MemRefBaseIncGen",
":MemRefOpsIncGen",
+ ":ShapedOpInterfaces",
":ViewLikeInterface",
"//llvm:Support",
],
More information about the Mlir-commits
mailing list