blob: d42c84a889d5a7e23473daa0fa5d18483491fd60 [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,
39 TosaQuantInfoBase* qinfo,
40 uint64_t id,
41 DType inputDType,
42 int inputRank,
43 DType outputDType,
44 int outputRank,
45 DType weightDType,
46 int weightRank)
47{
48 switch (opType)
49 {
50 // tensor_ops
51 case Op_ARGMAX:
52 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080053 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070054 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, INT16);
55 break;
56 case Op_AVG_POOL2D:
57 DEF_FACTORY_ONE_TYPE(OpAvgPool2d, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080058 DEF_FACTORY_ONE_TYPE(OpAvgPool2d, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070059 DEF_FACTORY_ONE_TYPE(OpAvgPool2d, INT16);
60 break;
61 case Op_CONV2D:
62 DEF_FACTORY_TWO_TYPE(OpConv2d, FLOAT, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080063 DEF_FACTORY_TWO_TYPE(OpConv2d, INT8, INT4);
64 DEF_FACTORY_TWO_TYPE(OpConv2d, INT8, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070065 DEF_FACTORY_TWO_TYPE(OpConv2d, INT16, INT8);
66 break;
Kevin Cheng1533b852021-09-01 12:51:58 -070067 case Op_CONV3D:
68 DEF_FACTORY_TWO_TYPE(OpConv3d, FLOAT, FLOAT);
69 DEF_FACTORY_TWO_TYPE(OpConv3d, INT8, INT4);
70 DEF_FACTORY_TWO_TYPE(OpConv3d, INT8, INT8);
71 DEF_FACTORY_TWO_TYPE(OpConv3d, INT16, INT8);
72 break;
Eric Kunzee5e26762020-10-13 16:11:07 -070073 case Op_DEPTHWISE_CONV2D:
74 DEF_FACTORY_TWO_TYPE(OpDepthwiseConv2d, FLOAT, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080075 DEF_FACTORY_TWO_TYPE(OpDepthwiseConv2d, INT8, INT4);
76 DEF_FACTORY_TWO_TYPE(OpDepthwiseConv2d, INT8, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070077 DEF_FACTORY_TWO_TYPE(OpDepthwiseConv2d, INT16, INT8);
78 break;
79 case Op_FULLY_CONNECTED:
80 DEF_FACTORY_TWO_TYPE(OpFullyConnected, FLOAT, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080081 DEF_FACTORY_TWO_TYPE(OpFullyConnected, INT8, INT4);
82 DEF_FACTORY_TWO_TYPE(OpFullyConnected, INT8, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070083 DEF_FACTORY_TWO_TYPE(OpFullyConnected, INT16, INT8);
84 break;
85 case Op_MATMUL:
86 DEF_FACTORY_ONE_TYPE(OpMatMul, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080087 DEF_FACTORY_ONE_TYPE(OpMatMul, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070088 DEF_FACTORY_ONE_TYPE(OpMatMul, INT16);
89 break;
90 case Op_MAX_POOL2D:
91 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080092 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070093 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT16);
94 break;
95 case Op_TRANSPOSE_CONV2D:
96 DEF_FACTORY_TWO_TYPE(OpTransposeConv2d, FLOAT, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -080097 DEF_FACTORY_TWO_TYPE(OpTransposeConv2d, INT8, INT4);
98 DEF_FACTORY_TWO_TYPE(OpTransposeConv2d, INT8, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070099 DEF_FACTORY_TWO_TYPE(OpTransposeConv2d, INT16, INT8);
100 break;
101
102 // activation_funcs
103 case Op_CLAMP:
104 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -0800105 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700106 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT16);
107 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700108 case Op_SIGMOID:
109 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FLOAT);
110 break;
111 case Op_TANH:
112 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FLOAT);
113 break;
114
115 // ewise_binary
116 case Op_ADD:
117 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FLOAT);
118 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, INT32);
119 break;
120 case Op_ARITHMETIC_RIGHT_SHIFT:
121 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT8);
122 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT16);
123 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT32);
124 break;
125 case Op_BITWISE_AND:
Kevin Cheng3a478572021-01-22 17:21:02 -0800126 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700127 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT16);
128 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT32);
129 break;
130 case Op_BITWISE_OR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800131 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700132 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT16);
133 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT32);
134 break;
135 case Op_BITWISE_XOR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800136 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700137 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT16);
138 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT32);
139 break;
Matthew Haddon459443c2021-08-23 16:43:13 +0100140 case Op_INTDIV:
141 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIntdiv, INT32);
Kevin Cheng14d7f7a2021-05-12 10:44:49 -0700142 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700143 case Op_LOGICAL_AND:
144 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalAnd, BOOL);
145 break;
146 case Op_LOGICAL_LEFT_SHIFT:
147 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT8);
148 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT16);
149 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT32);
150 break;
151 case Op_LOGICAL_RIGHT_SHIFT:
152 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT8);
153 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT16);
154 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT32);
155 break;
156 case Op_LOGICAL_OR:
157 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalOr, BOOL);
158 break;
159 case Op_LOGICAL_XOR:
Jeremy Johnson615feee2022-03-10 16:00:49 +0000160 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalXor, BOOL);
Eric Kunzee5e26762020-10-13 16:11:07 -0700161 break;
162 case Op_MAXIMUM:
163 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FLOAT);
164 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, INT32);
165 break;
166 case Op_MINIMUM:
167 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FLOAT);
168 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, INT32);
169 break;
170 case Op_MUL:
171 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FLOAT, FLOAT);
172 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT8, INT32);
173 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT16, INT32);
174 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT32, INT32);
175 break;
176 case Op_POW:
177 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FLOAT);
178 break;
179 case Op_SUB:
180 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FLOAT);
181 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, INT32);
182 break;
183 case Op_TABLE:
Kevin Cheng571f7182021-05-24 17:20:01 -0700184 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT8);
185 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700186 break;
187
188 // ewise_unary
189 case Op_ABS:
190 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FLOAT);
191 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, INT32);
192 break;
193 case Op_BITWISE_NOT:
Kevin Cheng3a478572021-01-22 17:21:02 -0800194 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700195 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT16);
196 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT32);
197 break;
198 case Op_CEIL:
199 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FLOAT);
200 break;
201 case Op_CLZ:
202 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClz, INT32);
203 break;
204 case Op_EXP:
205 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FLOAT);
206 break;
207 case Op_FLOOR:
208 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FLOAT);
209 break;
210 case Op_LOG:
211 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FLOAT);
212 break;
213 case Op_LOGICAL_NOT:
214 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalNot, BOOL);
215 break;
216 case Op_NEGATE:
217 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -0800218 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700219 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT16);
220 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT32);
221 break;
222 case Op_RECIPROCAL:
223 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FLOAT);
224 break;
225 case Op_RSQRT:
226 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FLOAT);
227 break;
228
229 // ewise_ternary
230 case Op_SELECT:
231 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700232 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT8);
233 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT16);
234 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT32);
235 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BOOL);
236 break;
237
238 // comparison
239 case Op_EQUAL:
240 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FLOAT);
241 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, INT32);
242 break;
243 case Op_GREATER:
244 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FLOAT);
245 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, INT32);
246 break;
247 case Op_GREATER_EQUAL:
248 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FLOAT);
249 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, INT32);
250 break;
251
252 // reduction
253 case Op_REDUCE_ALL:
254 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAll, BOOL);
255 break;
256 case Op_REDUCE_ANY:
257 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAny, BOOL);
258 break;
259 case Op_REDUCE_MAX:
260 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -0800261 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700262 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT16);
263 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT32);
264 break;
265 case Op_REDUCE_MIN:
266 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FLOAT);
Kevin Cheng3a478572021-01-22 17:21:02 -0800267 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700268 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT16);
269 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT32);
270 break;
271 case Op_REDUCE_PRODUCT:
272 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FLOAT);
273 break;
274 case Op_REDUCE_SUM:
275 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FLOAT);
276 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, INT32);
277 break;
278
279 // data layout
280 case Op_CONCAT:
281 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700282 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT8);
283 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT16);
284 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT32);
285 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BOOL);
286 break;
287 case Op_PAD:
288 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FLOAT);
289 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700290 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT8);
291 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT16);
292 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BOOL);
293 break;
294 case Op_RESHAPE:
295 DEF_FACTORY_RESHAPE(OpReshape, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700296 DEF_FACTORY_RESHAPE(OpReshape, INT8);
297 DEF_FACTORY_RESHAPE(OpReshape, INT16);
298 DEF_FACTORY_RESHAPE(OpReshape, INT32);
299 DEF_FACTORY_RESHAPE(OpReshape, BOOL);
300 break;
301 case Op_REVERSE:
302 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700303 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT8);
304 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT16);
305 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT32);
306 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BOOL);
307 break;
308 case Op_SLICE:
309 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700310 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT8);
311 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT16);
312 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT32);
313 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, BOOL);
314 break;
315 case Op_TILE:
316 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700317 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT8);
318 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT16);
319 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT32);
320 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, BOOL);
321 break;
322 case Op_TRANSPOSE:
323 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, BOOL);
324 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700325 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT8);
326 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT16);
327 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT32);
328 break;
329
330 // scatter_gather
331 case Op_GATHER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800332 DEF_FACTORY_ONE_TYPE(OpGather, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800333 DEF_FACTORY_ONE_TYPE(OpGather, INT16);
334 DEF_FACTORY_ONE_TYPE(OpGather, INT32);
335 DEF_FACTORY_ONE_TYPE(OpGather, FLOAT);
336 break;
337 case Op_SCATTER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800338 DEF_FACTORY_ONE_TYPE(OpScatter, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800339 DEF_FACTORY_ONE_TYPE(OpScatter, INT16);
340 DEF_FACTORY_ONE_TYPE(OpScatter, INT32);
341 DEF_FACTORY_ONE_TYPE(OpScatter, FLOAT);
342 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700343
344 // image
345 case Op_RESIZE:
346 DEF_FACTORY_TWO_TYPE_RESIZE(OpResize, INT8, INT32);
347 DEF_FACTORY_TWO_TYPE_RESIZE(OpResize, INT8, INT8);
348 DEF_FACTORY_TWO_TYPE_RESIZE(OpResize, INT16, INT48);
349 DEF_FACTORY_TWO_TYPE_RESIZE(OpResize, INT16, INT16);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800350 DEF_FACTORY_TWO_TYPE_RESIZE(OpResize, FLOAT, FLOAT);
Eric Kunzee5e26762020-10-13 16:11:07 -0700351 break;
352
353 // data_nodes
354 case Op_CONST:
Kevin Chengacb550f2021-06-29 15:32:19 -0700355 return new OpConst(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700356 case Op_IDENTITY:
357 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FLOAT);
358 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700359 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT8);
360 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT16);
361 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BOOL);
362 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700363
364 // type_conversion
365 case Op_CAST:
366 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT8);
367 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT16);
368 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT32);
369 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BOOL);
370 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT16);
371 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT32);
372 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FLOAT);
373 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BOOL);
374 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT8);
375 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT32);
376 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FLOAT);
377 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BOOL);
378 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT8);
379 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT16);
380 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FLOAT);
381 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FLOAT, INT8);
382 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FLOAT, INT16);
383 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FLOAT, INT32);
384 break;
385 case Op_RESCALE:
Kevin Cheng3a478572021-01-22 17:21:02 -0800386 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT8);
387 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT16);
388 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT32);
389 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700390 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT16);
391 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800392 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700393 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT16);
394 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800395 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700396 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT16);
397 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800398 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT8);
399 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, UINT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700400 break;
401
402 // custom
403 case Op_CUSTOM:
Kevin Chengacb550f2021-06-29 15:32:19 -0700404 return new OpCustom(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700405
406 // control_flow
407 case Op_COND_IF:
Kevin Chengacb550f2021-06-29 15:32:19 -0700408 return new OpCondIf(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700409 case Op_WHILE_LOOP:
Kevin Chengacb550f2021-06-29 15:32:19 -0700410 return new OpWhileLoop(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700411
412 // Ops not recognized
413 default:
414 goto done;
415
416 } // End of switch(opType)
417
418done:
419 return nullptr;
420}