[Mlir-commits] [mlir] 8256802 - [mlir][tosa] Spec v0.23 updates
Rob Suderman
llvmlistbot at llvm.org
Mon Nov 8 10:21:21 PST 2021
Author: Suraj Sudhir
Date: 2021-11-08T10:13:54-08:00
New Revision: 82568021ddf0780ebd02affec0b4dbd5623da7a6
URL: https://github.com/llvm/llvm-project/commit/82568021ddf0780ebd02affec0b4dbd5623da7a6
DIFF: https://github.com/llvm/llvm-project/commit/82568021ddf0780ebd02affec0b4dbd5623da7a6.diff
LOG: [mlir][tosa] Spec v0.23 updates
Add pad_const field to tosa.pad.
Add builders to enable optional construction of pad_const in pad op.
Update documentation of tosa.clamp to match spec wording.
Signed-off-by: Suraj Sudhir <suraj.sudhir at arm.com>
Reviewed By: rsuderman
Differential Revision: https://reviews.llvm.org/D113322
Added:
Modified:
mlir/include/mlir/Dialect/Tosa/IR/TosaOpBase.td
mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td
mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td
mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
mlir/test/Dialect/Tosa/ops.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaOpBase.td b/mlir/include/mlir/Dialect/Tosa/IR/TosaOpBase.td
index b1ee907e9d850..6b35941ba5fbe 100644
--- a/mlir/include/mlir/Dialect/Tosa/IR/TosaOpBase.td
+++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaOpBase.td
@@ -174,8 +174,8 @@ def Tosa_UnaryOpQuantInfoBuilder : OpBuilder<
buildUnaryOpWithQuantInfo($_builder, $_state, outputType, input);
}]>;
-// This builder is called on the TOSA pad operator that needs to create its own
-// OptionalAttr quantization_attr parameter to scale the padding values
+// These builders are called on the TOSA pad operator that needs to create its
+// own OptionalAttr quantization_attr parameter to scale the padding values
// correctly.
def Tosa_PadOpQuantInfoBuilder : OpBuilder<
(ins "Type":$outputType, "Value":$input, "Value":$paddings),
@@ -184,6 +184,14 @@ def Tosa_PadOpQuantInfoBuilder : OpBuilder<
input, paddings);
}]>;
+def Tosa_ExplicitValuePadOpQuantInfoBuilder : OpBuilder<
+ (ins "Type":$outputType, "Value":$input, "Value":$paddings,
+ "Value":$pad_value),
+ [{
+ buildExplicitValuePadOpWithQuantInfo($_builder, $_state, outputType,
+ input, paddings, pad_value);
+ }]>;
+
//===----------------------------------------------------------------------===//
// TOSA Operator.
//===----------------------------------------------------------------------===//
diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td b/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td
index 4dc678e31ddbb..bdc7ac13e675a 100644
--- a/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td
+++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td
@@ -321,9 +321,11 @@ def Tosa_ClampOp : Tosa_Op<"clamp", [
let summary = "Computes clamp(features, min, max).";
let description = [{
- Clamp to an arbitrary minimum and maximum value. Note that the maximum and
- minimum values are specified as signed quantized values, no scaling happens
- before or after this operation.
+ Clamp to an arbitrary minimum and maximum value.
+ Maximum and minimum values are specified as values in the range of the
+ input type.
+ No zero point subtraction is done to the values, thus to clamp to the zero
+ point value, the zero point itself should be supplied as the minimum value.
}];
let arguments = (ins
@@ -1394,15 +1396,16 @@ def Tosa_PadOp : Tosa_Op<"pad", [
DeclareOpInterfaceMethods<InferShapedTypeOpInterface,
["inferReturnTypeComponents"]>,
NoSideEffect]> {
- let summary = "Pads a tensor with zeros.";
+ let summary = "Pads a tensor with value specified.";
let description = [{
- Zero-pads a tensor along borders of each dimension.
+ Pads a tensor along borders of each dimension with pad_value.
}];
let arguments = (ins
Tosa_RankedTensor:$input1,
Tosa_Int32Or64Tensor:$padding,
+ Optional<Tosa_ScalarTensor>:$pad_const,
OptionalAttr<Tosa_PadOpQuantizationAttr>:$quantization_info
);
@@ -1410,7 +1413,8 @@ def Tosa_PadOp : Tosa_Op<"pad", [
Tosa_RankedTensor:$output
);
- let builders = [Tosa_PadOpQuantInfoBuilder];
+ let builders = [Tosa_PadOpQuantInfoBuilder,
+ Tosa_ExplicitValuePadOpQuantInfoBuilder];
}
//===----------------------------------------------------------------------===//
diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td b/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td
index c2888ea56dd80..46a4cbc0623cd 100644
--- a/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td
+++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td
@@ -117,6 +117,9 @@ class Tosa_TensorOfOrNone<list<Type> allowedTypes, string description = ""> :
// Tensor types with constrained ranks.
//===----------------------------------------------------------------------===//
+// Rank-0 (scalar) tensor
+def Tosa_ScalarTensor : TensorRankOf<[Tosa_AnyNumber], [0]>;
+
// We include unranked tensors as a supported type for all possible tosa
// Tensors as unranked does not guarantee invalid. If unranked tensors exist
// they should be shape propagate used Tosa's shape inference pass and verified
diff --git a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
index 07d3e6e67c212..85415d92bd1b6 100644
--- a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
+++ b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
@@ -609,7 +609,7 @@ static void buildUnaryOpWithQuantInfo(OpBuilder &builder,
/// This builder is called on TOSA pad operator that needs to create its own
/// OptionalAttr quantization_attr parameter to scale the padding values
-/// correctly.
+/// correctly. No pad_const is interpreted as zero-padding.
static void buildPadOpWithQuantInfo(OpBuilder &builder, OperationState &result,
Type outputType, Value input,
Value paddings) {
@@ -620,6 +620,20 @@ static void buildPadOpWithQuantInfo(OpBuilder &builder, OperationState &result,
result.types.push_back(outputType);
}
+/// This builder is called on TOSA pad operator when an explicit pad_const
+/// value is passed in. It also optionally constructs quantization_attr.
+static void buildExplicitValuePadOpWithQuantInfo(OpBuilder &builder,
+ OperationState &result,
+ Type outputType, Value input,
+ Value paddings,
+ Value pad_const) {
+ result.addOperands({input, paddings, pad_const});
+ auto quantAttr = buildPadOpQuantizationAttr(builder, input);
+ if (quantAttr)
+ result.addAttribute("quantization_info", quantAttr);
+ result.types.push_back(outputType);
+}
+
//===----------------------------------------------------------------------===//
// TOSA Operator Return Type Inference.
//===----------------------------------------------------------------------===//
diff --git a/mlir/test/Dialect/Tosa/ops.mlir b/mlir/test/Dialect/Tosa/ops.mlir
index 29ff5b3f8307b..a774c2303ff80 100644
--- a/mlir/test/Dialect/Tosa/ops.mlir
+++ b/mlir/test/Dialect/Tosa/ops.mlir
@@ -395,6 +395,14 @@ func @test_pad(%arg0: tensor<13x21x3xf32>, %arg1: tensor<3x2xi32>) -> tensor<13x
return %0 : tensor<13x21x3xf32>
}
+// -----
+// CHECK-LABEL: pad_explicit_value
+func @test_pad_explicit_value(%arg0: tensor<13x21x3xf32>, %arg1: tensor<3x2xi32>) -> tensor<13x21x3xf32> {
+ %0 = "tosa.const"() {value = dense<3.14> : tensor<f32>} : () -> tensor<f32>
+ %1 = "tosa.pad"(%arg0, %arg1, %0) : (tensor<13x21x3xf32>, tensor<3x2xi32>, tensor<f32>) -> tensor<13x21x3xf32>
+ return %1 : tensor<13x21x3xf32>
+}
+
// -----
// CHECK-LABEL: reshape
func @test_reshape(%arg0: tensor<13x21x3xf32>) -> tensor<1x819xf32> {
More information about the Mlir-commits
mailing list