blob: b6a2e150b6fda660dabb6c225d9f2fc02ffcdabc [file] [log] [blame]
Eric Kunzee5e26762020-10-13 16:11:07 -07001
Kevin Cheng3a478572021-01-22 17:21:02 -08002// Copyright (c) 2020-2021, 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:
51 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080052 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070053 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, INT16);
54 break;
55 case Op_AVG_POOL2D:
56 DEF_FACTORY_ONE_TYPE(OpAvgPool2d, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080057 DEF_FACTORY_ONE_TYPE(OpAvgPool2d, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070058 DEF_FACTORY_ONE_TYPE(OpAvgPool2d, INT16);
59 break;
60 case Op_CONV2D:
61 DEF_FACTORY_TWO_TYPE(OpConv2d, FLOAT, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080062 DEF_FACTORY_TWO_TYPE(OpConv2d, INT8, INT4);
63 DEF_FACTORY_TWO_TYPE(OpConv2d, INT8, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070064 DEF_FACTORY_TWO_TYPE(OpConv2d, INT16, INT8);
65 break;
Kevin Cheng1533b852021-09-01 12:51:58 -070066 case Op_CONV3D:
67 DEF_FACTORY_TWO_TYPE(OpConv3d, FLOAT, FLOAT);
68 DEF_FACTORY_TWO_TYPE(OpConv3d, INT8, INT4);
69 DEF_FACTORY_TWO_TYPE(OpConv3d, INT8, INT8);
70 DEF_FACTORY_TWO_TYPE(OpConv3d, INT16, INT8);
71 break;
Eric Kunzee5e26762020-10-13 16:11:07 -070072 case Op_DEPTHWISE_CONV2D:
73 DEF_FACTORY_TWO_TYPE(OpDepthwiseConv2d, FLOAT, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080074 DEF_FACTORY_TWO_TYPE(OpDepthwiseConv2d, INT8, INT4);
75 DEF_FACTORY_TWO_TYPE(OpDepthwiseConv2d, INT8, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070076 DEF_FACTORY_TWO_TYPE(OpDepthwiseConv2d, INT16, INT8);
77 break;
78 case Op_FULLY_CONNECTED:
79 DEF_FACTORY_TWO_TYPE(OpFullyConnected, FLOAT, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080080 DEF_FACTORY_TWO_TYPE(OpFullyConnected, INT8, INT4);
81 DEF_FACTORY_TWO_TYPE(OpFullyConnected, INT8, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070082 DEF_FACTORY_TWO_TYPE(OpFullyConnected, INT16, INT8);
83 break;
84 case Op_MATMUL:
85 DEF_FACTORY_ONE_TYPE(OpMatMul, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080086 DEF_FACTORY_ONE_TYPE(OpMatMul, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070087 DEF_FACTORY_ONE_TYPE(OpMatMul, INT16);
88 break;
89 case Op_MAX_POOL2D:
90 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080091 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070092 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT16);
93 break;
94 case Op_TRANSPOSE_CONV2D:
95 DEF_FACTORY_TWO_TYPE(OpTransposeConv2d, FLOAT, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080096 DEF_FACTORY_TWO_TYPE(OpTransposeConv2d, INT8, INT4);
97 DEF_FACTORY_TWO_TYPE(OpTransposeConv2d, INT8, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070098 DEF_FACTORY_TWO_TYPE(OpTransposeConv2d, INT16, INT8);
99 break;
100
101 // activation_funcs
102 case Op_CLAMP:
103 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -0800104 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700105 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT16);
106 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700107 case Op_SIGMOID:
108 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FLOAT);
109 break;
110 case Op_TANH:
111 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FLOAT);
112 break;
113
114 // ewise_binary
115 case Op_ADD:
116 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FLOAT);
117 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, INT32);
118 break;
119 case Op_ARITHMETIC_RIGHT_SHIFT:
120 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT8);
121 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT16);
122 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT32);
123 break;
124 case Op_BITWISE_AND:
Kevin Cheng3a478572021-01-22 17:21:02 -0800125 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700126 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT16);
127 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT32);
128 break;
129 case Op_BITWISE_OR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800130 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700131 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT16);
132 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT32);
133 break;
134 case Op_BITWISE_XOR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800135 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700136 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT16);
137 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT32);
138 break;
Matthew Haddon459443c2021-08-23 16:43:13 +0100139 case Op_INTDIV:
140 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIntdiv, INT32);
Kevin Cheng14d7f7a2021-05-12 10:44:49 -0700141 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700142 case Op_LOGICAL_AND:
143 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalAnd, BOOL);
144 break;
145 case Op_LOGICAL_LEFT_SHIFT:
146 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT8);
147 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT16);
148 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT32);
149 break;
150 case Op_LOGICAL_RIGHT_SHIFT:
151 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT8);
152 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT16);
153 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT32);
154 break;
155 case Op_LOGICAL_OR:
156 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalOr, BOOL);
157 break;
158 case Op_LOGICAL_XOR:
Jeremy Johnson615feee2022-03-10 16:00:49 +0000159 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalXor, BOOL);
Eric Kunzee5e26762020-10-13 16:11:07 -0700160 break;
161 case Op_MAXIMUM:
162 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FLOAT);
163 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, INT32);
164 break;
165 case Op_MINIMUM:
166 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FLOAT);
167 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, INT32);
168 break;
169 case Op_MUL:
170 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FLOAT, FLOAT);
171 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT8, INT32);
172 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT16, INT32);
173 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT32, INT32);
174 break;
175 case Op_POW:
176 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FLOAT);
177 break;
178 case Op_SUB:
179 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FLOAT);
180 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, INT32);
181 break;
182 case Op_TABLE:
Kevin Cheng571f7182021-05-24 17:20:01 -0700183 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT8);
184 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700185 break;
186
187 // ewise_unary
188 case Op_ABS:
189 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FLOAT);
190 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, INT32);
191 break;
192 case Op_BITWISE_NOT:
Kevin Cheng3a478572021-01-22 17:21:02 -0800193 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700194 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT16);
195 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT32);
196 break;
197 case Op_CEIL:
198 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FLOAT);
199 break;
200 case Op_CLZ:
201 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClz, INT32);
202 break;
203 case Op_EXP:
204 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FLOAT);
205 break;
206 case Op_FLOOR:
207 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FLOAT);
208 break;
209 case Op_LOG:
210 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FLOAT);
211 break;
212 case Op_LOGICAL_NOT:
213 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalNot, BOOL);
214 break;
215 case Op_NEGATE:
216 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -0800217 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700218 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT16);
219 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT32);
220 break;
221 case Op_RECIPROCAL:
222 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FLOAT);
223 break;
224 case Op_RSQRT:
225 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FLOAT);
226 break;
227
228 // ewise_ternary
229 case Op_SELECT:
230 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700231 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT8);
232 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT16);
233 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT32);
234 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BOOL);
235 break;
236
237 // comparison
238 case Op_EQUAL:
239 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FLOAT);
240 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, INT32);
241 break;
242 case Op_GREATER:
243 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FLOAT);
244 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, INT32);
245 break;
246 case Op_GREATER_EQUAL:
247 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FLOAT);
248 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, INT32);
249 break;
250
251 // reduction
252 case Op_REDUCE_ALL:
253 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAll, BOOL);
254 break;
255 case Op_REDUCE_ANY:
256 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAny, BOOL);
257 break;
258 case Op_REDUCE_MAX:
259 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -0800260 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700261 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT16);
262 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT32);
263 break;
264 case Op_REDUCE_MIN:
265 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -0800266 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700267 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT16);
268 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT32);
269 break;
270 case Op_REDUCE_PRODUCT:
271 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FLOAT);
272 break;
273 case Op_REDUCE_SUM:
274 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FLOAT);
Jeremy Johnson7de9b452022-04-05 14:31:37 +0100275 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSumInt, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700276 break;
277
278 // data layout
279 case Op_CONCAT:
280 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700281 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT8);
282 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT16);
283 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT32);
284 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BOOL);
285 break;
286 case Op_PAD:
287 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FLOAT);
288 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700289 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT8);
290 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT16);
291 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BOOL);
292 break;
293 case Op_RESHAPE:
294 DEF_FACTORY_RESHAPE(OpReshape, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700295 DEF_FACTORY_RESHAPE(OpReshape, INT8);
296 DEF_FACTORY_RESHAPE(OpReshape, INT16);
297 DEF_FACTORY_RESHAPE(OpReshape, INT32);
298 DEF_FACTORY_RESHAPE(OpReshape, BOOL);
299 break;
300 case Op_REVERSE:
301 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700302 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT8);
303 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT16);
304 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT32);
305 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BOOL);
306 break;
307 case Op_SLICE:
308 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700309 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT8);
310 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT16);
311 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT32);
312 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, BOOL);
313 break;
314 case Op_TILE:
315 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700316 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT8);
317 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT16);
318 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT32);
319 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, BOOL);
320 break;
321 case Op_TRANSPOSE:
322 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, BOOL);
323 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700324 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT8);
325 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT16);
326 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT32);
327 break;
328
329 // scatter_gather
330 case Op_GATHER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800331 DEF_FACTORY_ONE_TYPE(OpGather, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800332 DEF_FACTORY_ONE_TYPE(OpGather, INT16);
333 DEF_FACTORY_ONE_TYPE(OpGather, INT32);
334 DEF_FACTORY_ONE_TYPE(OpGather, FLOAT);
335 break;
336 case Op_SCATTER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800337 DEF_FACTORY_ONE_TYPE(OpScatter, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800338 DEF_FACTORY_ONE_TYPE(OpScatter, INT16);
339 DEF_FACTORY_ONE_TYPE(OpScatter, INT32);
340 DEF_FACTORY_ONE_TYPE(OpScatter, FLOAT);
341 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700342
343 // image
344 case Op_RESIZE:
TatWai Chongf7326092022-06-08 12:17:14 -0700345 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT32);
346 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT8);
347 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT48);
348 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT16);
349 DEF_FACTORY_TWO_TYPE_RESIZE_FLOAT(OpResize, FLOAT, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700350 break;
351
352 // data_nodes
353 case Op_CONST:
Kevin Chengacb550f2021-06-29 15:32:19 -0700354 return new OpConst(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700355 case Op_IDENTITY:
356 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FLOAT);
357 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700358 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT8);
359 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT16);
360 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BOOL);
361 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700362
363 // type_conversion
364 case Op_CAST:
365 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT8);
366 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT16);
367 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT32);
368 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BOOL);
369 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT16);
370 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT32);
371 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FLOAT);
372 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BOOL);
373 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT8);
374 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT32);
375 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FLOAT);
376 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BOOL);
377 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT8);
378 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT16);
379 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FLOAT);
380 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FLOAT, INT8);
381 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FLOAT, INT16);
382 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FLOAT, INT32);
383 break;
384 case Op_RESCALE:
Kevin Cheng3a478572021-01-22 17:21:02 -0800385 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT8);
386 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT16);
387 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT32);
388 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700389 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT16);
390 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800391 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700392 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT16);
393 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800394 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700395 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT16);
396 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800397 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100398 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT16);
399 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT16, INT16);
Kevin Cheng3a478572021-01-22 17:21:02 -0800400 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, UINT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100401 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT8);
402 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700403 break;
404
405 // custom
406 case Op_CUSTOM:
Kevin Chengacb550f2021-06-29 15:32:19 -0700407 return new OpCustom(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700408
409 // control_flow
410 case Op_COND_IF:
Kevin Chengacb550f2021-06-29 15:32:19 -0700411 return new OpCondIf(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700412 case Op_WHILE_LOOP:
Kevin Chengacb550f2021-06-29 15:32:19 -0700413 return new OpWhileLoop(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700414
415 // Ops not recognized
416 default:
417 goto done;
418
419 } // End of switch(opType)
420
421done:
422 return nullptr;
423}