MLIR: lib/Conversion/TosaToLinalg/TosaToLinalgPass.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

14

30

31 namespace mlir {

32 #define GEN_PASS_DEF_TOSATOLINALG

33 #include "mlir/Conversion/Passes.h.inc"

34 }

35

36 using namespace mlir;

37

38 namespace {

39 struct TosaToLinalg : public impl::TosaToLinalgBase {

40 public:

41 void getDependentDialects(DialectRegistry &registry) const override {

42 registry

43 .insert<arith::ArithDialect, linalg::LinalgDialect, math::MathDialect,

44 index::IndexDialect, tensor::TensorDialect, scf::SCFDialect>();

45 }

46

47 void runOnOperation() override {

50 target.addLegalDialect<linalg::LinalgDialect, tensor::TensorDialect,

51 scf::SCFDialect>();

53

54

55 target.addLegalOptosa::ApplyScaleOp();

58 target.addLegalOptosa::ConstShapeOp();

64

66

69

70 FunctionOpInterface func = getOperation();

73 signalPassFailure();

74 }

75 };

76 }

77

79 return std::make_unique();

80 }

81

84 const TosaToLinalgNamedOptions &tosaToLinalgNamedOptions,

85 std::optionaltosa::TosaValidationOptions validationOptions) {

86

87 if (options.disableTosaDecompositions)

89 tosa::createTosaOptionalDecompositionsPass());

91

92 pm.addNestedPassfunc::FuncOp(tosa::createTosaInferShapesPass());

93 pm.addNestedPassfunc::FuncOp(tosa::createTosaMakeBroadcastablePass());

97

98 pm.addNestedPassfunc::FuncOp(tosa::createTosaLayerwiseConstantFoldPass(

99 {options.aggressiveReduceConstant}));

100 pm.addNestedPassfunc::FuncOp(tosa::createTosaMakeBroadcastablePass());

101 if (validationOptions)

102 pm.addPass(tosa::createTosaValidation(*validationOptions));

104 }

105

106

107

108

109

112 "tosa-to-linalg-pipeline",

113 "The default pipeline for converting TOSA operators to the equivalent "

114 "operations using the tensor operations in LinAlg as well as LinAlg "

115 "named operations.",

117 TosaToLinalgOptions tosaToLinalgOptions;

118 TosaToLinalgNamedOptions tosaToLinalgNamedOptions;

119 TosaValidationOptions validationOptions;

120 validationOptions.profile = {"none"};

121 validationOptions.extension = {"none"};

122 validationOptions.strictOpSpecAlignment = false;

123 validationOptions.allowInvalidOpDatatypeCombinations = false;

124 validationOptions.level = tosa::TosaLevelEnum::EightK;

126 tosaToLinalgNamedOptions,

127 validationOptions);

128 });

129 }

static MLIRContext * getContext(OpFoldResult val)

static llvm::ManagedStatic< PassManagerOptions > options

This class describes a specific conversion target.

void addLegalOp(OperationName op)

Register the given operations as legal.

void addLegalDialect(StringRef name, Names... names)

Register the operations of the given dialects as legal.

void markUnknownOpDynamicallyLegal(const DynamicLegalityCallbackFn &fn)

Register unknown operations as dynamically legal.

void addIllegalDialect(StringRef name, Names... names)

Register the operations of the given dialects as illegal, i.e.

The DialectRegistry maps a dialect namespace to a constructor for the matching dialect.

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.

Operation is the basic unit of execution within MLIR.

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())

std::unique_ptr< Pass > createTosaToLinalg()

void addTosaToLinalgPasses(OpPassManager &pm, const TosaToLinalgOptions &options, const TosaToLinalgNamedOptions &tosaToLinalgNamedOptions=TosaToLinalgNamedOptions(), std::optional< tosa::TosaValidationOptions > validationOptions=tosa::TosaValidationOptions{ {"none"}, {"none"}, false, false, tosa::TosaLevelEnum::None})

Populates passes to convert from TOSA to Linalg on buffers.

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.

LogicalResult applyFullConversion(ArrayRef< Operation * > ops, const ConversionTarget &target, const FrozenRewritePatternSet &patterns, ConversionConfig config=ConversionConfig())

Apply a complete conversion on the given operations, and all nested operations.

const FrozenRewritePatternSet & patterns

std::unique_ptr< Pass > createCanonicalizerPass()

Creates an instance of the Canonicalizer pass, configured with default settings (which can be overrid...

PassPipelineRegistration provides a global initializer that registers a Pass pipeline builder routine...