Skip to content

Commit 4c6d8e8

Browse files
Longsheng Duzhczhong
authored andcommitted
add linlagx interface
1 parent e5d2b8a commit 4c6d8e8

27 files changed

+949
-43
lines changed
Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1 @@
1-
add_mlir_dialect(LinalgxOps linalgx)
2-
set(LLVM_TARGET_DEFINITIONS LinalgxStructuredOps.td)
3-
mlir_tablegen(LinalgxStructuredOps.h.inc -gen-op-decls)
4-
mlir_tablegen(LinalgxStructuredOps.cpp.inc -gen-op-defs)
5-
add_public_tablegen_target(MLIRLinalgxStructuredOpsIncGen)
6-
7-
add_mlir_doc(LinalgxOps LinalgxOps gc/Dialect/Linalgx/ -gen-op-doc)
8-
add_mlir_doc(LinalgxDialect LinalgxDialect gc/Dialect/Linalgx/ -gen-dialect-doc)
9-
add_mlir_doc(LinalgxStructuredOps LinalgxStructuredOps gc/Dialect/Linalgx/ -gen-dialect-doc)
1+
add_subdirectory(IR)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
add_mlir_dialect(LinalgxOps linalgx)
2+
set(LLVM_TARGET_DEFINITIONS LinalgxStructuredOps.td)
3+
mlir_tablegen(LinalgxStructuredOps.h.inc -gen-op-decls)
4+
mlir_tablegen(LinalgxStructuredOps.cpp.inc -gen-op-defs)
5+
add_public_tablegen_target(MLIRLinalgxStructuredOpsIncGen)
6+
7+
add_mlir_doc(LinalgxOps LinalgxOps gc/Dialect/Linalgx/IR/ -gen-op-doc)
8+
add_mlir_doc(LinalgxDialect LinalgxDialect gc/Dialect/Linalgx/IR/ -gen-dialect-doc)
9+
add_mlir_doc(LinalgxStructuredOps LinalgxStructuredOps gc/Dialect/Linalgx/IR/ -gen-dialect-doc)

include/gc/Dialect/Linalgx/LinalgxDialect.h renamed to include/gc/Dialect/Linalgx/IR/LinalgxDialect.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919
#include "mlir/Interfaces/InferTypeOpInterface.h"
2020
#include "mlir/Interfaces/SideEffectInterfaces.h"
2121

22-
#include "gc/Dialect/Linalgx/LinalgxOpsDialect.h.inc"
22+
#include "gc/Dialect/Linalgx/IR/LinalgxOpsDialect.h.inc"
2323

2424
#endif // GC_DIALECTS_LINALGXDIALECT_H

include/gc/Dialect/Linalgx/LinalgxOps.h renamed to include/gc/Dialect/Linalgx/IR/LinalgxOps.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
#include "mlir/Interfaces/SideEffectInterfaces.h"
2121

2222
#define GET_OP_CLASSES
23-
#include "gc/Dialect/Linalgx/LinalgxOps.h.inc"
23+
#include "gc/Dialect/Linalgx/IR/LinalgxOps.h.inc"
2424

2525
#define GET_OP_CLASSES
26-
#include "gc/Dialect/Linalgx/LinalgxStructuredOps.h.inc"
26+
#include "gc/Dialect/Linalgx/IR/LinalgxStructuredOps.h.inc"
2727

