[Mlir-commits] [mlir] [mlir][spirv] Add Conv operations for TOSA Extended Instruction Set (001000.1) (PR #176908)
Davide Grohmann
llvmlistbot at llvm.org
Wed Jan 21 06:09:25 PST 2026
================
@@ -35,7 +37,34 @@ class TensorArmRankOf<list<Type> allowedTypes, list<int> ranks>
[HasAnyRankOfPred<ranks>],
!interleave(!foreach(rank, ranks, rank # "D"), "/") # " tensorArm">;
+def SPIRV_TosaNumerical_TensorArm1D : TensorArmRankOf<[SPIRV_TosaNumerical], [1]>;
+def SPIRV_TosaNumerical_TensorArm4D : TensorArmRankOf<[SPIRV_TosaNumerical], [4]>;
+def SPIRV_TosaNumerical_TensorArm5D : TensorArmRankOf<[SPIRV_TosaNumerical], [5]>;
+
def SPIRV_TosaNumerical_TensorArm : TensorArmRankOf<[SPIRV_TosaNumerical], [1, 2, 3, 4, 5, 6]>;
def SPIRV_Int32_TensorArmUpTo5D : TensorArmRankOf<[SPIRV_Int32], [1, 2, 3, 4, 5]>;
+class Is1DTensorArmOfLength<list<int> allowedLengths> :
+ And<[HasAnyRankOfPred<[1]>,
+ Or<!foreach(allowedlength, allowedLengths,
+ CPred<[{::llvm::cast<::mlir::spirv::TensorArmType>($_self).getShape()[0] == }]
+ # allowedlength>)>]>;
+
+class SPIRV_1DTensorArmOfLengthAndType<list<int> allowedLengths, list<Type> allowedTypes> :
+ ContainerType<AnyTypeOf<allowedTypes>, Is1DTensorArmOfLength<allowedLengths>,
+ "::llvm::cast<::mlir::spirv::TensorArmType>($_self).getElementType()",
+ "rank 1 tensorArm of length " # !interleave(allowedLengths, "/"),
+ "::mlir::spirv::TensorArmType">;
+
+def SPIRV_DenseElementAttrsWithTensorArmType : AttrConstraint<
+ CPred<"::llvm::isa<::mlir::spirv::TensorArmType>(::llvm::cast<::mlir::DenseElementsAttr>($_self).getType())">,
+ "Attr with type = spirv::TensorArmType">;
+
+def SPIRV_Int32_1DTensorArmOfLength2Attr : ConfinedAttr<RankedI32ElementsAttr<[2]>, [SPIRV_DenseElementAttrsWithTensorArmType]>;
----------------
davidegrohmann wrote:
If you do not mind I'd keep it as is, it is easier to output those type names via scripts by not spelling out the numbers.
https://github.com/llvm/llvm-project/pull/176908
More information about the Mlir-commits
mailing list