Skip to content

Commit 510c2bd

Browse files
Arm backend: Add table ops to CheckProperQuantization (#10545)
Use TableOps.included_ops() to get all table ops. This removes the risk of forgetting to add ops to CheckProperQuantization when supporting new table ops. Signed-off-by: Oscar Andersson <[email protected]>
1 parent e5874fa commit 510c2bd

File tree

1 file changed

+20
-24
lines changed

1 file changed

+20
-24
lines changed

backends/arm/operator_support/tosa_supported_operators.py

+20-24
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from executorch.backends.arm._passes.fuse_quantized_activation_pass import (
1919
FuseQuantizedActivationPass,
2020
)
21+
from executorch.backends.arm._passes.insert_table_ops import TableOps
2122
from executorch.backends.arm.operator_support.ethos_u55_support import (
2223
EthosU55DtypeSupport,
2324
EthosU55NotSupported,
@@ -298,6 +299,24 @@ class CheckProperQuantization(OperatorSupportBase):
298299

299300
dq_op = exir_ops.edge.quantized_decomposed.dequantize_per_tensor.default
300301
q_op = exir_ops.edge.quantized_decomposed.quantize_per_tensor.default
302+
targeted_ops = (
303+
exir_ops.edge.aten.add.Tensor,
304+
exir_ops.edge.aten.avg_pool2d.default,
305+
exir_ops.edge.aten.bmm.default,
306+
exir_ops.edge.aten.convolution.default,
307+
exir_ops.edge.aten.full.default,
308+
exir_ops.edge.aten.full_like.default,
309+
exir_ops.edge.aten.hardtanh.default,
310+
exir_ops.edge.aten.linear.default,
311+
exir_ops.edge.aten.max_pool2d_with_indices.default,
312+
exir_ops.edge.aten.mm.default,
313+
exir_ops.edge.aten.mul.Tensor,
314+
exir_ops.edge.aten.relu.default,
315+
exir_ops.edge.aten.sub.Tensor,
316+
exir_ops.edge.aten.upsample_bilinear2d.vec,
317+
exir_ops.edge.aten.upsample_nearest2d.vec,
318+
*TableOps.included_ops(),
319+
)
301320

302321
def __init__(self, reporter: WhyNoPartitionReporter):
303322
self.reporter = reporter
@@ -356,30 +375,7 @@ def is_node_supported(
356375
) -> bool:
357376
output_quantized = False
358377
input_quantized = False
359-
if node.target not in (
360-
exir_ops.edge.aten.add.Tensor,
361-
exir_ops.edge.aten.avg_pool2d.default,
362-
exir_ops.edge.aten.bmm.default,
363-
exir_ops.edge.aten.convolution.default,
364-
exir_ops.edge.aten.exp.default,
365-
exir_ops.edge.aten.full.default,
366-
exir_ops.edge.aten.full_like.default,
367-
exir_ops.edge.aten.hardtanh.default,
368-
exir_ops.edge.aten.linear.default,
369-
exir_ops.edge.aten.log.default,
370-
exir_ops.edge.aten.max_pool2d_with_indices.default,
371-
exir_ops.edge.aten.mm.default,
372-
exir_ops.edge.aten.mul.Tensor,
373-
exir_ops.edge.aten.reciprocal.default,
374-
exir_ops.edge.aten.relu.default,
375-
exir_ops.edge.aten.rsqrt.default,
376-
exir_ops.edge.aten.sigmoid.default,
377-
exir_ops.edge.aten.sub.Tensor,
378-
exir_ops.edge.aten.tanh.default,
379-
exir_ops.edge.aten.upsample_bilinear2d.vec,
380-
exir_ops.edge.aten.upsample_nearest2d.vec,
381-
exir_ops.edge.aten.gelu.default,
382-
):
378+
if node.target not in self.targeted_ops:
383379
return True
384380
elif node.target in (
385381
exir_ops.edge.aten.bmm.default,

0 commit comments

Comments
 (0)