2828
#endif // GC_DIALECTS_LINALGXOPS_H
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
//===- AllInterfaces.h - linalgx dialect interfaces--------------*- C++ -*-===//
3+
//
4+
// This file is licensed under the Apache License v2.0 with LLVM Exceptions.
5+
// See https://llvm.org/LICENSE.txt for license information.
6+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7+
//
8+
//===----------------------------------------------------------------------===//
9+
10+
#ifndef DIALECT_LINALGX_TRANSFORMS_ALLINTERFACES_H
11+
#define DIALECT_LINALGX_TRANSFORMS_ALLINTERFACES_H
12+
13+
namespace mlir {
14+
class DialectRegistry;
15+
16+
namespace linalgx {
17+
void registerAllDialectInterfaceImplementations(DialectRegistry &registry);
18+
} // namespace linalgx
19+
20+
} // namespace mlir
21+
22+
#endif // DIALECT_LINALGX_TRANSFORMS_ALLINTERFACES_H
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//===- BufferizableOpInterfaceImpl.h - linalgx Bufferize --------*- C++ -*-===//
2+
//
3+
// This file is licensed under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef DIALECT_LINALGX_BUFFERIZABLEOPINTERFACEIMPL_H
10+
#define DIALECT_LINALGX_BUFFERIZABLEOPINTERFACEIMPL_H
11+
12+
namespace mlir {
13+
class DialectRegistry;
14+
15+
namespace linalgx {
16+
void registerBufferizableOpInterfaceExternalModels(DialectRegistry &registry);
17+
} // namespace linalgx
18+
} // namespace mlir
19+
20+
#endif // DIALECT_LINALGX_BUFFERIZABLEOPINTERFACEIMPL_H
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//===- TilingInterfaceImpl.h - linalgx Tiling -------------------*- C++ -*-===//
2+
//
3+
// This file is licensed under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef DIALECT_LINALGX_TILINGINTERFACEIMPL_H
10+
#define DIALECT_LINALGX_TILINGINTERFACEIMPL_H
11+
12+
namespace mlir {
13+
class DialectRegistry;
14+
15+
namespace linalgx {
16+
void registerTilingInterfaceExternalModels(DialectRegistry &registry);
17+
} // namespace linalgx
18+
} // namespace mlir
19+
20+
#endif // DIALECT_LINALGX_TILINGINTERFACEIMPL_H

lib/gc/Dialect/Linalgx/CMakeLists.txt

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,2 @@
1-
gc_set_mlir_link_components(MLIR_LINK_COMPONENTS MLIRIR)
2-
3-
add_mlir_dialect_library(MLIRLinalgx
4-
LinalgxDialect.cpp
5-
LinalgxOps.cpp
6-
7-
ADDITIONAL_HEADER_DIRS
8-
${PROJECT_SOURCE_DIR}/include/gc/Dialect/Linalgx
9-
10-
DEPENDS
11-
MLIRLinalgxOpsIncGen
12-
MLIRLinalgxStructuredOpsIncGen
13-
14-
LINK_LIBS PUBLIC
15-
${MLIR_LINK_COMPONENTS}
16-
)
17-
set_property(GLOBAL APPEND PROPERTY GC_DIALECT_LIBS MLIRLinalgx)
1+
add_subdirectory(IR)
2+
add_subdirectory(Transforms)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
gc_set_mlir_link_components(MLIR_LINK_COMPONENTS MLIRIR)
2+
3+
add_mlir_dialect_library(MLIRLinalgx
4+
LinalgxDialect.cpp
5+
LinalgxOps.cpp
6+
7+
ADDITIONAL_HEADER_DIRS
8+
${PROJECT_SOURCE_DIR}/include/gc/Dialect/Linalgx/IR
9+
10+
DEPENDS
11+
MLIRLinalgxOpsIncGen
12+
MLIRLinalgxStructuredOpsIncGen
13+
14+
LINK_LIBS PUBLIC
15+
${MLIR_LINK_COMPONENTS}
16+
)
17+
set_property(GLOBAL APPEND PROPERTY GC_DIALECT_LIBS MLIRLinalgx)

lib/gc/Dialect/Linalgx/LinalgxDialect.cpp renamed to lib/gc/Dialect/Linalgx/IR/LinalgxDialect.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "gc/Dialect/Linalgx/LinalgxDialect.h"
10-
#include "gc/Dialect/Linalgx/LinalgxOps.h"
9+
#include "gc/Dialect/Linalgx/IR/LinalgxDialect.h"
10+
#include "gc/Dialect/Linalgx/IR/LinalgxOps.h"
1111

1212
#include "mlir/Dialect/Affine/IR/AffineOps.h"
1313
#include "mlir/Dialect/Arith/IR/Arith.h"
@@ -21,15 +21,15 @@
2121
using namespace mlir;
2222
using namespace mlir::linalgx;
2323

24-
#include "gc/Dialect/Linalgx/LinalgxOpsDialect.cpp.inc"
24+
#include "gc/Dialect/Linalgx/IR/LinalgxOpsDialect.cpp.inc"
2525

