blob: 1db39746f57b5a005fc4b72dce729b22b4a3cdca [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 Wardd34b3fc2023-01-18 14:51:25 +000066 DEF_FACTORY_THREE_TYPE(OpConv2d, FP16, FP16, FP16);
67 DEF_FACTORY_THREE_TYPE(OpConv2d, FP16, FP16, FP32);
68 DEF_FACTORY_THREE_TYPE(OpConv2d, BF16, BF16, FP32);
69 DEF_FACTORY_THREE_TYPE(OpConv2d, FP32, FP32, FP32);
70 DEF_FACTORY_THREE_TYPE(OpConv2d, INT8, INT4, INT32);
71 DEF_FACTORY_THREE_TYPE(OpConv2d, INT8, INT8, INT32);
72 DEF_FACTORY_THREE_TYPE(OpConv2d, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -070073 break;
Kevin Cheng1533b852021-09-01 12:51:58 -070074 case Op_CONV3D:
James Wardd34b3fc2023-01-18 14:51:25 +000075 DEF_FACTORY_THREE_TYPE(OpConv3d, FP16, FP16, FP16);
76 DEF_FACTORY_THREE_TYPE(OpConv3d, FP16, FP16, FP32);
77 DEF_FACTORY_THREE_TYPE(OpConv3d, BF16, BF16, FP32);
78 DEF_FACTORY_THREE_TYPE(OpConv3d, FP32, FP32, FP32);
79 DEF_FACTORY_THREE_TYPE(OpConv3d, INT8, INT4, INT32);
80 DEF_FACTORY_THREE_TYPE(OpConv3d, INT8, INT8, INT32);
81 DEF_FACTORY_THREE_TYPE(OpConv3d, 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 Wardd34b3fc2023-01-18 14:51:25 +000084 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, FP16, FP16, FP16);
85 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, FP16, FP16, FP32);
86 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, BF16, BF16, FP32);
87 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, FP32, FP32, FP32);
88 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, INT8, INT4, INT32);
89 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, INT8, INT8, INT32);
90 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -070091 break;
Luke Hutton57287132023-02-06 14:54:18 +000092 case Op_FFT2D:
93 DEF_FACTORY_ONE_TYPE(OpFFT2d, FP32);
94 break;
Eric Kunzee5e26762020-10-13 16:11:07 -070095 case Op_FULLY_CONNECTED:
James Wardd34b3fc2023-01-18 14:51:25 +000096 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP16, FP16, FP16);
97 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP16, FP16, FP32);
98 DEF_FACTORY_THREE_TYPE(OpFullyConnected, BF16, BF16, FP32);
99 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP32, FP32, FP32);
100 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT8, INT4, INT32);
101 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT8, INT8, INT32);
102 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -0700103 break;
104 case Op_MATMUL:
James Wardd34b3fc2023-01-18 14:51:25 +0000105 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP16, FP16);
106 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP16, FP32);
107 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, BF16, FP32);
108 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP32, FP32);
109 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, INT8, INT32);
110 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, INT16, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -0700111 break;
112 case Op_MAX_POOL2D:
James Ward8b390432022-08-12 20:48:56 +0100113 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100114 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100115 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800116 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700117 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT16);
118 break;
Luke Hutton261b7b62023-01-10 14:50:31 +0000119 case Op_RFFT2D:
120 DEF_FACTORY_ONE_TYPE(OpRFFT2d, FP32);
121 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700122 case Op_TRANSPOSE_CONV2D:
James Wardd34b3fc2023-01-18 14:51:25 +0000123 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, FP16, FP16, FP16);
124 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, FP16, FP16, FP32);
125 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, BF16, BF16, FP32);
126 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, FP32, FP32, FP32);
127 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, INT8, INT4, INT32);
128 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, INT8, INT8, INT32);
129 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -0700130 break;
131
132 // activation_funcs
133 case Op_CLAMP:
James Ward8b390432022-08-12 20:48:56 +0100134 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100135 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100136 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800137 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700138 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT16);
139 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700140 case Op_SIGMOID:
James Ward8b390432022-08-12 20:48:56 +0100141 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100142 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100143 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700144 break;
145 case Op_TANH:
James Ward8b390432022-08-12 20:48:56 +0100146 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100147 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100148 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700149 break;
150
151 // ewise_binary
152 case Op_ADD:
James Ward8b390432022-08-12 20:48:56 +0100153 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100154 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100155 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700156 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, INT32);
157 break;
158 case Op_ARITHMETIC_RIGHT_SHIFT:
159 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT8);
160 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT16);
161 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT32);
162 break;
163 case Op_BITWISE_AND:
Kevin Cheng3a478572021-01-22 17:21:02 -0800164 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700165 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT16);
166 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT32);
167 break;
168 case Op_BITWISE_OR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800169 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700170 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT16);
171 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT32);
172 break;
173 case Op_BITWISE_XOR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800174 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700175 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT16);
176 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT32);
177 break;
Matthew Haddon459443c2021-08-23 16:43:13 +0100178 case Op_INTDIV:
179 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIntdiv, INT32);
Kevin Cheng14d7f7a2021-05-12 10:44:49 -0700180 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700181 case Op_LOGICAL_AND:
182 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalAnd, BOOL);
183 break;
184 case Op_LOGICAL_LEFT_SHIFT:
185 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT8);
186 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT16);
187 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT32);
188 break;
189 case Op_LOGICAL_RIGHT_SHIFT:
190 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT8);
191 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT16);
192 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT32);
193 break;
194 case Op_LOGICAL_OR:
195 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalOr, BOOL);
196 break;
197 case Op_LOGICAL_XOR:
Jeremy Johnson615feee2022-03-10 16:00:49 +0000198 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalXor, BOOL);
Eric Kunzee5e26762020-10-13 16:11:07 -0700199 break;
200 case Op_MAXIMUM:
James Ward8b390432022-08-12 20:48:56 +0100201 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100202 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100203 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700204 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, INT32);
205 break;
206 case Op_MINIMUM:
James Ward8b390432022-08-12 20:48:56 +0100207 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100208 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100209 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700210 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, INT32);
211 break;
212 case Op_MUL:
James Ward8b390432022-08-12 20:48:56 +0100213 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP16, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100214 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, BF16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100215 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP32, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700216 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT8, INT32);
217 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT16, INT32);
218 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT32, INT32);
219 break;
220 case Op_POW:
James Ward8b390432022-08-12 20:48:56 +0100221 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100222 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100223 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700224 break;
225 case Op_SUB:
James Ward8b390432022-08-12 20:48:56 +0100226 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100227 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100228 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700229 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, INT32);
230 break;
231 case Op_TABLE:
Kevin Cheng571f7182021-05-24 17:20:01 -0700232 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT8);
233 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700234 break;
235
236 // ewise_unary
237 case Op_ABS:
James Ward8b390432022-08-12 20:48:56 +0100238 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100239 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100240 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700241 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, INT32);
242 break;
243 case Op_BITWISE_NOT:
Kevin Cheng3a478572021-01-22 17:21:02 -0800244 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700245 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT16);
246 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT32);
247 break;
248 case Op_CEIL:
James Ward8b390432022-08-12 20:48:56 +0100249 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100250 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100251 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700252 break;
253 case Op_CLZ:
254 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClz, INT32);
255 break;
256 case Op_EXP:
James Ward8b390432022-08-12 20:48:56 +0100257 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100258 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100259 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700260 break;
261 case Op_FLOOR:
James Ward8b390432022-08-12 20:48:56 +0100262 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100263 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100264 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700265 break;
266 case Op_LOG:
James Ward8b390432022-08-12 20:48:56 +0100267 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100268 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100269 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700270 break;
271 case Op_LOGICAL_NOT:
272 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalNot, BOOL);
273 break;
274 case Op_NEGATE:
James Ward8b390432022-08-12 20:48:56 +0100275 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100276 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100277 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800278 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700279 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT16);
280 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT32);
281 break;
282 case Op_RECIPROCAL:
James Ward8b390432022-08-12 20:48:56 +0100283 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100284 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100285 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700286 break;
287 case Op_RSQRT:
James Ward8b390432022-08-12 20:48:56 +0100288 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100289 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100290 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700291 break;
292
293 // ewise_ternary
294 case Op_SELECT:
James Ward8b390432022-08-12 20:48:56 +0100295 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100296 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100297 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700298 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT8);
299 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT16);
300 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT32);
301 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BOOL);
302 break;
303
304 // comparison
305 case Op_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100306 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100307 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100308 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700309 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, INT32);
310 break;
311 case Op_GREATER:
James Ward8b390432022-08-12 20:48:56 +0100312 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100313 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100314 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700315 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, INT32);
316 break;
317 case Op_GREATER_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100318 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100319 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100320 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700321 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, INT32);
322 break;
323
324 // reduction
325 case Op_REDUCE_ALL:
326 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAll, BOOL);
327 break;
328 case Op_REDUCE_ANY:
329 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAny, BOOL);
330 break;
331 case Op_REDUCE_MAX:
James Ward8b390432022-08-12 20:48:56 +0100332 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100333 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100334 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800335 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700336 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT16);
337 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT32);
338 break;
339 case Op_REDUCE_MIN:
James Ward8b390432022-08-12 20:48:56 +0100340 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100341 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100342 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800343 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700344 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT16);
345 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT32);
346 break;
347 case Op_REDUCE_PRODUCT:
James Ward8b390432022-08-12 20:48:56 +0100348 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100349 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100350 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700351 break;
352 case Op_REDUCE_SUM:
James Ward8b390432022-08-12 20:48:56 +0100353 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100354 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100355 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP32);
Jeremy Johnson7de9b452022-04-05 14:31:37 +0100356 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSumInt, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700357 break;
358
359 // data layout
360 case Op_CONCAT:
James Ward8b390432022-08-12 20:48:56 +0100361 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100362 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100363 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700364 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT8);
365 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT16);
366 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT32);
367 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BOOL);
368 break;
369 case Op_PAD:
James Ward8b390432022-08-12 20:48:56 +0100370 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100371 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100372 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700373 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700374 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT8);
375 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT16);
376 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BOOL);
377 break;
378 case Op_RESHAPE:
James Ward8b390432022-08-12 20:48:56 +0100379 DEF_FACTORY_RESHAPE(OpReshape, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100380 DEF_FACTORY_RESHAPE(OpReshape, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100381 DEF_FACTORY_RESHAPE(OpReshape, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700382 DEF_FACTORY_RESHAPE(OpReshape, INT8);
383 DEF_FACTORY_RESHAPE(OpReshape, INT16);
384 DEF_FACTORY_RESHAPE(OpReshape, INT32);
385 DEF_FACTORY_RESHAPE(OpReshape, BOOL);
386 break;
387 case Op_REVERSE:
James Ward8b390432022-08-12 20:48:56 +0100388 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100389 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100390 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700391 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT8);
392 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT16);
393 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT32);
394 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BOOL);
395 break;
396 case Op_SLICE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000397 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP16);
398 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, BF16);
399 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP32);
400 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT8);
401 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT16);
402 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT32);
403 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, BOOL);
Eric Kunzee5e26762020-10-13 16:11:07 -0700404 break;
405 case Op_TILE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000406 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP16);
407 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, BF16);
408 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP32);
409 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT8);
410 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT16);
411 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT32);
412 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, BOOL);
Eric Kunzee5e26762020-10-13 16:11:07 -0700413 break;
414 case Op_TRANSPOSE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000415 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, BOOL);
416 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP16);
417 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, BF16);
418 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP32);
419 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT8);
420 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT16);
421 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700422 break;
423
424 // scatter_gather
425 case Op_GATHER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800426 DEF_FACTORY_ONE_TYPE(OpGather, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800427 DEF_FACTORY_ONE_TYPE(OpGather, INT16);
428 DEF_FACTORY_ONE_TYPE(OpGather, INT32);
James Ward8b390432022-08-12 20:48:56 +0100429 DEF_FACTORY_ONE_TYPE(OpGather, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100430 DEF_FACTORY_ONE_TYPE(OpGather, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100431 DEF_FACTORY_ONE_TYPE(OpGather, FP32);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800432 break;
433 case Op_SCATTER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800434 DEF_FACTORY_ONE_TYPE(OpScatter, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800435 DEF_FACTORY_ONE_TYPE(OpScatter, INT16);
436 DEF_FACTORY_ONE_TYPE(OpScatter, INT32);
James Ward8b390432022-08-12 20:48:56 +0100437 DEF_FACTORY_ONE_TYPE(OpScatter, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100438 DEF_FACTORY_ONE_TYPE(OpScatter, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100439 DEF_FACTORY_ONE_TYPE(OpScatter, FP32);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800440 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700441
442 // image
443 case Op_RESIZE:
TatWai Chongf7326092022-06-08 12:17:14 -0700444 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT32);
445 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT8);
446 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT48);
447 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT16);
James Ward8b390432022-08-12 20:48:56 +0100448 DEF_FACTORY_TWO_TYPE_RESIZE_FP16(OpResize, FP16, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100449 DEF_FACTORY_TWO_TYPE_RESIZE_BF16(OpResize, BF16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100450 DEF_FACTORY_TWO_TYPE_RESIZE_FP32(OpResize, FP32, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700451 break;
452
453 // data_nodes
454 case Op_CONST:
Kevin Chengacb550f2021-06-29 15:32:19 -0700455 return new OpConst(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700456 case Op_IDENTITY:
James Ward8b390432022-08-12 20:48:56 +0100457 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100458 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100459 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700460 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700461 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT8);
462 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT16);
463 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BOOL);
464 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700465
466 // type_conversion
467 case Op_CAST:
468 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT8);
469 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT16);
470 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT32);
471 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BOOL);
472 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT16);
473 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT32);
James Ward8b390432022-08-12 20:48:56 +0100474 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000475 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100476 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700477 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BOOL);
478 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT8);
479 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT32);
James Ward8b390432022-08-12 20:48:56 +0100480 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000481 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100482 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700483 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BOOL);
484 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT8);
485 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT16);
James Ward8b390432022-08-12 20:48:56 +0100486 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000487 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100488 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP32);
James Ward8b390432022-08-12 20:48:56 +0100489 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT8);
490 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT16);
491 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000492 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +0100493 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT8);
494 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT16);
495 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000496 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100497 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT8);
498 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT16);
499 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000500 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, FP16);
501 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, BF16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700502 break;
503 case Op_RESCALE:
Kevin Cheng3a478572021-01-22 17:21:02 -0800504 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT8);
505 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT16);
506 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT32);
507 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700508 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT16);
509 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800510 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700511 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT16);
512 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800513 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700514 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT16);
515 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800516 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100517 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT16);
518 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT16, INT16);
Kevin Cheng3a478572021-01-22 17:21:02 -0800519 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, UINT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100520 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT8);
521 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700522 break;
523
524 // custom
525 case Op_CUSTOM:
Kevin Chengacb550f2021-06-29 15:32:19 -0700526 return new OpCustom(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700527
528 // control_flow
529 case Op_COND_IF:
Kevin Chengacb550f2021-06-29 15:32:19 -0700530 return new OpCondIf(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700531 case Op_WHILE_LOOP:
Kevin Chengacb550f2021-06-29 15:32:19 -0700532 return new OpWhileLoop(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700533
534 // Ops not recognized
535 default:
536 goto done;
537
538 } // End of switch(opType)
539
540done:
541 return nullptr;
542}