mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-10-09 12:24:08 +00:00
[mlir] Linalg refactor for using "bufferize" terminology.
Part of the refactor discussed in: https://llvm.discourse.group/t/what-is-the-strategy-for-tensor-memref-conversion-bufferization/1938/17 Differential Revision: https://reviews.llvm.org/D89261
This commit is contained in:
parent
683b308c07
commit
9ca97cde85
@ -46,8 +46,7 @@ std::unique_ptr<OperationPass<FuncOp>> createConvertLinalgToAffineLoopsPass();
|
||||
|
||||
/// Create a pass to convert Linalg operations which work on tensors to use
|
||||
/// buffers instead.
|
||||
std::unique_ptr<OperationPass<ModuleOp>>
|
||||
createConvertLinalgOnTensorsToBuffersPass();
|
||||
std::unique_ptr<OperationPass<ModuleOp>> createLinalgBufferizePass();
|
||||
|
||||
/// Patterns for fusing linalg operation on tensors.
|
||||
void populateLinalgTensorOpsFusionPatterns(MLIRContext *context,
|
||||
|
@ -48,10 +48,9 @@ def LinalgLowerToLoops : FunctionPass<"convert-linalg-to-loops"> {
|
||||
let dependentDialects = ["linalg::LinalgDialect", "scf::SCFDialect", "AffineDialect"];
|
||||
}
|
||||
|
||||
def LinalgOnTensorsToBuffers : Pass<"convert-linalg-on-tensors-to-buffers", "ModuleOp"> {
|
||||
let summary = "Convert the Linalg operations which work on tensor-type "
|
||||
"operands or results to use buffers instead";
|
||||
let constructor = "mlir::createConvertLinalgOnTensorsToBuffersPass()";
|
||||
def LinalgBufferize : Pass<"linalg-bufferize", "ModuleOp"> {
|
||||
let summary = "Bufferize the linalg dialect";
|
||||
let constructor = "mlir::createLinalgBufferizePass()";
|
||||
let dependentDialects = ["linalg::LinalgDialect", "vector::VectorDialect"];
|
||||
}
|
||||
|
||||
|
@ -49,11 +49,10 @@ void populateConvVectorizationPatterns(
|
||||
MLIRContext *context, SmallVectorImpl<OwningRewritePatternList> &patterns,
|
||||
ArrayRef<int64_t> tileSizes);
|
||||
|
||||
/// Populates the given list with patterns to convert Linalg operations on
|
||||
/// tensors to buffers.
|
||||
void populateConvertLinalgOnTensorsToBuffersPatterns(
|
||||
MLIRContext *context, BufferAssignmentTypeConverter &converter,
|
||||
OwningRewritePatternList &patterns);
|
||||
/// Populates the given list with patterns to bufferize linalg ops.
|
||||
void populateLinalgBufferizePatterns(MLIRContext *context,
|
||||
BufferAssignmentTypeConverter &converter,
|
||||
OwningRewritePatternList &patterns);
|
||||
|
||||
/// Performs standalone tiling of a single LinalgOp by `tileSizes`.
|
||||
/// and permute the loop nest according to `interchangeVector`
|
||||
|
@ -1,4 +1,4 @@
|
||||
// RUN: mlir-opt %s -convert-linalg-on-tensors-to-buffers -convert-linalg-to-loops -convert-linalg-to-llvm -convert-std-to-llvm | \
|
||||
// RUN: mlir-opt %s -linalg-bufferize -convert-linalg-to-loops -convert-linalg-to-llvm -convert-std-to-llvm | \
|
||||
// RUN: mlir-cpu-runner -e main -entry-point-result=void \
|
||||
// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_runner_utils%shlibext \
|
||||
// RUN: | FileCheck %s
|
||||
|
@ -1,4 +1,4 @@
|
||||
// RUN: mlir-opt %s -convert-linalg-on-tensors-to-buffers -convert-linalg-to-loops -convert-linalg-to-llvm -convert-std-to-llvm | \
|
||||
// RUN: mlir-opt %s -linalg-bufferize -convert-linalg-to-loops -convert-linalg-to-llvm -convert-std-to-llvm | \
|
||||
// RUN: mlir-cpu-runner -e main -entry-point-result=void \
|
||||
// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_runner_utils%shlibext \
|
||||
// RUN: | FileCheck %s
|
||||
|
@ -1,16 +1,12 @@
|
||||
//===- TensorsToBuffers.cpp - Transformation from tensors to buffers ------===//
|
||||
//===- Bufferize.cpp - Bufferization of linalg 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
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file implements the conversion from tensors to buffers on Linalg
|
||||
// operations.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "mlir/Transforms/Bufferize.h"
|
||||
#include "PassDetail.h"
|
||||
#include "mlir/Dialect/Linalg/IR/LinalgOps.h"
|
||||
#include "mlir/Dialect/Linalg/Passes.h"
|
||||
@ -20,7 +16,6 @@
|
||||
#include "mlir/IR/Function.h"
|
||||
#include "mlir/IR/Operation.h"
|
||||
#include "mlir/Pass/Pass.h"
|
||||
#include "mlir/Transforms/Bufferize.h"
|
||||
|
||||
using namespace ::mlir;
|
||||
using namespace ::mlir::linalg;
|
||||
@ -295,8 +290,7 @@ namespace {
|
||||
|
||||
/// Converts Linalg operations that work on tensor-type operands or results to
|
||||
/// work on buffers.
|
||||
struct ConvertLinalgOnTensorsToBuffers
|
||||
: public LinalgOnTensorsToBuffersBase<ConvertLinalgOnTensorsToBuffers> {
|
||||
struct LinalgBufferizePass : public LinalgBufferizeBase<LinalgBufferizePass> {
|
||||
void runOnOperation() override {
|
||||
MLIRContext &context = getContext();
|
||||
ConversionTarget target(context);
|
||||
@ -353,8 +347,7 @@ struct ConvertLinalgOnTensorsToBuffers
|
||||
BufferAssignmentTypeConverter::AppendToArgumentsList);
|
||||
|
||||
OwningRewritePatternList patterns;
|
||||
populateConvertLinalgOnTensorsToBuffersPatterns(&context, converter,
|
||||
patterns);
|
||||
populateLinalgBufferizePatterns(&context, converter, patterns);
|
||||
populateWithBufferAssignmentOpConversionPatterns<
|
||||
mlir::ReturnOp, mlir::ReturnOp, linalg::CopyOp>(&context, converter,
|
||||
patterns);
|
||||
@ -364,12 +357,10 @@ struct ConvertLinalgOnTensorsToBuffers
|
||||
};
|
||||
} // end anonymous namespace
|
||||
|
||||
std::unique_ptr<OperationPass<ModuleOp>>
|
||||
mlir::createConvertLinalgOnTensorsToBuffersPass() {
|
||||
return std::make_unique<ConvertLinalgOnTensorsToBuffers>();
|
||||
std::unique_ptr<OperationPass<ModuleOp>> mlir::createLinalgBufferizePass() {
|
||||
return std::make_unique<LinalgBufferizePass>();
|
||||
}
|
||||
void mlir::linalg::populateConvertLinalgOnTensorsToBuffersPatterns(
|
||||
|
||||
void mlir::linalg::populateLinalgBufferizePatterns(
|
||||
MLIRContext *context, BufferAssignmentTypeConverter &converter,
|
||||
OwningRewritePatternList &patterns) {
|
||||
patterns.insert<
|
@ -1,4 +1,5 @@
|
||||
add_mlir_dialect_library(MLIRLinalgTransforms
|
||||
Bufferize.cpp
|
||||
CodegenStrategy.cpp
|
||||
DropUnitDims.cpp
|
||||
Fusion.cpp
|
||||
@ -7,7 +8,6 @@ add_mlir_dialect_library(MLIRLinalgTransforms
|
||||
Interchange.cpp
|
||||
Loops.cpp
|
||||
Promotion.cpp
|
||||
TensorsToBuffers.cpp
|
||||
Tiling.cpp
|
||||
Transforms.cpp
|
||||
Vectorization.cpp
|
||||
|
@ -1,4 +1,4 @@
|
||||
// RUN: mlir-opt -convert-linalg-on-tensors-to-buffers -buffer-placement -split-input-file %s | FileCheck %s
|
||||
// RUN: mlir-opt -linalg-bufferize -buffer-placement -split-input-file %s | FileCheck %s
|
||||
|
||||
#map0 = affine_map<(d0) -> (d0)>
|
||||
|
Loading…
Reference in New Issue
Block a user