Supported Operators
This document provides a comprehensive list of operators supported by the Synaptics backend within the IREE compiler stack. It details which operations are implemented and verified across various input/output types, data layouts, and tiling strategies. The table serves as a reference for users to understand backend coverage and integration status for TOSA and Linalg-based models targeting Synaptics NPU.
Element-Wise Operators
Op |
Input |
TorqHL |
in_t |
weight_t |
out_t |
Tiling |
Implemented |
Verified |
Notes |
---|---|---|---|---|---|---|---|---|---|
ElementWiseBinary |
Linalg |
EltwiseBin(BAND) |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
EltwiseBin(BOR) |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|||
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
EltwiseBin(BXOR) |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|||
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
EltwiseBin(AND) |
bool |
n/a |
bool |
generic |
Yes |
Yes |
|||
EltwiseBin(OR) |
bool |
n/a |
bool |
generic |
Yes |
Yes |
|||
EltwiseBin(XOR) |
bool |
n/a |
bool |
generic |
Yes |
Yes |
|||
EltwiseBin(EQ) |
i8 |
n/a |
bool |
generic |
Yes |
Yes |
|||
i16 |
n/a |
bool |
generic |
Yes |
Yes |
||||
i32 |
n/a |
bool |
generic |
Yes |
Yes |
||||
bf16 |
n/a |
bool |
generic |
Yes |
Yes |
||||
EltwiseBin(GT) |
i8 |
n/a |
bool |
generic |
Yes |
Yes |
|||
i16 |
n/a |
bool |
generic |
Yes |
Yes |
||||
i32 |
n/a |
bool |
generic |
Yes |
Yes |
||||
bf16 |
n/a |
bool |
generic |
Yes |
Yes |
||||
Linalg ult |
EltwiseBin(GT) |
i16 |
n/a |
bool |
generic |
Yes |
Yes |
||
Linalg ule |
EltwiseBin(GT) |
i16 |
n/a |
bool |
generic |
Yes |
Yes |
||
EltwiseBin(GTEQ) |
i8 |
n/a |
bool |
generic |
Yes |
Yes |
|||
i16 |
n/a |
bool |
generic |
Yes |
Yes |
||||
i32 |
n/a |
bool |
generic |
Yes |
Yes |
||||
bf16 |
n/a |
bool |
generic |
Yes |
Yes |
||||
EltwiseBin(MAX) |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|||
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
bf16 |
n/a |
bf16 |
generic |
Yes |
Yes |
||||
EltwisBin(MIN) |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|||
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
bf16 |
n/a |
bf16 |
generic |
Yes |
Yes |
||||
ElementWiseUnary |
Linalg |
EltwiseUnary(BNOT) |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
EltwiseUnary(NOT) |
bool |
n/a |
bool |
generic |
Yes |
Yes |
Other Operators
Op |
Input |
TorqHL |
in_t |
weight_t |
out_t |
Tiling |
Implemented |
Verified |
Notes |
---|---|---|---|---|---|---|---|---|---|
Add |
Linalg |
Add |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
bf16 |
n/a |
bf16 |
generic |
Yes |
Yes |
||||
Bitcast |
Linalg |
Identity |
i16 |
n/a |
bf16 |
No |
Yes |
Yes |
|
bf16 |
n/a |
i16 |
No |
Yes |
Yes |
||||
Sub |
Linalg |
Add |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
bf16 |
n/a |
bf16 |
generic |
Yes |
Yes |
||||
ArgMax |
TOSA |
ArgMax |
i8 |
i8 |
i8 |
No |
Yes |
Yes |
|
AvgPool |
TOSA |
AvgPool |
i8 |
i8 |
i8 |
No |
Yes |
Yes |
|
Conv2D |
TOSA |
Conv2D |
i8 |
i8 |
i8 |
custom |
Yes |
Partly |
7x7 stride-2 not supported |
TOSA |
Conv2D |
i16 |
i8 |
i32 |
custom |
Yes |
Partly |
TOSA specifies i48 output |
|
TOSA |
Conv2D |
bf16 |
bf16 |
bf16 |
custom |
ongoing |
Partly |
||
DepthwiseConv2D |
TOSA |
DW |
i8 |
i8 |
i8 |
custom |
Yes |
Partly |
|
Fill |
Linalg |
Fill |
any |
n/a |
any |
generic |
Yes |
Yes |
|
FullyConnected |
Linalg |
FC |
i8 |
i8 |
i8 |
custom |
Yes |
Yes |
|
Gather |
TOSA |
Gather |
i8 |
i8 |
i8 |
No |
Yes |
Yes |
|
Identity |
TOSA |
Identity |
any |
n/a |
any |
No |
Yes |
Yes |
|
MatMul |
Linalg |
MatMul |
i8 |
i8 |
i32 |
generic |
Yes |
Yes |
BatchMatmul, DotOp and Matvec also supported |
Linalg |
MatMul |
i16 |
i16 |
i32 |
generic |
Yes |
Yes |
TOSA specifies i48 output |
|
Linalg |
MatMul |
bf16 |
bf16 |
f32 |
generic |
Yes |
Yes |
||
MaxPool2D |
Linalg |
MaxPool2D |
i8 |
i8 |
i8 |
custom |
Yes |
Yes |
|
Linalg |
MaxPool2D |
i16 |
i8 |
i16 |
custom |
Yes |
Yes |
||
Mul |
Linalg |
Mul |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|
Linalg |
Mul |
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||
Linalg |
Mul |
bf16 |
n/a |
bf16 |
generic |
Yes |
Yes |
||
Reciprocal |
Linalg |
Composite |
bf16 |
n/a |
bf16 |
generic |
Yes |
Yes |
|
Reduce |
Linalg |
Reduce(all) |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
Reduce(any) |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|||
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
Reduce(Max) |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|||
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
bf16 |
n/a |
bf16 |
generic |
Yes |
Yes |
||||
Reduce(Min) |
i8 |
n/a |
i8 |
generic |
Yes |
Yes |
|||
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
||||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
bf16 |
n/a |
bf16 |
generic |
Yes |
Yes |
||||
Reduce(Sum) |
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
|||
Reduce(Mul) |
bf16 |
n/a |
bf16 |
generic |
Yes |
Yes |
|||
Reduce(XOR) |
i16 |
n/a |
i16 |
generic |
Yes |
Yes |
|||
i32 |
n/a |
i32 |
generic |
Yes |
Yes |
||||
Reshape-collapse |
Linalg |
Identity |
i8 |
n/a |
i8 |
No |
Yes |
Yes |
|
Reshape-expand |
Linalg |
Identity |
i8 |
n/a |
i8 |
No |
Yes |
Yes |
|
Rescale |
Linalg |
FMA |
i8 |
i16 |
i16 |
generic |
Yes |
Yes |
|
Linalg |
FMA |
i8 |
i16 |
i32 |
generic |
Yes |
Yes |
||
Linalg |
FMA |
i16 |
i16 |
i8 |
generic |
Yes |
Yes |
||
Linalg |
FMA |
i32 |
i8 |
i8 |
generic |
Yes |
Yes |
||
Linalg |
FMA |
i32 |
i8 |
i16 |
generic |
Yes |
Yes |
||
Linalg |
FMA |
i32 |
i8 |
i32 |
generic |
Yes |
Yes |
||
Linalg |
FMA |
i16 |
i16 |
i32 |
generic |
Yes |
Yes |
||
Resize |
TOSA |
ResizeNearestNeighbor |
i8 |
i16 |
i8 |
No |
Yes |
Partly |
block size of 2 |
Scale-and-Add |
Linalg |
Add |
i8 |
i16 |
i8 |
custom |
Yes |
Yes |
|
Add |
i16 |
i16 |
i16 |
custom |
Yes |
Yes |
|||
Scale-and-Sub |
Linalg |
Add |
i8 |
i16 |
i8 |
custom |
Yes |
Yes |
|
Add |
i16 |
i16 |
i16 |
custom |
Yes |
Yes |
|||
Scatter |
TOSA |
SynpHL |
i8 |
i8 |
i8 |
No |
Yes |
Yes |
|
Table |
TOSA |
Table |
i8 |
n/a |
i8 |
No |
Yes |
Yes |
Default is Gather based |
Table |
TOSA |
Table |
i16 |
n/a |
i32 |
No |
Yes |
Yes |
|
Transpose |
Linalg |
Transpose |
i8 |
i8 |
i8 |
No |
Yes |
Yes |
|
Broadcast |
Linalg |
Broadcast |
* |
n/a |
* |
generic |
Yes |
Yes |
*: i8/i16/i32 supported, bf16 not yet |