Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Linalgx] add bufferizable and tiling interface; reorganize file structure #130

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 1 addition & 9 deletions include/gc/Dialect/Linalgx/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1 @@
add_mlir_dialect(LinalgxOps linalgx)
set(LLVM_TARGET_DEFINITIONS LinalgxStructuredOps.td)
mlir_tablegen(LinalgxStructuredOps.h.inc -gen-op-decls)
mlir_tablegen(LinalgxStructuredOps.cpp.inc -gen-op-defs)
add_public_tablegen_target(MLIRLinalgxStructuredOpsIncGen)

add_mlir_doc(LinalgxOps LinalgxOps gc/Dialect/Linalgx/ -gen-op-doc)
add_mlir_doc(LinalgxDialect LinalgxDialect gc/Dialect/Linalgx/ -gen-dialect-doc)
add_mlir_doc(LinalgxStructuredOps LinalgxStructuredOps gc/Dialect/Linalgx/ -gen-dialect-doc)
add_subdirectory(IR)
9 changes: 9 additions & 0 deletions include/gc/Dialect/Linalgx/IR/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
add_mlir_dialect(LinalgxOps linalgx)
set(LLVM_TARGET_DEFINITIONS LinalgxStructuredOps.td)
mlir_tablegen(LinalgxStructuredOps.h.inc -gen-op-decls)
mlir_tablegen(LinalgxStructuredOps.cpp.inc -gen-op-defs)
add_public_tablegen_target(MLIRLinalgxStructuredOpsIncGen)

add_mlir_doc(LinalgxOps LinalgxOps gc/Dialect/Linalgx/IR/ -gen-op-doc)
add_mlir_doc(LinalgxDialect LinalgxDialect gc/Dialect/Linalgx/IR/ -gen-dialect-doc)
add_mlir_doc(LinalgxStructuredOps LinalgxStructuredOps gc/Dialect/Linalgx/IR/ -gen-dialect-doc)
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@
#include "mlir/Interfaces/InferTypeOpInterface.h"
#include "mlir/Interfaces/SideEffectInterfaces.h"

#include "gc/Dialect/Linalgx/LinalgxOpsDialect.h.inc"
#include "gc/Dialect/Linalgx/IR/LinalgxOpsDialect.h.inc"

#endif // GC_DIALECTS_LINALGXDIALECT_H
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
#include "mlir/Interfaces/SideEffectInterfaces.h"

#define GET_OP_CLASSES
#include "gc/Dialect/Linalgx/LinalgxOps.h.inc"
#include "gc/Dialect/Linalgx/IR/LinalgxOps.h.inc"

#define GET_OP_CLASSES
#include "gc/Dialect/Linalgx/LinalgxStructuredOps.h.inc"
#include "gc/Dialect/Linalgx/IR/LinalgxStructuredOps.h.inc"

#endif // GC_DIALECTS_LINALGXOPS_H
22 changes: 22 additions & 0 deletions include/gc/Dialect/Linalgx/Transforms/AllInterfaces.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

//===-- AllInterfaces.h - linalgx dialect interfaces ------------*- C++ -*-===//
//
// This file is licensed 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
//
//===----------------------------------------------------------------------===//

#ifndef DIALECT_LINALGX_TRANSFORMS_ALLINTERFACES_H
#define DIALECT_LINALGX_TRANSFORMS_ALLINTERFACES_H

namespace mlir {
class DialectRegistry;

namespace linalgx {
void registerAllDialectInterfaceImplementations(DialectRegistry &registry);
} // namespace linalgx

} // namespace mlir

#endif // DIALECT_LINALGX_TRANSFORMS_ALLINTERFACES_H
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//===- BufferizableOpInterfaceImpl.h - linalgx Bufferize --------*- C++ -*-===//
//
// This file is licensed 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
//
//===----------------------------------------------------------------------===//

#ifndef DIALECT_LINALGX_BUFFERIZABLEOPINTERFACEIMPL_H
#define DIALECT_LINALGX_BUFFERIZABLEOPINTERFACEIMPL_H

namespace mlir {
class DialectRegistry;

namespace linalgx {
void registerBufferizableOpInterfaceExternalModels(DialectRegistry &registry);
} // namespace linalgx
} // namespace mlir

#endif // DIALECT_LINALGX_BUFFERIZABLEOPINTERFACEIMPL_H
20 changes: 20 additions & 0 deletions include/gc/Dialect/Linalgx/Transforms/TilingInterfaceImpl.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//===- TilingInterfaceImpl.h - linalgx Tiling -------------------*- C++ -*-===//
//
// This file is licensed 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
//
//===----------------------------------------------------------------------===//

#ifndef DIALECT_LINALGX_TILINGINTERFACEIMPL_H
#define DIALECT_LINALGX_TILINGINTERFACEIMPL_H

namespace mlir {
class DialectRegistry;

namespace linalgx {
void registerTilingInterfaceExternalModels(DialectRegistry &registry);
} // namespace linalgx
} // namespace mlir

#endif // DIALECT_LINALGX_TILINGINTERFACEIMPL_H
19 changes: 2 additions & 17 deletions lib/gc/Dialect/Linalgx/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,17 +1,2 @@
gc_set_mlir_link_components(MLIR_LINK_COMPONENTS MLIRIR)

