Skip to content

Commit b5bdbaf

Browse files
author
Simon Camphausen
committed
Add interfaces for conversion
1 parent 11c5c31 commit b5bdbaf

31 files changed

+418
-93
lines changed

mlir/include/mlir/Conversion/ArithToEmitC/ArithToEmitC.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@
1010
#define MLIR_CONVERSION_ARITHTOEMITC_ARITHTOEMITC_H
1111

1212
namespace mlir {
13+
class DialectRegistry;
1314
class RewritePatternSet;
1415
class TypeConverter;
1516

1617
void populateArithToEmitCPatterns(TypeConverter &typeConverter,
1718
RewritePatternSet &patterns);
19+
20+
void registerConvertArithToEmitCInterface(DialectRegistry &registry);
1821
} // namespace mlir
1922

2023
#endif // MLIR_CONVERSION_ARITHTOEMITC_ARITHTOEMITC_H

mlir/include/mlir/Conversion/ConvertToEmitC/ConvertToEmitC.h

Lines changed: 0 additions & 23 deletions
This file was deleted.

mlir/include/mlir/Conversion/ConvertToEmitC/ConvertToEmitCPass.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
#ifndef MLIR_CONVERSION_CONVERTTOEMITC_CONVERTTOEMITCPASS_H
1010
#define MLIR_CONVERSION_CONVERTTOEMITC_CONVERTTOEMITCPASS_H
1111

12+
#include "llvm/ADT/SmallVector.h"
13+
1214
#include <memory>
1315