2626
void LinalgxDialect::initialize() {
2727
addOperations<
2828
#define GET_OP_LIST
29-
#include "gc/Dialect/Linalgx/LinalgxOps.cpp.inc"
29+
#include "gc/Dialect/Linalgx/IR/LinalgxOps.cpp.inc"
3030
>();
3131
addOperations<
3232
#define GET_OP_LIST
33-
#include "gc/Dialect/Linalgx/LinalgxStructuredOps.cpp.inc"
33+
#include "gc/Dialect/Linalgx/IR/LinalgxStructuredOps.cpp.inc"
3434
>();
3535
}

lib/gc/Dialect/Linalgx/LinalgxOps.cpp renamed to lib/gc/Dialect/Linalgx/IR/LinalgxOps.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "gc/Dialect/Linalgx/LinalgxOps.h"
10-
#include "gc/Dialect/Linalgx/LinalgxDialect.h"
9+
#include "gc/Dialect/Linalgx/IR/LinalgxOps.h"
10+
#include "gc/Dialect/Linalgx/IR/LinalgxDialect.h"
1111
#include "mlir/IR/OpImplementation.h"
1212

1313
//===----------------------------------------------------------------------===//
@@ -616,7 +616,7 @@ void MultiBatchMatmulOp::getEffects(
616616
/////// Operations corresponding to library calls defined with Tablegen ////////
617617

618618
#define GET_OP_CLASSES
619-
#include "gc/Dialect/Linalgx/LinalgxOps.cpp.inc"
619+
#include "gc/Dialect/Linalgx/IR/LinalgxOps.cpp.inc"
620620

621621
#define GET_OP_CLASSES
622-
#include "gc/Dialect/Linalgx/LinalgxStructuredOps.cpp.inc"
622+
#include "gc/Dialect/Linalgx/IR/LinalgxStructuredOps.cpp.inc"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//===-- AllInterfaces.cpp - linalgx dialect interfaces ----------*- C++ -*-===//
2+
//
3+
// This file is licensed under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include "gc/Dialect/Linalgx/Transforms/AllInterfaces.h"
10+
11+
#include "gc/Dialect/Linalgx/Transforms/BufferizableOpInterfaceImpl.h"
12+
#include "gc/Dialect/Linalgx/Transforms/TilingInterfaceImpl.h"
13+
14+
void mlir::linalgx::registerAllDialectInterfaceImplementations(
15+
DialectRegistry &registry) {
16+
registerBufferizableOpInterfaceExternalModels(registry);
17+
registerTilingInterfaceExternalModels(registry);
18+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//===-- BufferizableOpInterfaceImpl.cpp - linalgx bufferize -----*- C++ -*-===//
2+
//
3+
// This file is licensed under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include "gc/Dialect/Linalgx/Transforms/BufferizableOpInterfaceImpl.h"
10+
#include "gc/Dialect/Linalgx/IR/LinalgxDialect.h"
11+
#include "gc/Dialect/Linalgx/IR/LinalgxOps.h"
12+
13+
//===----------------------------------------------------------------------===//
14+
// Builder helper from Linalg/Transforms/BufferizableOpInterfaceImpl.cpp
15+
//===----------------------------------------------------------------------===//
16+
17+
#include "BufferizableOpInterfaceImpl.cpp.inc"
18+
19+
using namespace mlir;
20+
using namespace mlir::linalgx;
21+
22+
void mlir::linalgx::registerBufferizableOpInterfaceExternalModels(
23+
DialectRegistry &registry) {
24+
registry.addExtension(
25+
+[](MLIRContext *ctx, linalgx::LinalgxDialect *dialect) {
26+
// Register all Linalg structured ops. `LinalgOp` is an interface and it
27+
// is not possible to attach an external interface to an existing
28+
// interface. Therefore, attach the `BufferizableOpInterface` to all ops
29+
// one-by-one.
30+
LinalgOpInterfaceHelper<
31+
#define GET_OP_LIST
32+
#include "gc/Dialect/Linalgx/IR/LinalgxStructuredOps.cpp.inc"
33+
>::registerOpInterface(ctx);
34+
});
35+
}

0 commit comments

Comments
 (0)