add_mlir_dialect_library(MLIRLinalgx
LinalgxDialect.cpp
LinalgxOps.cpp

ADDITIONAL_HEADER_DIRS
${PROJECT_SOURCE_DIR}/include/gc/Dialect/Linalgx

DEPENDS
MLIRLinalgxOpsIncGen
MLIRLinalgxStructuredOpsIncGen

LINK_LIBS PUBLIC
${MLIR_LINK_COMPONENTS}
)
set_property(GLOBAL APPEND PROPERTY GC_DIALECT_LIBS MLIRLinalgx)
add_subdirectory(IR)
add_subdirectory(Transforms)
17 changes: 17 additions & 0 deletions lib/gc/Dialect/Linalgx/IR/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
gc_set_mlir_link_components(MLIR_LINK_COMPONENTS MLIRIR)

add_mlir_dialect_library(MLIRLinalgx
LinalgxDialect.cpp
LinalgxOps.cpp

ADDITIONAL_HEADER_DIRS
${PROJECT_SOURCE_DIR}/include/gc/Dialect/Linalgx/IR

DEPENDS
MLIRLinalgxOpsIncGen
MLIRLinalgxStructuredOpsIncGen

LINK_LIBS PUBLIC
${MLIR_LINK_COMPONENTS}
)
set_property(GLOBAL APPEND PROPERTY GC_DIALECT_LIBS MLIRLinalgx)
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//

#include "gc/Dialect/Linalgx/LinalgxDialect.h"
#include "gc/Dialect/Linalgx/LinalgxOps.h"
#include "gc/Dialect/Linalgx/IR/LinalgxDialect.h"
#include "gc/Dialect/Linalgx/IR/LinalgxOps.h"

#include "mlir/Dialect/Affine/IR/AffineOps.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
Expand All @@ -21,15 +21,15 @@
using namespace mlir;
using namespace mlir::linalgx;

#include "gc/Dialect/Linalgx/LinalgxOpsDialect.cpp.inc"
#include "gc/Dialect/Linalgx/IR/LinalgxOpsDialect.cpp.inc"

void LinalgxDialect::initialize() {
addOperations<
#define GET_OP_LIST
#include "gc/Dialect/Linalgx/LinalgxOps.cpp.inc"
#include "gc/Dialect/Linalgx/IR/LinalgxOps.cpp.inc"
>();
addOperations<
#define GET_OP_LIST
#include "gc/Dialect/Linalgx/LinalgxStructuredOps.cpp.inc"
#include "gc/Dialect/Linalgx/IR/LinalgxStructuredOps.cpp.inc"
>();
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//

#include "gc/Dialect/Linalgx/LinalgxOps.h"
#include "gc/Dialect/Linalgx/LinalgxDialect.h"
#include "gc/Dialect/Linalgx/IR/LinalgxOps.h"
#include "gc/Dialect/Linalgx/IR/LinalgxDialect.h"
#include "mlir/IR/OpImplementation.h"

//===----------------------------------------------------------------------===//
Expand Down Expand Up @@ -616,7 +616,7 @@ void MultiBatchMatmulOp::getEffects(
/////// Operations corresponding to library calls defined with Tablegen ////////

#define GET_OP_CLASSES
#include "gc/Dialect/Linalgx/LinalgxOps.cpp.inc"
#include "gc/Dialect/Linalgx/IR/LinalgxOps.cpp.inc"

#define GET_OP_CLASSES
#include "gc/Dialect/Linalgx/LinalgxStructuredOps.cpp.inc"
#include "gc/Dialect/Linalgx/IR/LinalgxStructuredOps.cpp.inc"
18 changes: 18 additions & 0 deletions lib/gc/Dialect/Linalgx/Transforms/AllInterfaces.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//===-- AllInterfaces.cpp - linalgx dialect interfaces ----------*- C++ -*-===//
//
// This file is licensed 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 "gc/Dialect/Linalgx/Transforms/AllInterfaces.h"

#include "gc/Dialect/Linalgx/Transforms/BufferizableOpInterfaceImpl.h"
#include "gc/Dialect/Linalgx/Transforms/TilingInterfaceImpl.h"

void mlir::linalgx::registerAllDialectInterfaceImplementations(
DialectRegistry &registry) {
registerBufferizableOpInterfaceExternalModels(registry);
registerTilingInterfaceExternalModels(registry);
}
35 changes: 35 additions & 0 deletions lib/gc/Dialect/Linalgx/Transforms/BufferizableOpInterfaceImpl.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
//===-- BufferizableOpInterfaceImpl.cpp - linalgx bufferize -----*- C++ -*-===//
//
// This file is licensed 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 "gc/Dialect/Linalgx/Transforms/BufferizableOpInterfaceImpl.h"
#include "gc/Dialect/Linalgx/IR/LinalgxDialect.h"
#include "gc/Dialect/Linalgx/IR/LinalgxOps.h"

//===----------------------------------------------------------------------===//
// Builder helper from Linalg/Transforms/BufferizableOpInterfaceImpl.cpp
//===----------------------------------------------------------------------===//

#include "BufferizableOpInterfaceImpl.cpp.inc"

using namespace mlir;
using namespace mlir::linalgx;

void mlir::linalgx::registerBufferizableOpInterfaceExternalModels(
DialectRegistry &registry) {
registry.addExtension(
+[](MLIRContext *ctx, linalgx::LinalgxDialect *dialect) {
// Register all Linalg structured ops. `LinalgOp` is an interface and it
// is not possible to attach an external interface to an existing
// interface. Therefore, attach the `BufferizableOpInterface` to all ops
// one-by-one.
LinalgOpInterfaceHelper<
#define GET_OP_LIST
#include "gc/Dialect/Linalgx/IR/LinalgxStructuredOps.cpp.inc"
>::registerOpInterface(ctx);
});
}
Loading
Loading