1416
namespace mlir {
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
//===- ToEmitCInterface.h - Conversion to EmitC iface ---*- C++ -*-===========//
2+
//
3+
// Part of the LLVM Project, 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 MLIR_CONVERSION_CONVERTTOEMITC_TOEMITCINTERFACE_H
10+
#define MLIR_CONVERSION_CONVERTTOEMITC_TOEMITCINTERFACE_H
11+
12+
#include "mlir/IR/DialectInterface.h"
13+
#include "mlir/IR/MLIRContext.h"
14+
#include "mlir/IR/OpDefinition.h"
15+
16+
namespace mlir {
17+
class ConversionTarget;
18+
class TypeConverter;
19+
class MLIRContext;
20+
class Operation;
21+
class RewritePatternSet;
22+
class AnalysisManager;
23+
24+
class ConvertToEmitCPatternInterface
25+
: public DialectInterface::Base<ConvertToEmitCPatternInterface> {
26+
public:
27+
ConvertToEmitCPatternInterface(Dialect *dialect) : Base(dialect) {}
28+
29+
/// Hook for derived dialect interface to load the dialects they
30+
/// target. The EmitC dialect is implicitly already loaded, but this
31+
/// method allows to load other intermediate dialects used in the
32+
/// conversion, or target dialects like NVVM for example.
33+
virtual void loadDependentDialects(MLIRContext *context) const {}
34+
35+
/// Hook for derived dialect interface to provide conversion patterns
36+
/// and mark dialect legal for the conversion target.
37+
virtual void populateConvertToEmitCConversionPatterns(
38+
ConversionTarget &target, TypeConverter &typeConverter,
39+
RewritePatternSet &patterns) const = 0;
40+
};
41+
42+
/// Recursively walk the IR and collect all dialects implementing the interface,
43+
/// and populate the conversion patterns.
44+
void populateConversionTargetFromOperation(Operation *op,
45+
ConversionTarget &target,
46+
TypeConverter &typeConverter,
47+
RewritePatternSet &patterns);
48+
49+
} // namespace mlir
50+
51+
52+
#endif // MLIR_CONVERSION_CONVERTTOEMITC_TOEMITCINTERFACE_H

mlir/include/mlir/Conversion/FuncToEmitC/FuncToEmitC.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@
1010
#define MLIR_CONVERSION_FUNCTOEMITC_FUNCTOEMITC_H
1111

1212
namespace mlir {
13+
class DialectRegistry;
1314
class RewritePatternSet;
1415
class TypeConverter;
1516

1617
void populateFuncToEmitCPatterns(const TypeConverter &typeConverter,
1718
RewritePatternSet &patterns);
19+
20+
void registerConvertFuncToEmitCInterface(DialectRegistry &registry);
1821
} // namespace mlir
1922

2023
#endif // MLIR_CONVERSION_FUNCTOEMITC_FUNCTOEMITC_H

mlir/include/mlir/Conversion/MemRefToEmitC/MemRefToEmitC.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@
99
#define MLIR_CONVERSION_MEMREFTOEMITC_MEMREFTOEMITC_H
1010

1111
namespace mlir {
12+
class DialectRegistry;
1213
class RewritePatternSet;
1314
class TypeConverter;
1415

1516
void populateMemRefToEmitCTypeConversion(TypeConverter &typeConverter);
1617

1718
void populateMemRefToEmitCConversionPatterns(RewritePatternSet &patterns,
1819
const TypeConverter &converter);
20+
21+
void registerConvertMemRefToEmitCInterface(DialectRegistry &registry);
1922
} // namespace mlir
2023

2124
#endif // MLIR_CONVERSION_MEMREFTOEMITC_MEMREFTOEMITC_H

mlir/include/mlir/Conversion/Passes.td

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ def ConvertToEmitC : Pass<"convert-to-emitc"> {
2121
let description = [{
2222
This is a generic pass to convert to the EmitC dialect.
2323
}];
24-
let dependentDialects = [
25-
"emitc::EmitCDialect",
24+
let options = [
25+
ListOption<"filterDialects", "filter-dialects", "std::string",
26+
"Test conversion patterns of only the specified dialects">,
2627
];
2728
}
2829

mlir/include/mlir/Conversion/SCFToEmitC/SCFToEmitC.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <memory>
1414

1515
namespace mlir {
16+
class DialectRegistry;
1617
class Pass;
1718
class RewritePatternSet;
1819

@@ -22,6 +23,8 @@ class RewritePatternSet;
2223
/// Collect a set of patterns to convert SCF operations to the EmitC dialect.
2324
void populateSCFToEmitCConversionPatterns(RewritePatternSet &patterns,
2425
TypeConverter &typeConverter);
26+
27+
void registerConvertSCFToEmitCInterface(DialectRegistry &registry);
2528
} // namespace mlir
2629

2730
#endif // MLIR_CONVERSION_SCFTOEMITC_SCFTOEMITC_H

mlir/include/mlir/InitAllExtensions.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,21 @@
1414
#ifndef MLIR_INITALLEXTENSIONS_H_
1515
#define MLIR_INITALLEXTENSIONS_H_
1616

17+
#include "mlir/Conversion/ArithToEmitC/ArithToEmitC.h"
1718
#include "mlir/Conversion/ArithToLLVM/ArithToLLVM.h"
1819
#include "mlir/Conversion/ComplexToLLVM/ComplexToLLVM.h"
1920
#include "mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h"
21+
#include "mlir/Conversion/FuncToEmitC/FuncToEmitC.h"
2022
#include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h"
2123
#include "mlir/Conversion/GPUCommon/GPUToLLVM.h"
2224
#include "mlir/Conversion/GPUToNVVM/GPUToNVVM.h"
2325
#include "mlir/Conversion/IndexToLLVM/IndexToLLVM.h"
2426
#include "mlir/Conversion/MathToLLVM/MathToLLVM.h"
27+
#include "mlir/Conversion/MemRefToEmitC/MemRefToEmitC.h"
2528
#include "mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h"
2629
#include "mlir/Conversion/NVVMToLLVM/NVVMToLLVM.h"
2730
#include "mlir/Conversion/OpenMPToLLVM/ConvertOpenMPToLLVM.h"
31+
#include "mlir/Conversion/SCFToEmitC/SCFToEmitC.h"
2832
#include "mlir/Conversion/UBToLLVM/UBToLLVM.h"
2933
#include "mlir/Conversion/VectorToLLVM/ConvertVectorToLLVM.h"
3034
#include "mlir/Dialect/AMX/Transforms.h"
@@ -62,17 +66,21 @@ namespace mlir {
6266
/// pipelines and transformations you are using.
6367
inline void registerAllExtensions(DialectRegistry &registry) {
6468
// Register all conversions to LLVM extensions.
69+
registerConvertArithToEmitCInterface(registry);
6570
arith::registerConvertArithToLLVMInterface(registry);
6671
registerConvertComplexToLLVMInterface(registry);
6772
cf::registerConvertControlFlowToLLVMInterface(registry);
6873
func::registerAllExtensions(registry);
6974
tensor::registerAllExtensions(registry);
75+
registerConvertFuncToEmitCInterface(registry);
7076
registerConvertFuncToLLVMInterface(registry);
7177
index::registerConvertIndexToLLVMInterface(registry);
7278
registerConvertMathToLLVMInterface(registry);
79+
registerConvertMemRefToEmitCInterface(registry);
7380
registerConvertMemRefToLLVMInterface(registry);
7481
registerConvertNVVMToLLVMInterface(registry);
7582
registerConvertOpenMPToLLVMInterface(registry);
83+
registerConvertSCFToEmitCInterface(registry);
7684
ub::registerConvertUBToLLVMInterface(registry);
7785
registerConvertAMXToLLVMInterface(registry);
7886
gpu::registerConvertGpuToLLVMInterface(registry);

mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#include "mlir/Conversion/ArithToEmitC/ArithToEmitC.h"
1515

16+
#include "mlir/Conversion/ConvertToEmitC/ToEmitCInterface.h"
1617
#include "mlir/Dialect/Arith/IR/Arith.h"
1718
#include "mlir/Dialect/EmitC/IR/EmitC.h"
1819
#include "mlir/Dialect/EmitC/Transforms/TypeConversions.h"
@@ -22,10 +23,37 @@
2223

2324
using namespace mlir;
2425

26+
namespace {
27+
/// Implement the interface to convert Arith to EmitC.
28+
struct ArithToEmitCDialectInterface : public ConvertToEmitCPatternInterface {
29+
using ConvertToEmitCPatternInterface::ConvertToEmitCPatternInterface;
30+
void loadDependentDialects(MLIRContext *context) const final {
31+
context->loadDialect<emitc::EmitCDialect>();
32+
}
33+
34+
/// Hook for derived dialect interface to provide conversion patterns
35+
/// and mark dialect legal for the conversion target.
36+
void populateConvertToEmitCConversionPatterns(
37+
ConversionTarget &target, TypeConverter &typeConverter,
38+
RewritePatternSet &patterns) const final {
39+
populateArithToEmitCPatterns(typeConverter, patterns);
40+
}
41+
};
42+
} // namespace
43+
44+
void mlir::registerConvertArithToEmitCInterface(
45+
DialectRegistry &registry) {
46+
registry.addExtension(+[](MLIRContext *ctx, arith::ArithDialect *dialect) {
47+
dialect->addInterfaces<ArithToEmitCDialectInterface>();
48+
});
49+
}
50+
51+
2552
//===----------------------------------------------------------------------===//
2653
// Conversion Patterns
2754
//===----------------------------------------------------------------------===//
2855

56+
2957
namespace {
3058
class ArithConstantOpConversionPattern
3159
: public OpConversionPattern<arith::ConstantOp> {

mlir/lib/Conversion/ConvertToEmitC/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
add_mlir_conversion_library(MLIRConvertToEmitC
22
ConvertToEmitCPass.cpp
3-
ConvertToEmitC.cpp
43

54
ADDITIONAL_HEADER_DIRS
65
${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/ConvertToEmitC

mlir/lib/Conversion/ConvertToEmitC/ConvertToEmitC.cpp

Lines changed: 0 additions & 32 deletions
This file was deleted.

0 commit comments

Comments
 (0)