[llvm] [mlir] [mlir][spirv] Tighten types of SPIR-V TOSA op definitions (PR #192623)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 17 03:09:44 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir-spirv
Author: Davide Grohmann (davidegrohmann)
<details>
<summary>Changes</summary>
Tighten the SPIR-V TOSA op definitions by introducing stricter named type constraints and aligning verifier coverage with the new type surface.
Remove implication checks that are now enforced directly by operand/result type constraints.
Drop the corresponding negative tests that no longer exercise those verifier paths.
---
Patch is 81.72 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/192623.diff
5 Files Affected:
- (added) .codex ()
- (modified) mlir/include/mlir/Dialect/SPIRV/IR/SPIRVTosaOps.td (+169-184)
- (modified) mlir/include/mlir/Dialect/SPIRV/IR/SPIRVTosaTypes.td (+66-36)
- (modified) mlir/test/Dialect/SPIRV/IR/tosa-ops-verification.mlir (+47-173)
- (modified) mlir/tools/mlir-tblgen/SPIRVUtilsGen.cpp (+4-4)
``````````diff
diff --git a/.codex b/.codex
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVTosaOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVTosaOps.td
index d72cb65a5d86c..0d9620c277c96 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVTosaOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVTosaOps.td
@@ -77,11 +77,11 @@ class SPIRV_TosaFloatElementwiseUnaryOp<string mnemonic, int opcode, list<Trait>
SPIRV_TosaElementwiseUnaryOp<mnemonic, opcode, !listconcat(traits, [Pure])> {
let arguments = (ins
- SPIRV_TosaFloat_TensorArm: $input1
+ SPIRV_F16OrF32OrBF16_TensorArm: $input1
);
let results = (outs
- SPIRV_TosaFloat_TensorArm: $output
+ SPIRV_F16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -115,12 +115,12 @@ class SPIRV_TosaIntegerElementwiseBinaryOp<string mnemonic, int opcode, list<Tra
SPIRV_TosaElementwiseBinaryOp<mnemonic, opcode, traits> {
let arguments = (ins
- SPIRV_TosaInteger_TensorArm: $input1,
- SPIRV_TosaInteger_TensorArm: $input2
+ SPIRV_I8OrI16OrI32_TensorArm: $input1,
+ SPIRV_I8OrI16OrI32_TensorArm: $input2
);
let results = (outs
- SPIRV_TosaInteger_TensorArm: $output
+ SPIRV_I8OrI16OrI32_TensorArm: $output
);
let assemblyFormat = [{
@@ -159,8 +159,6 @@ class SPIRV_TosaConvolutionOp<string mnemonic, int opcode, list<Trait> traits =
TypeConstraintImplicationOn<"input", BF16, "weight", [BF16]>,
TypeConstraintImplicationOn<"input", F16, "weight", [F16]>,
TypeConstraintImplicationOn<"input", F32, "weight", [F32]>,
- TypeConstraintImplicationOn<"input", AnyInteger, "input", [I8, I16]>,
- TypeConstraintImplicationOn<"weight", AnyInteger, "weight", [I8]>,
TypeImpliesAccType<"input", I8, ["INT32"]>,
TypeImpliesAccType<"input", I16, ["INT48"]>,
TypeImpliesAccType<"input", F16, ["FP16", "FP32"]>,
@@ -189,8 +187,8 @@ class SPIRV_TosaComparisonOp<string mnemonic, int opcode, list<Trait> traits = [
MatchBroadcastableShapes<"input1", "input2", "output">])> {
let arguments = (ins
- SPIRV_TosaNumerical_TensorArm: $input1,
- SPIRV_TosaNumerical_TensorArm: $input2
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $input1,
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $input2
);
let results = (outs
@@ -251,11 +249,11 @@ def SPIRV_TosaArgMaxOp : SPIRV_TosaOpWithResult<"ArgMax", 0, [Pure,
let arguments = (ins
SPIRV_TensorArmAxisAttr: $axis,
SPIRV_TosaExtNaNPropagationModeAttr: $nan_mode,
- SPIRV_TosaNumerical_TensorArm: $input
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm: $input
);
let results = (outs
- SPIRV_Int32_TensorArmUpTo5D: $output
+ SPIRV_I32_TensorArmUpTo5D: $output
);
let assemblyFormat = [{
@@ -302,17 +300,17 @@ def SPIRV_TosaAvgPool2DOp : SPIRV_TosaOpWithResult<"AvgPool2D", 1, [NoMemoryEffe
}];
let arguments = (ins
- SPIRV_Int32_1DTensorArmOfLength2Attr: $kernel,
- SPIRV_Int32_1DTensorArmOfLength2Attr: $stride,
- SPIRV_Int32_1DTensorArmOfLength4Attr: $pad,
+ SPIRV_I32_1DTensorArmOfLength2Attr: $kernel,
+ SPIRV_I32_1DTensorArmOfLength2Attr: $stride,
+ SPIRV_I32_1DTensorArmOfLength4Attr: $pad,
SPIRV_TosaExtAccTypeAttr: $acc_type,
- SPIRV_TosaNumerical_TensorArm4D: $input,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $input_zp,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $output_zp
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm4D: $input,
+ SPIRV_I8OrI16OrF16OrF32OrBF16_1DTensorArmOfLength1: $input_zp,
+ SPIRV_I8OrI16OrF16OrF32OrBF16_1DTensorArmOfLength1: $output_zp
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm4D: $output
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm4D: $output
);
let assemblyFormat = [{
@@ -358,20 +356,20 @@ def SPIRV_TosaConv2DOp : SPIRV_TosaConvolutionOp<"Conv2D", 2> {
}];
let arguments = (ins
- SPIRV_Int32_1DTensorArmOfLength4Attr: $pad,
- SPIRV_Int32_1DTensorArmOfLength2Attr: $stride,
- SPIRV_Int32_1DTensorArmOfLength2Attr: $dilation,
+ SPIRV_I32_1DTensorArmOfLength4Attr: $pad,
+ SPIRV_I32_1DTensorArmOfLength2Attr: $stride,
+ SPIRV_I32_1DTensorArmOfLength2Attr: $dilation,
SPIRV_TosaExtAccTypeAttr: $acc_type,
SPIRV_BoolConstAttr: $local_bound,
- SPIRV_TosaNumerical_TensorArm4D: $input,
- SPIRV_TosaNumerical_TensorArm4D: $weight,
- SPIRV_TosaNumerical_TensorArm1D: $bias,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $input_zp,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $weight_zp
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm4D: $input,
+ SPIRV_I8OrF16OrF32OrBF16_TensorArm4D: $weight,
+ SPIRV_I32OrI64OrF16OrF32OrBF16_TensorArm1D: $bias,
+ SPIRV_I8OrI16OrF16OrF32OrBF16_1DTensorArmOfLength1: $input_zp,
+ SPIRV_I8OrF16OrF32OrBF16_1DTensorArmOfLength1: $weight_zp
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm4D: $output
+ SPIRV_I32OrI64OrF16OrF32OrBF16_TensorArm4D: $output
);
let assemblyFormat = [{
@@ -413,20 +411,20 @@ def SPIRV_TosaConv3DOp : SPIRV_TosaConvolutionOp<"Conv3D", 3> {
}];
let arguments = (ins
- SPIRV_Int32_1DTensorArmOfLength6Attr: $pad,
- SPIRV_Int32_1DTensorArmOfLength3Attr: $stride,
- SPIRV_Int32_1DTensorArmOfLength3Attr: $dilation,
+ SPIRV_I32_1DTensorArmOfLength6Attr: $pad,
+ SPIRV_I32_1DTensorArmOfLength3Attr: $stride,
+ SPIRV_I32_1DTensorArmOfLength3Attr: $dilation,
SPIRV_TosaExtAccTypeAttr: $acc_type,
SPIRV_BoolConstAttr: $local_bound,
- SPIRV_TosaNumerical_TensorArm5D: $input,
- SPIRV_TosaNumerical_TensorArm5D: $weight,
- SPIRV_TosaNumerical_TensorArm1D: $bias,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $input_zp,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $weight_zp
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm5D: $input,
+ SPIRV_I8OrF16OrF32OrBF16_TensorArm5D: $weight,
+ SPIRV_I32OrI64OrF16OrF32OrBF16_TensorArm1D: $bias,
+ SPIRV_I8OrI16OrF16OrF32OrBF16_1DTensorArmOfLength1: $input_zp,
+ SPIRV_I8OrF16OrF32OrBF16_1DTensorArmOfLength1: $weight_zp
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm5D: $output
+ SPIRV_I32OrI64OrF16OrF32OrBF16_TensorArm5D: $output
);
let assemblyFormat = [{
@@ -469,20 +467,20 @@ def SPIRV_TosaDepthwiseConv2DOp : SPIRV_TosaConvolutionOp<"DepthwiseConv2D", 4>
}];
let arguments = (ins
- SPIRV_Int32_1DTensorArmOfLength4Attr: $pad,
- SPIRV_Int32_1DTensorArmOfLength2Attr: $stride,
- SPIRV_Int32_1DTensorArmOfLength2Attr: $dilation,
+ SPIRV_I32_1DTensorArmOfLength4Attr: $pad,
+ SPIRV_I32_1DTensorArmOfLength2Attr: $stride,
+ SPIRV_I32_1DTensorArmOfLength2Attr: $dilation,
SPIRV_TosaExtAccTypeAttr: $acc_type,
SPIRV_BoolConstAttr: $local_bound,
- SPIRV_TosaNumerical_TensorArm4D: $input,
- SPIRV_TosaNumerical_TensorArm4D: $weight,
- SPIRV_TosaNumerical_TensorArm1D: $bias,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $input_zp,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $weight_zp
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm4D: $input,
+ SPIRV_I8OrF16OrF32OrBF16_TensorArm4D: $weight,
+ SPIRV_I32OrI64OrF16OrF32OrBF16_TensorArm1D: $bias,
+ SPIRV_I8OrI16OrF16OrF32OrBF16_1DTensorArmOfLength1: $input_zp,
+ SPIRV_I8OrF16OrF32OrBF16_1DTensorArmOfLength1: $weight_zp
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm4D: $output
+ SPIRV_I32OrI64OrF16OrF32OrBF16_TensorArm4D: $output
);
let assemblyFormat = [{
@@ -526,12 +524,12 @@ def SPIRV_TosaFFT2DOp : SPIRV_TosaOpWithComplexResult<"FFT2D", 5, [Pure]> {
let arguments = (ins
SPIRV_BoolConstAttr: $inverse,
SPIRV_BoolConstAttr: $local_bound,
- SPIRV_Float32_TensorArm3D: $input_real,
- SPIRV_Float32_TensorArm3D: $input_imag
+ SPIRV_F32_TensorArm3D: $input_real,
+ SPIRV_F32_TensorArm3D: $input_imag
);
let results = (outs
- SPIRV_Struct_2_Float32_TensorArm3D: $output
+ SPIRV_Struct_2_F32_TensorArm3D: $output
);
let assemblyFormat = [{
@@ -581,14 +579,14 @@ def SPIRV_TosaMatMulOp : SPIRV_TosaOpWithResult<"MatMul", 6, [NoMemoryEffect,
}];
let arguments = (ins
- SPIRV_TosaNumerical_TensorArm3D: $A,
- SPIRV_TosaNumerical_TensorArm3D: $B,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $A_zp,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $B_zp
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm3D: $A,
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm3D: $B,
+ SPIRV_I8OrI16OrF16OrF32OrBF16_1DTensorArmOfLength1: $A_zp,
+ SPIRV_I8OrI16OrF16OrF32OrBF16_1DTensorArmOfLength1: $B_zp
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm3D: $output
+ SPIRV_I32OrI64OrF16OrF32_TensorArm3D: $output
);
let assemblyFormat = [{
@@ -632,15 +630,15 @@ def SPIRV_TosaMaxPool2DOp : SPIRV_TosaOpWithResult<"MaxPool2D", 7, [Pure,
}];
let arguments = (ins
- SPIRV_Int32_1DTensorArmOfLength2Attr: $kernel,
- SPIRV_Int32_1DTensorArmOfLength2Attr: $stride,
- SPIRV_Int32_1DTensorArmOfLength4Attr: $pad,
+ SPIRV_I32_1DTensorArmOfLength2Attr: $kernel,
+ SPIRV_I32_1DTensorArmOfLength2Attr: $stride,
+ SPIRV_I32_1DTensorArmOfLength4Attr: $pad,
SPIRV_TosaExtNaNPropagationModeAttr: $nan_mode,
- SPIRV_TosaNumerical_TensorArm4D: $input
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm4D: $input
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm4D: $output
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm4D: $output
);
let assemblyFormat = [{
@@ -687,11 +685,11 @@ def SPIRV_TosaRFFT2DOp : SPIRV_TosaOpWithComplexResult<"RFFT2D", 8, [Pure]> {
let arguments = (ins
SPIRV_BoolConstAttr: $local_bound,
- SPIRV_Float32_TensorArm3D: $input_real
+ SPIRV_F32_TensorArm3D: $input_real
);
let results = (outs
- SPIRV_Struct_2_Float32_TensorArm3D: $output
+ SPIRV_Struct_2_F32_TensorArm3D: $output
);
let assemblyFormat = [{
@@ -732,19 +730,19 @@ def SPIRV_TosaTransposeConv2DOp : SPIRV_TosaConvolutionOp<"TransposeConv2D", 9>
}];
let arguments = (ins
- SPIRV_Int32_1DTensorArmOfLength4Attr: $out_pad,
- SPIRV_Int32_1DTensorArmOfLength2Attr: $stride,
+ SPIRV_I32_1DTensorArmOfLength4Attr: $out_pad,
+ SPIRV_I32_1DTensorArmOfLength2Attr: $stride,
SPIRV_TosaExtAccTypeAttr: $acc_type,
SPIRV_BoolConstAttr: $local_bound,
- SPIRV_TosaNumerical_TensorArm4D: $input,
- SPIRV_TosaNumerical_TensorArm4D: $weight,
- SPIRV_TosaNumerical_TensorArm1D: $bias,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $input_zp,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $weight_zp
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm4D: $input,
+ SPIRV_I8OrF16OrF32OrBF16_TensorArm4D: $weight,
+ SPIRV_I32OrI64OrF16OrF32OrBF16_TensorArm1D: $bias,
+ SPIRV_I8OrI16OrF16OrF32OrBF16_1DTensorArmOfLength1: $input_zp,
+ SPIRV_I8OrF16OrF32OrBF16_1DTensorArmOfLength1: $weight_zp
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm4D: $output
+ SPIRV_I32OrI64OrF16OrF32OrBF16_TensorArm4D: $output
);
let assemblyFormat = [{
@@ -787,14 +785,14 @@ def SPIRV_TosaClampOp : SPIRV_TosaOpWithResult<"Clamp", 10, [Pure,
}];
let arguments = (ins
- SPIRV_TosaNumericalAttr: $min_val,
- SPIRV_TosaNumericalAttr: $max_val,
+ SPIRV_I8OrI16OrF16OrF32OrBF16ConstAttr: $min_val,
+ SPIRV_I8OrI16OrF16OrF32OrBF16ConstAttr: $max_val,
SPIRV_TosaExtNaNPropagationModeAttr: $nan_mode,
- SPIRV_TosaNumerical_TensorArm: $input
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm: $input
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm: $output
+ SPIRV_I8OrI16OrF16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -832,11 +830,11 @@ def SPIRV_TosaErfOp : SPIRV_TosaOpWithResult<"Erf", 11, [Pure,
}];
let arguments = (ins
- SPIRV_TosaFloat_TensorArm: $input
+ SPIRV_F16OrF32OrBF16_TensorArm: $input
);
let results = (outs
- SPIRV_TosaFloat_TensorArm: $output
+ SPIRV_F16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -873,11 +871,11 @@ def SPIRV_TosaSigmoidOp : SPIRV_TosaOpWithResult<"Sigmoid", 12, [Pure,
}];
let arguments = (ins
- SPIRV_TosaFloat_TensorArm: $input
+ SPIRV_F16OrF32OrBF16_TensorArm: $input
);
let results = (outs
- SPIRV_TosaFloat_TensorArm: $output
+ SPIRV_F16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -913,11 +911,11 @@ def SPIRV_TosaTanhOp : SPIRV_TosaOpWithResult<"Tanh", 13, [Pure,
}];
let arguments = (ins
- SPIRV_TosaFloat_TensorArm: $input
+ SPIRV_F16OrF32OrBF16_TensorArm: $input
);
let results = (outs
- SPIRV_TosaFloat_TensorArm: $output
+ SPIRV_F16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -954,12 +952,12 @@ def SPIRV_TosaAddOp : SPIRV_TosaElementwiseBinaryOp<"Add", 14, [NoMemoryEffect]>
}];
let arguments = (ins
- SPIRV_TosaNumerical_TensorArm: $input1,
- SPIRV_TosaNumerical_TensorArm: $input2
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $input1,
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $input2
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm: $output
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -992,12 +990,12 @@ def SPIRV_TosaArithmeticRightShiftOp : SPIRV_TosaElementwiseBinaryOp<"Arithmetic
let arguments = (ins
SPIRV_BoolConstAttr: $round,
- SPIRV_TosaInteger_TensorArm: $input1,
- SPIRV_TosaInteger_TensorArm: $input2
+ SPIRV_I8OrI16OrI32_TensorArm: $input1,
+ SPIRV_I8OrI16OrI32_TensorArm: $input2
);
let results = (outs
- SPIRV_TosaInteger_TensorArm: $output
+ SPIRV_I8OrI16OrI32_TensorArm: $output
);
let assemblyFormat = [{
@@ -1095,12 +1093,12 @@ def SPIRV_TosaIntDivOp : SPIRV_TosaElementwiseBinaryOp<"IntDiv", 19, [NoMemoryEf
}];
let arguments = (ins
- SPIRV_Int32_TensorArm: $input1,
- SPIRV_Int32_TensorArm: $input2
+ SPIRV_I32_TensorArm: $input1,
+ SPIRV_I32_TensorArm: $input2
);
let results = (outs
- SPIRV_Int32_TensorArm: $output
+ SPIRV_I32_TensorArm: $output
);
let assemblyFormat = [{
@@ -1212,10 +1210,7 @@ def SPIRV_TosaLogicalXorOp : SPIRV_TosaBoolElementwiseBinaryOp<"LogicalXor", 24>
}
-def SPIRV_TosaMaximumOp : SPIRV_TosaElementwiseBinaryOp<"Maximum", 25, [Pure,
- TypeConstraintImplicationOn<"input1", AnyInteger, "input1", [I32]>,
- TypeConstraintImplicationOn<"input2", AnyInteger, "input2", [I32]>,
- TypeConstraintImplicationOn<"output", AnyInteger, "output", [I32]>]> {
+def SPIRV_TosaMaximumOp : SPIRV_TosaElementwiseBinaryOp<"Maximum", 25, [Pure]> {
let summary = "Maximum.";
let description = [{
@@ -1237,12 +1232,12 @@ def SPIRV_TosaMaximumOp : SPIRV_TosaElementwiseBinaryOp<"Maximum", 25, [Pure,
let arguments = (ins
SPIRV_TosaExtNaNPropagationModeAttr: $nan_mode,
- SPIRV_TosaNumerical_TensorArm: $input1,
- SPIRV_TosaNumerical_TensorArm: $input2
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $input1,
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $input2
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm: $output
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -1254,10 +1249,7 @@ def SPIRV_TosaMaximumOp : SPIRV_TosaElementwiseBinaryOp<"Maximum", 25, [Pure,
}
-def SPIRV_TosaMinimumOp : SPIRV_TosaElementwiseBinaryOp<"Minimum", 26, [Pure,
- TypeConstraintImplicationOn<"input1", AnyInteger, "input1", [I32]>,
- TypeConstraintImplicationOn<"input2", AnyInteger, "input2", [I32]>,
- TypeConstraintImplicationOn<"output", AnyInteger, "output", [I32]>]> {
+def SPIRV_TosaMinimumOp : SPIRV_TosaElementwiseBinaryOp<"Minimum", 26, [Pure]> {
let summary = "Minimum.";
let description = [{
@@ -1279,12 +1271,12 @@ def SPIRV_TosaMinimumOp : SPIRV_TosaElementwiseBinaryOp<"Minimum", 26, [Pure,
let arguments = (ins
SPIRV_TosaExtNaNPropagationModeAttr: $nan_mode,
- SPIRV_TosaNumerical_TensorArm: $input1,
- SPIRV_TosaNumerical_TensorArm: $input2
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $input1,
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $input2
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm: $output
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -1327,13 +1319,13 @@ def SPIRV_TosaMulOp : SPIRV_TosaBinaryOp<"Mul", 27, [NoMemoryEffect,
}];
let arguments = (ins
- SPIRV_TosaNumerical_TensorArm: $input1,
- SPIRV_TosaNumerical_TensorArm: $input2,
- SPIRV_Int8_1DTensorArmOfLength1: $shift
+ SPIRV_I8OrI16OrI32OrF16OrF32OrBF16_TensorArm: $input1,
+ SPIRV_I8OrI16OrI32OrF16OrF32OrBF16_TensorArm: $input2,
+ SPIRV_I8_1DTensorArmOfLength1: $shift
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm: $output
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -1366,12 +1358,12 @@ def SPIRV_TosaPowOp : SPIRV_TosaElementwiseBinaryOp<"Pow", 28, [NoMemoryEffect]>
}];
let arguments = (ins
- SPIRV_TosaFloat_TensorArm: $input1,
- SPIRV_TosaFloat_TensorArm: $input2
+ SPIRV_F16OrF32OrBF16_TensorArm: $input1,
+ SPIRV_F16OrF32OrBF16_TensorArm: $input2
);
let results = (outs
- SPIRV_TosaFloat_TensorArm: $output
+ SPIRV_F16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -1382,10 +1374,7 @@ def SPIRV_TosaPowOp : SPIRV_TosaElementwiseBinaryOp<"Pow", 28, [NoMemoryEffect]>
}
-def SPIRV_TosaSubOp : SPIRV_TosaElementwiseBinaryOp<"Sub", 29, [NoMemoryEffect,
- TypeConstraintImplicationOn<"input1", AnyInteger, "input1", [I32]>,
- TypeConstraintImplicationOn<"input2", AnyInteger, "input2", [I32]>,
- TypeConstraintImplicationOn<"output", AnyInteger, "output", [I32]>]> {
+def SPIRV_TosaSubOp : SPIRV_TosaElementwiseBinaryOp<"Sub", 29, [NoMemoryEffect]> {
let summary = "Subtraction operator.";
let description = [{
@@ -1406,12 +1395,12 @@ def SPIRV_TosaSubOp : SPIRV_TosaElementwiseBinaryOp<"Sub", 29, [NoMemoryEffect,
}];
let arguments = (ins
- SPIRV_TosaNumerical_TensorArm: $input1,
- SPIRV_TosaNumerical_TensorArm: $input2
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $input1,
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $input2
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm: $output
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -1461,12 +1450,12 @@ def SPIRV_TosaTableOp : SPIRV_TosaOpWithResult<"Table", 30, [NoMemoryEffect,
}];
let arguments = (ins
- SPIRV_TosaInteger_TensorArm: $input1,
- SPIRV_TosaInteger_TensorArm1D: $table
+ SPIRV_I8OrI16_TensorArm: $input1,
+ SPIRV_I8OrI16_TensorArm1D: $table
);
let results = (outs
- SPIRV_TosaInteger_TensorArm: $output
+ SPIRV_I8OrI32_TensorArm: $output
);
let assemblyFormat = [{
@@ -1503,11 +1492,11 @@ def SPIRV_TosaAbsOp : SPIRV_TosaElementwiseUnaryOp<"Abs", 31, [NoMemoryEffect]>
}];
let arguments = (ins
- SPIRV_TosaNumerical_TensorArm: $input1
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $input1
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm: $output
+ SPIRV_I32OrF16OrF32OrBF16_TensorArm: $output
);
let assemblyFormat = [{
@@ -1534,11 +1523,11 @@ def SPIRV_TosaBitwiseNotOp : SPIRV_TosaElementwiseUnaryOp<"BitwiseNot", 32, [Pur
}];
let arguments = (ins
- SPIRV_TosaInteger_TensorArm: $input1
+ SPIRV_I8OrI16OrI32_TensorArm: $input1
);
let results = (outs
- SPIRV_TosaInteger_TensorArm: $output
+ SPIRV_I8OrI16OrI32_TensorArm: $output
);
let assemblyFormat = [{
@@ -1583,11 +1572,11 @@ def SPIRV_TosaClzOp : SPIRV_TosaElementwiseUnaryOp<"Clz", 34, [Pure]> {
}];
let arguments = (ins
- SPIRV_Int32_TensorArm: $input1
+ SPIRV_I32_TensorArm: $input1
);
let results = (outs
- SPIRV_Int32_TensorArm: $output
+ SPIRV_I32_TensorArm: $output
);
let assemblyFormat = [{
@@ -1721,13 +1710,13 @@ def SPIRV_TosaNegateOp : SPIRV_TosaElementwiseUnaryOp<"Negate", 40, [NoMemoryEff
}];
let arguments = (ins
- SPIRV_TosaNumerical_TensorArm: $input1,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $input1_zp,
- SPIRV_TosaNumerical_1DTensorArmOfLength1: $output_zp
+ SPIRV_I8OrI16OrI32OrF16OrF32OrBF16_TensorArm: $input1,
+ SPIRV_I8OrI16OrI32OrF16OrF32OrBF16_1DTensorArmOfLength1: $input1_zp,
+ SPIRV_I8OrI16OrI32OrF16OrF32OrBF16_1DTensorArmOfLength1: $output_zp
);
let results = (outs
- SPIRV_TosaNumerical_TensorArm: $output
+ SPIRV_I8OrI16OrI32OrF16OrF3...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/192623
More information about the llvm-commits
mailing list