Skip to content

Commit 62e90db

Browse files
[mlir][Transform] Add an example of a preloaded reference lowering to LLVM
Reviewed By: ftynse Differential Revision: https://reviews.llvm.org/D159364
1 parent a15144f commit 62e90db

File tree

6 files changed

+64
-1
lines changed

6 files changed

+64
-1
lines changed

mlir/lib/Dialect/Linalg/TransformOps/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ add_mlir_dialect_library(MLIRLinalgTransformOps
2020
MLIRBufferizationTransforms
2121
MLIRFuncDialect
2222
MLIRFunctionInterfaces
23+
MLIRIndexDialect
2324
MLIRIR
2425
MLIRLinalgDialect
2526
MLIRLinalgTransforms

mlir/lib/Dialect/Linalg/TransformOps/DialectExtension.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "mlir/Dialect/Affine/IR/AffineOps.h"
1111
#include "mlir/Dialect/Arith/IR/Arith.h"
1212
#include "mlir/Dialect/GPU/IR/GPUDialect.h"
13+
#include "mlir/Dialect/Index/IR/IndexDialect.h"
1314
#include "mlir/Dialect/Linalg/IR/Linalg.h"
1415
#include "mlir/Dialect/Linalg/TransformOps/LinalgMatchOps.h"
1516
#include "mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.h"
@@ -36,6 +37,7 @@ class LinalgTransformDialectExtension
3637

3738
declareGeneratedDialect<affine::AffineDialect>();
3839
declareGeneratedDialect<arith::ArithDialect>();
40+
declareGeneratedDialect<index::IndexDialect>();
3941
declareGeneratedDialect<scf::SCFDialect>();
4042
declareGeneratedDialect<vector::VectorDialect>();
4143
declareGeneratedDialect<gpu::GPUDialect>();

mlir/test/Dialect/LLVM/lower-to-llvm-e2e.mlir

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1-
// RUN: mlir-opt %s -o - -test-lower-to-llvm -cse -split-input-file | FileCheck %s
21
// Note: We run CSE here to make the pattern matching more direct.
32

3+
// RUN: mlir-opt %s -test-lower-to-llvm -cse | FileCheck %s
4+
5+
// RUN: mlir-opt %s -test-transform-dialect-interpreter="transform-library-file-name=%p/lower-to-llvm-transform-symbol-def.mlir debug-payload-root-tag=payload" \
6+
// RUN: -test-transform-dialect-erase-schedule -cse \
7+
// RUN: | FileCheck %s
8+
9+
module attributes {transform.target_tag="payload"} {
10+
411
// Check that we properly lower to llvm memref operations that require to be
512
// expanded first, like `memref.subview`.
613
func.func @subview(%0 : memref<64x4xf32, strided<[4, 1], offset: 0>>, %arg0 : index, %arg1 : index, %arg2 : index)
@@ -43,3 +50,15 @@ func.func @subview(%0 : memref<64x4xf32, strided<[4, 1], offset: 0>>, %arg0 : in
4350
to memref<?x?xf32, strided<[?, ?], offset: ?>>
4451
return %1 : memref<?x?xf32, strided<[?, ?], offset: ?>>
4552
}
53+
54+
} // transform payload
55+
56+
module @named_inclusion_in_named attributes { transform.with_named_sequence } {
57+
transform.named_sequence private @lower_to_cpu(!transform.any_op {transform.consumed}) -> !transform.any_op
58+
59+
transform.sequence failures(propagate) {
60+
^bb1(%toplevel_module: !transform.any_op):
61+
%m2 = transform.include @lower_to_cpu failures(suppress) (%toplevel_module)
62+
: (!transform.any_op) -> (!transform.any_op)
63+
}
64+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// RUN: mlir-opt %s
2+
3+
/// Schedule to lower to LLVM.
4+
module @lower_module_to_cpu attributes { transform.with_named_sequence } {
5+
6+
transform.named_sequence @lower_to_cpu(
7+
%module: !transform.any_op {transform.consumed}) -> !transform.any_op {
8+
9+
%func = transform.structured.match ops{["func.func"]} in %module : (!transform.any_op) -> !transform.any_op
10+
%f = transform.apply_registered_pass "convert-vector-to-scf" to %func : (!transform.any_op) -> !transform.any_op
11+
%f2 = transform.apply_registered_pass "convert-linalg-to-loops" to %f : (!transform.any_op) -> !transform.any_op
12+
%f3 = transform.apply_registered_pass "convert-scf-to-cf" to %f2 : (!transform.any_op) -> !transform.any_op
13+
%f4 = transform.apply_registered_pass "expand-strided-metadata" to %f3 : (!transform.any_op) -> !transform.any_op
14+
%f5 = transform.apply_registered_pass "lower-affine" to %f4 : (!transform.any_op) -> !transform.any_op
15+
16+
transform.apply_conversion_patterns to %f5 {
17+
transform.apply_conversion_patterns.dialect_to_llvm "math"
18+
transform.apply_conversion_patterns.vector.vector_to_llvm
19+
transform.apply_conversion_patterns.dialect_to_llvm "memref"
20+
transform.apply_conversion_patterns.func.func_to_llvm
21+
transform.apply_conversion_patterns.dialect_to_llvm "index"
22+
transform.apply_conversion_patterns.dialect_to_llvm "arith"
23+
transform.apply_conversion_patterns.dialect_to_llvm "cf"
24+
} with type_converter {
25+
transform.apply_conversion_patterns.memref.memref_to_llvm_type_converter
26+
{index_bitwidth = 64,
27+
use_bare_ptr = false,
28+
use_bare_ptr_memref_call_conv = false,
29+
use_opaque_pointers = true}
30+
} {
31+
legal_dialects = ["llvm"],
32+
partial_conversion
33+
} : !transform.any_op
34+
35+
%m2 = transform.apply_registered_pass "reconcile-unrealized-casts" to %module : (!transform.any_op) -> !transform.any_op
36+
transform.yield %m2 : !transform.any_op
37+
}
38+
39+
} // transform module

utils/bazel/llvm-project-overlay/mlir/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9816,6 +9816,7 @@ cc_library(
98169816
":FuncDialect",
98179817
":FunctionInterfaces",
98189818
":GPUDialect",
9819+
":IndexDialect",
98199820
":IR",
98209821
":LinalgDialect",
98219822
":LinalgMatchOpsIncGen",

utils/bazel/llvm-project-overlay/mlir/test/Dialect/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ package(default_visibility = ["//visibility:public"])
2424
include = ["**/*.mlir"],
2525
exclude = [
2626
"IRDL/*.irdl.mlir",
27+
"LLVM/*-symbol-def.mlir",
2728
"Transform/*-source.mlir",
2829
"Transform/*-symbol-def.mlir",
2930
"Transform/*-symbol-decl-and-schedule.mlir",

0 commit comments

Comments
 (0)