31#define GEN_PASS_DEF_TOSATOLINALG
32#include "mlir/Conversion/Passes.h.inc"
38struct TosaToLinalg :
public impl::TosaToLinalgBase<TosaToLinalg> {
40 void getDependentDialects(DialectRegistry ®istry)
const override {
42 .
insert<arith::ArithDialect, linalg::LinalgDialect, math::MathDialect,
43 index::IndexDialect, tensor::TensorDialect, scf::SCFDialect>();
46 void runOnOperation()
override {
49 target.addLegalDialect<linalg::LinalgDialect, tensor::TensorDialect,
51 target.addIllegalDialect<tosa::TosaDialect>();
54 target.addLegalOp<tosa::ApplyScaleOp>();
55 target.addLegalOp<tosa::IfOp>();
56 target.addLegalOp<tosa::ConstOp>();
57 target.addLegalOp<tosa::ConstShapeOp>();
58 target.addLegalOp<tosa::WhileOp>();
59 target.addLegalOp<tosa::ConcatOp>();
60 target.addLegalOp<tosa::SliceOp>();
61 target.addLegalOp<tosa::ReshapeOp>();
62 target.addLegalOp<tosa::PadOp>();
64 target.markUnknownOpDynamicallyLegal([](Operation *) {
return true; });
66 TypeConverter converter;
69 FunctionOpInterface func = getOperation();
71 if (
failed(applyFullConversion(func,
target, std::move(patterns))))
78 return std::make_unique<TosaToLinalg>();
83 const TosaToLinalgNamedOptions &tosaToLinalgNamedOptions,
84 std::optional<tosa::TosaValidationOptions> validationOptions,
85 std::optional<TosaAttachTargetOptions> attachTargetOptions) {
87 if (!
options.disableTosaDecompositions)
89 tosa::createTosaOptionalDecompositionsPass());
92 pm.
addNestedPass<func::FuncOp>(tosa::createTosaInferShapesPass());
93 pm.
addNestedPass<func::FuncOp>(tosa::createTosaMakeBroadcastablePass());
98 pm.
addNestedPass<func::FuncOp>(tosa::createTosaLayerwiseConstantFoldPass(
99 {
options.aggressiveReduceConstant}));
100 pm.
addNestedPass<func::FuncOp>(tosa::createTosaMakeBroadcastablePass());
101 if (!attachTargetOptions) {
102 attachTargetOptions = TosaAttachTargetOptions();
103 attachTargetOptions->profiles = {
"pro_int",
"pro_fp"};
106 attachTargetOptions->extensions = {
"doubleround"};
108 pm.
addPass(tosa::createTosaAttachTarget(*attachTargetOptions));
109 if (validationOptions)
110 pm.
addPass(tosa::createTosaValidation(*validationOptions));
120 "tosa-to-linalg-pipeline",
121 "The default pipeline for converting TOSA operators to the equivalent "
122 "operations using the tensor operations in LinAlg as well as LinAlg "
125 TosaToLinalgOptions tosaToLinalgOptions;
126 TosaToLinalgNamedOptions tosaToLinalgNamedOptions;
127 TosaValidationOptions validationOptions;
128 validationOptions.strictOpSpecAlignment =
false;
129 validationOptions.allowInvalidOpDatatypeCombinations =
false;
131 tosaToLinalgNamedOptions,
static llvm::ManagedStatic< PassManagerOptions > options
This class represents a pass manager that runs passes on either a specific operation type,...
void addPass(std::unique_ptr< Pass > pass)
Add the given pass to this pass manager.
void addNestedPass(std::unique_ptr< Pass > pass)
Add the given pass to a nested pass manager for the given operation kind OpT.
void populateTosaToLinalgConversionPatterns(const TypeConverter &converter, RewritePatternSet *patterns)
Populates conversion passes from TOSA dialect to Linalg dialect.
std::unique_ptr< Pass > createTosaToLinalgNamed(const TosaToLinalgNamedOptions &options=TosaToLinalgNamedOptions())
void addTosaToLinalgPasses(OpPassManager &pm, const TosaToLinalgOptions &options, const TosaToLinalgNamedOptions &tosaToLinalgNamedOptions=TosaToLinalgNamedOptions(), std::optional< tosa::TosaValidationOptions > validationOptions=tosa::TosaValidationOptions{false, false}, std::optional< TosaAttachTargetOptions > attachTargetOptions=std::nullopt)
Populates passes to convert from TOSA to Linalg.
std::unique_ptr< Pass > createTosaToLinalg()
void populateTosaTypeConversion(TypeConverter &converter)
void registerTosaToLinalgPipelines()
Populates TOSA to linalg pipelines Currently, this includes only the "tosa-to-linalg-pipeline".
Include the generated interface declarations.
std::unique_ptr< Pass > createCanonicalizerPass(const GreedyRewriteConfig &config, ArrayRef< std::string > disabledPatterns={}, ArrayRef< std::string > enabledPatterns={})
Creates an instance of the Canonicalizer pass with the specified config.
PassPipelineRegistration provides a global initializer that registers a Pass pipeline builder routine...