@@ -115,6 +115,13 @@ createLinalgBodyCalculationForElementwiseOp(Operation *op, ValueRange args,
115
115
return rewriter.create <mlir::MulFOp>(loc, resultTypes, args);
116
116
}
117
117
118
+ // tosa::ReciprocalOp
119
+ if (isa<tosa::ReciprocalOp>(op) && elementTy.isa <FloatType>()) {
120
+ auto one =
121
+ rewriter.create <mlir::ConstantOp>(loc, FloatAttr::get (elementTy, 1 ));
122
+ return rewriter.create <mlir::DivFOp>(loc, resultTypes, one, args[0 ]);
123
+ }
124
+
118
125
if (isa<tosa::MulOp>(op) && elementTy.isa <IntegerType>()) {
119
126
Value a = args[0 ];
120
127
Value b = args[1 ];
@@ -325,6 +332,16 @@ createLinalgBodyCalculationForElementwiseOp(Operation *op, ValueRange args,
325
332
rewriter);
326
333
}
327
334
335
+ // tosa::SigmoidOp
336
+ if (isa<tosa::SigmoidOp>(op) && elementTy.isa <FloatType>()) {
337
+ auto one =
338
+ rewriter.create <mlir::ConstantOp>(loc, FloatAttr::get (elementTy, 1 ));
339
+ auto negate = rewriter.create <mlir::NegFOp>(loc, resultTypes, args[0 ]);
340
+ auto exp = rewriter.create <mlir::math::ExpOp>(loc, resultTypes, negate);
341
+ auto added = rewriter.create <mlir::AddFOp>(loc, resultTypes, exp , one);
342
+ return rewriter.create <mlir::DivFOp>(loc, resultTypes, one, added);
343
+ }
344
+
328
345
// tosa::CastOp
329
346
if (isa<tosa::CastOp>(op)) {
330
347
Type srcTy = elementTy;
@@ -1382,11 +1399,11 @@ void mlir::tosa::populateTosaToLinalgOnTensorsConversionPatterns(
1382
1399
RewritePatternSet *patterns) {
1383
1400
patterns->add <
1384
1401
PointwiseConverter<tosa::AddOp>, PointwiseConverter<tosa::SubOp>,
1385
- PointwiseConverter<tosa::MulOp>, PointwiseConverter<tosa::NegateOp >,
1386
- PointwiseConverter<tosa::PowOp >, PointwiseConverter<tosa::RsqrtOp >,
1387
- PointwiseConverter<tosa::LogOp >, PointwiseConverter<tosa::ExpOp >,
1388
- PointwiseConverter<tosa::AbsOp >, PointwiseConverter<tosa::TanhOp >,
1389
- PointwiseConverter<tosa::BitwiseAndOp>,
1402
+ PointwiseConverter<tosa::MulOp>, PointwiseConverter<tosa::ReciprocalOp >,
1403
+ PointwiseConverter<tosa::NegateOp >, PointwiseConverter<tosa::PowOp >,
1404
+ PointwiseConverter<tosa::RsqrtOp >, PointwiseConverter<tosa::LogOp >,
1405
+ PointwiseConverter<tosa::ExpOp >, PointwiseConverter<tosa::AbsOp >,
1406
+ PointwiseConverter<tosa::TanhOp>, PointwiseConverter<tosa:: BitwiseAndOp>,
1390
1407
PointwiseConverter<tosa::BitwiseOrOp>,
1391
1408
PointwiseConverter<tosa::BitwiseNotOp>,
1392
1409
PointwiseConverter<tosa::BitwiseXorOp>,
@@ -1401,11 +1418,11 @@ void mlir::tosa::populateTosaToLinalgOnTensorsConversionPatterns(
1401
1418
PointwiseConverter<tosa::MaximumOp>, PointwiseConverter<tosa::MinimumOp>,
1402
1419
PointwiseConverter<tosa::CeilOp>, PointwiseConverter<tosa::FloorOp>,
1403
1420
PointwiseConverter<tosa::ClampOp>, PointwiseConverter<tosa::ReluNOp>,
1404
- IdentityNConverter<tosa::IdentityOp>,
1421
+ PointwiseConverter<tosa::SigmoidOp>, IdentityNConverter<tosa::IdentityOp>,
1405
1422
IdentityNConverter<tosa::IdentityNOp>, ReduceConverter<tosa::ReduceMinOp>,
1406
1423
ReduceConverter<tosa::ReduceMaxOp>, ReduceConverter<tosa::ReduceSumOp>,
1407
- ReduceConverter<tosa::ReduceProdOp>, ArgMaxConverter, ConcatConverter, PadConverter,
1408
- ReshapeConverter, RescaleConverter, ReverseConverter, TileConverter ,
1409
- TransposeConverter, MatMulConverter, FullyConnectedConverter>(
1410
- patterns->getContext ());
1424
+ ReduceConverter<tosa::ReduceProdOp>, ArgMaxConverter, ConcatConverter,
1425
+ PadConverter, ReshapeConverter, RescaleConverter, ReverseConverter,
1426
+ TileConverter, TransposeConverter, MatMulConverter,
1427
+ FullyConnectedConverter>( patterns->getContext ());
1411
1428
}
0 commit comments