blob: 76cf66671c444e8cfb1eabacea7a3e4cb0919416 [file] [log] [blame]
Eric Kunzee5e26762020-10-13 16:11:07 -07001
Luke Hutton261b7b62023-01-10 14:50:31 +00002// Copyright (c) 2020-2023, ARM Limited.
Eric Kunzee5e26762020-10-13 16:11:07 -07003//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#include "op_factory.h"
17#include "activation_funcs.h"
18#include "comparison.h"
19#include "control_flow.h"
20#include "custom.h"
21#include "data_layout.h"
22#include "data_nodes.h"
23#include "ewise_binary.h"
24#include "ewise_ternary.h"
25#include "ewise_unary.h"
26#include "image.h"
27#include "reduction.h"
28#include "scatter_gather.h"
29#include "tensor_ops.h"
30#include "type_conversion.h"
31
32using namespace TosaReference;
33using namespace tosa;
34
Kevin Chengacb550f2021-06-29 15:32:19 -070035GraphNode* OpFactory::newOp(SubgraphTraverser* sgt,
36 TosaSerializationHandler* tsh,
Eric Kunzee5e26762020-10-13 16:11:07 -070037 Op opType,
38 TosaAttributeBase* attribute,
Eric Kunzee5e26762020-10-13 16:11:07 -070039 uint64_t id,
40 DType inputDType,
41 int inputRank,
42 DType outputDType,
43 int outputRank,
44 DType weightDType,
45 int weightRank)
46{
47 switch (opType)
48 {
49 // tensor_ops
50 case Op_ARGMAX:
James Ward8b390432022-08-12 20:48:56 +010051 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FP16);
James Ward24dbc422022-10-19 12:20:31 +010052 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010053 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -080054 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070055 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, INT16);
56 break;
57 case Op_AVG_POOL2D:
James Ward8b390432022-08-12 20:48:56 +010058 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010059 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +010060 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010061 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010062 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, INT8, INT32);
63 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, INT16, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -070064 break;
65 case Op_CONV2D:
James Ward8b390432022-08-12 20:48:56 +010066 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, FP16, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010067 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, FP16, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +010068 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, BF16, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010069 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, FP32, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010070 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, INT8, INT4, INT32);
71 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, INT8, INT8, INT32);
72 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -070073 break;
Kevin Cheng1533b852021-09-01 12:51:58 -070074 case Op_CONV3D:
James Ward8b390432022-08-12 20:48:56 +010075 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, FP16, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010076 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, FP16, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +010077 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, BF16, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010078 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, FP32, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010079 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, INT8, INT4, INT32);
80 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, INT8, INT8, INT32);
81 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, INT16, INT8, INT48);
Kevin Cheng1533b852021-09-01 12:51:58 -070082 break;
Eric Kunzee5e26762020-10-13 16:11:07 -070083 case Op_DEPTHWISE_CONV2D:
James Ward8b390432022-08-12 20:48:56 +010084 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP16, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010085 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP16, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +010086 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, BF16, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010087 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP32, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010088 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, INT8, INT4, INT32);
89 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, INT8, INT8, INT32);
90 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -070091 break;
92 case Op_FULLY_CONNECTED:
James Ward8b390432022-08-12 20:48:56 +010093 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, FP16, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010094 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, FP16, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +010095 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, BF16, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010096 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, FP32, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010097 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, INT8, INT4, INT32);
98 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, INT8, INT8, INT32);
99 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -0700100 break;
101 case Op_MATMUL:
James Ward8b390432022-08-12 20:48:56 +0100102 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpMatMul, MatMul, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100103 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpMatMul, MatMul, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +0100104 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpMatMul, MatMul, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100105 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpMatMul, MatMul, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +0100106 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpMatMul, MatMul, INT8, INT32);
107 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpMatMul, MatMul, INT16, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -0700108 break;
109 case Op_MAX_POOL2D:
James Ward8b390432022-08-12 20:48:56 +0100110 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100111 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100112 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800113 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700114 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT16);
115 break;
Luke Hutton261b7b62023-01-10 14:50:31 +0000116 case Op_RFFT2D:
117 DEF_FACTORY_ONE_TYPE(OpRFFT2d, FP32);
118 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700119 case Op_TRANSPOSE_CONV2D:
James Ward8b390432022-08-12 20:48:56 +0100120 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP16, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100121 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP16, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +0100122 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, BF16, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100123 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP32, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +0100124 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, INT8, INT4, INT32);
125 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, INT8, INT8, INT32);
126 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -0700127 break;
128
129 // activation_funcs
130 case Op_CLAMP:
James Ward8b390432022-08-12 20:48:56 +0100131 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100132 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100133 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800134 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700135 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT16);
136 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700137 case Op_SIGMOID:
James Ward8b390432022-08-12 20:48:56 +0100138 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100139 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100140 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700141 break;
142 case Op_TANH:
James Ward8b390432022-08-12 20:48:56 +0100143 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100144 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100145 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700146 break;
147
148 // ewise_binary
149 case Op_ADD:
James Ward8b390432022-08-12 20:48:56 +0100150 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100151 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100152 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700153 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, INT32);
154 break;
155 case Op_ARITHMETIC_RIGHT_SHIFT:
156 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT8);
157 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT16);
158 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT32);
159 break;
160 case Op_BITWISE_AND:
Kevin Cheng3a478572021-01-22 17:21:02 -0800161 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700162 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT16);
163 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT32);
164 break;
165 case Op_BITWISE_OR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800166 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700167 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT16);
168 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT32);
169 break;
170 case Op_BITWISE_XOR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800171 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700172 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT16);
173 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT32);
174 break;
Matthew Haddon459443c2021-08-23 16:43:13 +0100175 case Op_INTDIV:
176 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIntdiv, INT32);
Kevin Cheng14d7f7a2021-05-12 10:44:49 -0700177 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700178 case Op_LOGICAL_AND:
179 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalAnd, BOOL);
180 break;
181 case Op_LOGICAL_LEFT_SHIFT:
182 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT8);
183 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT16);
184 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT32);
185 break;
186 case Op_LOGICAL_RIGHT_SHIFT:
187 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT8);
188 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT16);
189 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT32);
190 break;
191 case Op_LOGICAL_OR:
192 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalOr, BOOL);
193 break;
194 case Op_LOGICAL_XOR:
Jeremy Johnson615feee2022-03-10 16:00:49 +0000195 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalXor, BOOL);
Eric Kunzee5e26762020-10-13 16:11:07 -0700196 break;
197 case Op_MAXIMUM:
James Ward8b390432022-08-12 20:48:56 +0100198 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100199 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100200 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700201 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, INT32);
202 break;
203 case Op_MINIMUM:
James Ward8b390432022-08-12 20:48:56 +0100204 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100205 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100206 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700207 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, INT32);
208 break;
209 case Op_MUL:
James Ward8b390432022-08-12 20:48:56 +0100210 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP16, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100211 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, BF16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100212 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP32, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700213 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT8, INT32);
214 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT16, INT32);
215 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT32, INT32);
216 break;
217 case Op_POW:
James Ward8b390432022-08-12 20:48:56 +0100218 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100219 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100220 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700221 break;
222 case Op_SUB:
James Ward8b390432022-08-12 20:48:56 +0100223 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100224 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100225 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700226 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, INT32);
227 break;
228 case Op_TABLE:
Kevin Cheng571f7182021-05-24 17:20:01 -0700229 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT8);
230 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700231 break;
232
233 // ewise_unary
234 case Op_ABS:
James Ward8b390432022-08-12 20:48:56 +0100235 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100236 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100237 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700238 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, INT32);
239 break;
240 case Op_BITWISE_NOT:
Kevin Cheng3a478572021-01-22 17:21:02 -0800241 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700242 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT16);
243 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT32);
244 break;
245 case Op_CEIL:
James Ward8b390432022-08-12 20:48:56 +0100246 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100247 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100248 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700249 break;
250 case Op_CLZ:
251 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClz, INT32);
252 break;
253 case Op_EXP:
James Ward8b390432022-08-12 20:48:56 +0100254 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100255 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100256 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700257 break;
258 case Op_FLOOR:
James Ward8b390432022-08-12 20:48:56 +0100259 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100260 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100261 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700262 break;
263 case Op_LOG:
James Ward8b390432022-08-12 20:48:56 +0100264 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100265 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100266 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700267 break;
268 case Op_LOGICAL_NOT:
269 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalNot, BOOL);
270 break;
271 case Op_NEGATE:
James Ward8b390432022-08-12 20:48:56 +0100272 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100273 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100274 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800275 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700276 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT16);
277 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT32);
278 break;
279 case Op_RECIPROCAL:
James Ward8b390432022-08-12 20:48:56 +0100280 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100281 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100282 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700283 break;
284 case Op_RSQRT:
James Ward8b390432022-08-12 20:48:56 +0100285 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100286 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100287 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700288 break;
289
290 // ewise_ternary
291 case Op_SELECT:
James Ward8b390432022-08-12 20:48:56 +0100292 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100293 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100294 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700295 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT8);
296 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT16);
297 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT32);
298 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BOOL);
299 break;
300
301 // comparison
302 case Op_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100303 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100304 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100305 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700306 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, INT32);
307 break;
308 case Op_GREATER:
James Ward8b390432022-08-12 20:48:56 +0100309 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100310 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100311 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700312 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, INT32);
313 break;
314 case Op_GREATER_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100315 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100316 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100317 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700318 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, INT32);
319 break;
320
321 // reduction
322 case Op_REDUCE_ALL:
323 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAll, BOOL);
324 break;
325 case Op_REDUCE_ANY:
326 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAny, BOOL);
327 break;
328 case Op_REDUCE_MAX:
James Ward8b390432022-08-12 20:48:56 +0100329 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100330 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100331 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800332 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700333 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT16);
334 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT32);
335 break;
336 case Op_REDUCE_MIN:
James Ward8b390432022-08-12 20:48:56 +0100337 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100338 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100339 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800340 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700341 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT16);
342 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT32);
343 break;
344 case Op_REDUCE_PRODUCT:
James Ward8b390432022-08-12 20:48:56 +0100345 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100346 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100347 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700348 break;
349 case Op_REDUCE_SUM:
James Ward8b390432022-08-12 20:48:56 +0100350 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100351 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100352 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP32);
Jeremy Johnson7de9b452022-04-05 14:31:37 +0100353 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSumInt, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700354 break;
355
356 // data layout
357 case Op_CONCAT:
James Ward8b390432022-08-12 20:48:56 +0100358 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100359 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100360 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700361 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT8);
362 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT16);
363 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT32);
364 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BOOL);
365 break;
366 case Op_PAD:
James Ward8b390432022-08-12 20:48:56 +0100367 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100368 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100369 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700370 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700371 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT8);
372 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT16);
373 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BOOL);
374 break;
375 case Op_RESHAPE:
James Ward8b390432022-08-12 20:48:56 +0100376 DEF_FACTORY_RESHAPE(OpReshape, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100377 DEF_FACTORY_RESHAPE(OpReshape, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100378 DEF_FACTORY_RESHAPE(OpReshape, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700379 DEF_FACTORY_RESHAPE(OpReshape, INT8);
380 DEF_FACTORY_RESHAPE(OpReshape, INT16);
381 DEF_FACTORY_RESHAPE(OpReshape, INT32);
382 DEF_FACTORY_RESHAPE(OpReshape, BOOL);
383 break;
384 case Op_REVERSE:
James Ward8b390432022-08-12 20:48:56 +0100385 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100386 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100387 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700388 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT8);
389 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT16);
390 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT32);
391 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BOOL);
392 break;
393 case Op_SLICE:
James Ward8b390432022-08-12 20:48:56 +0100394 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100395 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100396 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700397 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT8);
398 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT16);
399 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT32);
400 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, BOOL);
401 break;
402 case Op_TILE:
James Ward8b390432022-08-12 20:48:56 +0100403 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100404 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100405 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700406 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT8);
407 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT16);
408 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT32);
409 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, BOOL);
410 break;
411 case Op_TRANSPOSE:
412 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, BOOL);
James Ward8b390432022-08-12 20:48:56 +0100413 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100414 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100415 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700416 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT8);
417 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT16);
418 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT32);
419 break;
420
421 // scatter_gather
422 case Op_GATHER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800423 DEF_FACTORY_ONE_TYPE(OpGather, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800424 DEF_FACTORY_ONE_TYPE(OpGather, INT16);
425 DEF_FACTORY_ONE_TYPE(OpGather, INT32);
James Ward8b390432022-08-12 20:48:56 +0100426 DEF_FACTORY_ONE_TYPE(OpGather, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100427 DEF_FACTORY_ONE_TYPE(OpGather, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100428 DEF_FACTORY_ONE_TYPE(OpGather, FP32);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800429 break;
430 case Op_SCATTER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800431 DEF_FACTORY_ONE_TYPE(OpScatter, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800432 DEF_FACTORY_ONE_TYPE(OpScatter, INT16);
433 DEF_FACTORY_ONE_TYPE(OpScatter, INT32);
James Ward8b390432022-08-12 20:48:56 +0100434 DEF_FACTORY_ONE_TYPE(OpScatter, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100435 DEF_FACTORY_ONE_TYPE(OpScatter, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100436 DEF_FACTORY_ONE_TYPE(OpScatter, FP32);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800437 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700438
439 // image
440 case Op_RESIZE:
TatWai Chongf7326092022-06-08 12:17:14 -0700441 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT32);
442 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT8);
443 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT48);
444 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT16);
James Ward8b390432022-08-12 20:48:56 +0100445 DEF_FACTORY_TWO_TYPE_RESIZE_FP16(OpResize, FP16, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100446 DEF_FACTORY_TWO_TYPE_RESIZE_BF16(OpResize, BF16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100447 DEF_FACTORY_TWO_TYPE_RESIZE_FP32(OpResize, FP32, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700448 break;
449
450 // data_nodes
451 case Op_CONST:
Kevin Chengacb550f2021-06-29 15:32:19 -0700452 return new OpConst(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700453 case Op_IDENTITY:
James Ward8b390432022-08-12 20:48:56 +0100454 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100455 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100456 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700457 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700458 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT8);
459 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT16);
460 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BOOL);
461 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700462
463 // type_conversion
464 case Op_CAST:
465 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT8);
466 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT16);
467 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT32);
468 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BOOL);
469 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT16);
470 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT32);
James Ward8b390432022-08-12 20:48:56 +0100471 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000472 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100473 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700474 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BOOL);
475 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT8);
476 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT32);
James Ward8b390432022-08-12 20:48:56 +0100477 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000478 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100479 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700480 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BOOL);
481 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT8);
482 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT16);
James Ward8b390432022-08-12 20:48:56 +0100483 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000484 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100485 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP32);
James Ward8b390432022-08-12 20:48:56 +0100486 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT8);
487 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT16);
488 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000489 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +0100490 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT8);
491 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT16);
492 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000493 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100494 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT8);
495 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT16);
496 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000497 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, FP16);
498 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, BF16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700499 break;
500 case Op_RESCALE:
Kevin Cheng3a478572021-01-22 17:21:02 -0800501 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT8);
502 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT16);
503 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT32);
504 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700505 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT16);
506 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800507 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700508 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT16);
509 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800510 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700511 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT16);
512 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800513 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100514 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT16);
515 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT16, INT16);
Kevin Cheng3a478572021-01-22 17:21:02 -0800516 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, UINT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100517 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT8);
518 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700519 break;
520
521 // custom
522 case Op_CUSTOM:
Kevin Chengacb550f2021-06-29 15:32:19 -0700523 return new OpCustom(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700524
525 // control_flow
526 case Op_COND_IF:
Kevin Chengacb550f2021-06-29 15:32:19 -0700527 return new OpCondIf(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700528 case Op_WHILE_LOOP:
Kevin Chengacb550f2021-06-29 15:32:19 -0700529 return new OpWhileLoop(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700530
531 // Ops not recognized
532 default:
533 goto done;
534
535 } // End of switch(opType)
536
537done:
538 return nullptr;
539}