[Mlir-commits] [mlir] [mlir][spirv] Add last 4 data layout ops in TOSA Ext Inst Set (PR #188199)
Davide Grohmann
llvmlistbot at llvm.org
Wed Mar 25 01:17:08 PDT 2026
================
@@ -2271,4 +2271,193 @@ def SPIRV_TosaReshapeOp : SPIRV_TosaOpWithResult<"Reshape", 56, [Pure,
}
+def SPIRV_TosaReverseOp : SPIRV_TosaOpWithResult<"Reverse", 57, [Pure,
+ AllTypesMatch<["input1", "output"]>,
+ AxisValueLessThanRankOf<"input1">]> {
+ let summary = "Reverse operator.";
+
+ let description = [{
+ Returns a tensor with the same type/values as the input, with the data
+ reversed along the given axis. No data conversion happens during a reverse
+ operation.
+
+ References:
+ * https://github.khronos.org/SPIRV-Registry/extended/TOSA.001000.1.html#_reverse
+ * https://www.mlplatform.org/tosa/tosa_spec_1_0_1.html#_reverse
+
+ #### Example:
+ ```mlir
+ %1 = spirv.Tosa.Reverse axis = 2, %arg0 : !spirv.arm.tensor<20x5x28x31xi32> -> !spirv.arm.tensor<20x5x28x31xi32>
+ %1 = spirv.Tosa.Reverse axis = 1, %arg0 : !spirv.arm.tensor<21x34x47xf32> -> !spirv.arm.tensor<21x34x47xf32>
+ ```
+ }];
+
+ let arguments = (ins
+ SPIRV_TensorArmAxisAttr: $axis,
+ SPIRV_TosaAny_TensorArm: $input1
+ );
+
+ let results = (outs
+ SPIRV_TosaAny_TensorArm: $output
+ );
+
+ let assemblyFormat = [{
+ `axis` `=` $axis `,`
+ $input1
+ attr-dict `:` type(operands) `->` type(results)
+ }];
+
+ let extraClassDeclaration = extraBaseClassDeclaration#[{
+ ::mlir::spirv::TensorArmType getInput1Type() {
+ return cast<::mlir::spirv::TensorArmType>(getInput1().getType());
+ }
+ }];
+}
+
+
+def SPIRV_TosaSliceOp : SPIRV_TosaOpWithResult<"Slice", 58, [Pure,
+ AllElementTypesMatch<["input1", "output"]>,
+ ShapeConstraintFromInputRank<"input1", "start">,
+ ShapeConstraintFromInputRank<"input1", "size">]> {
+ let summary = "Slice operator.";
+
+ let description = [{
+ Extracts a slice of input1, beginning at the start coordinates,
+ and extending for size elements in each direction.
+ No data conversion happens during a slice operation.
+
+ References:
+ * https://github.khronos.org/SPIRV-Registry/extended/TOSA.001000.1.html#_slice
+ * https://www.mlplatform.org/tosa/tosa_spec_1_0_1.html#_slice
+
+ #### Example:
+ ```mlir
+ %2 = spirv.Tosa.Slice %arg0, %start, %size : !spirv.arm.tensor<32x19x41xi8>, !spirv.arm.tensor<3xi32>, !spirv.arm.tensor<3xi32> -> !spirv.arm.tensor<21x5x2xi8>
+ %2 = spirv.Tosa.Slice %arg0, %start, %size : !spirv.arm.tensor<30x45x29xf32>, !spirv.arm.tensor<3xi32>, !spirv.arm.tensor<3xi32> -> !spirv.arm.tensor<5x12x11xf32>
+ ```
+ }];
+
+ let arguments = (ins
+ SPIRV_TosaAny_TensorArm: $input1,
+ SPIRV_Int32_1DTensorArmOfLength1To6: $start,
+ SPIRV_Int32_1DTensorArmOfLength1To6: $size
+ );
+
+ let results = (outs
+ SPIRV_TosaAny_TensorArm: $output
+ );
+
+ let assemblyFormat = [{
+ $input1 `,`
+ $start `,`
+ $size
+ attr-dict `:` type(operands) `->` type(results)
+ }];
+
+ let extraClassDeclaration = extraBaseClassDeclaration#[{
+ ::mlir::spirv::TensorArmType getInput1Type() {
+ return cast<::mlir::spirv::TensorArmType>(getInput1().getType());
+ }
+ ::mlir::spirv::TensorArmType getStartType() {
+ return cast<::mlir::spirv::TensorArmType>(getStart().getType());
+ }
+ ::mlir::spirv::TensorArmType getSizeType() {
+ return cast<::mlir::spirv::TensorArmType>(getSize().getType());
+ }
+ }];
+}
+
+
+def SPIRV_TosaTileOp : SPIRV_TosaOpWithResult<"Tile", 59, [Pure,
+ AllElementTypesMatch<["input1", "output"]>,
+ AllRanksMatch<["input1", "output"]>,
+ ShapeConstraintFromInputRank<"input1", "multiples">]> {
+ let summary = "Tile operator.";
+
+ let description = [{
+ Replicates input1 multiples times along each dimension.
+
+ References:
+ * https://github.khronos.org/SPIRV-Registry/extended/TOSA.001000.1.html#_tile
+ * https://www.mlplatform.org/tosa/tosa_spec_1_0_1.html#_tile
+
+ #### Example:
+ ```mlir
+ %1 = spirv.Tosa.Tile %arg0, %multiples : !spirv.arm.tensor<10x28x21xi16>, !spirv.arm.tensor<3xi32> -> !spirv.arm.tensor<10x28x63xi16>
----------------
davidegrohmann wrote:
I have expanded the description to cover a concrete example. Could you please check if that covers what you were asking?
https://github.com/llvm/llvm-project/pull/188199
More information about the Mlir-commits
mailing list