diff --git a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp --- a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp +++ b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp @@ -102,6 +102,15 @@ if (isa(op) && elementTy.isa()) return rewriter.create(loc, resultTypes, args); + if (isa(op) && elementTy.isa()) { + auto zero = + rewriter.create(loc, rewriter.getZeroAttr(elementTy)); + auto cmp = + rewriter.create(loc, CmpIPredicate::sgt, args[0], zero); + auto neg = rewriter.create(loc, zero, args[0]); + return rewriter.create(loc, cmp, args[0], neg); + } + // tosa::AddOp if (isa(op) && elementTy.isa()) return rewriter.create(loc, resultTypes, args); diff --git a/mlir/test/Conversion/TosaToLinalg/tosa-to-linalg.mlir b/mlir/test/Conversion/TosaToLinalg/tosa-to-linalg.mlir --- a/mlir/test/Conversion/TosaToLinalg/tosa-to-linalg.mlir +++ b/mlir/test/Conversion/TosaToLinalg/tosa-to-linalg.mlir @@ -378,6 +378,13 @@ // CHECK: sitofp %23 = "tosa.cast"(%0) : (tensor<1xi32>) -> tensor<1xf32> + // CHECK: linalg.generic + // CHECK: constant 0 + // CHECK: cmpi sgt + // CHECK: subi + // CHECK: select + %24 = "tosa.abs"(%arg0) : (tensor<1xi32>) -> tensor<1xi32> + return }