blob: d834b74b6a3737255d65c52712f3dc4784e1b343 [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,
Tai Lya4d748b2023-03-28 22:06:56 +000040 TOSA_REF_TYPE inputDTYPE,
Eric Kunzee5e26762020-10-13 16:11:07 -070041 int inputRank,
Tai Lya4d748b2023-03-28 22:06:56 +000042 TOSA_REF_TYPE outputDTYPE,
Eric Kunzee5e26762020-10-13 16:11:07 -070043 int outputRank,
Tai Lya4d748b2023-03-28 22:06:56 +000044 TOSA_REF_TYPE weightDTYPE,
Eric Kunzee5e26762020-10-13 16:11:07 -070045 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);
Tai Lya4d748b2023-03-28 22:06:56 +000056 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -070057 break;
58 case Op_AVG_POOL2D:
James Ward8b390432022-08-12 20:48:56 +010059 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010060 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +010061 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010062 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010063 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, INT8, INT32);
64 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, INT16, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +000065 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -070066 break;
67 case Op_CONV2D:
James Wardd34b3fc2023-01-18 14:51:25 +000068 DEF_FACTORY_THREE_TYPE(OpConv2d, FP16, FP16, FP16);
69 DEF_FACTORY_THREE_TYPE(OpConv2d, FP16, FP16, FP32);
70 DEF_FACTORY_THREE_TYPE(OpConv2d, BF16, BF16, FP32);
71 DEF_FACTORY_THREE_TYPE(OpConv2d, FP32, FP32, FP32);
72 DEF_FACTORY_THREE_TYPE(OpConv2d, INT8, INT4, INT32);
73 DEF_FACTORY_THREE_TYPE(OpConv2d, INT8, INT8, INT32);
74 DEF_FACTORY_THREE_TYPE(OpConv2d, INT16, INT8, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +000075 DEF_FACTORY_THREE_TYPE(OpConv2d, FP64, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -070076 break;
Kevin Cheng1533b852021-09-01 12:51:58 -070077 case Op_CONV3D:
James Wardd34b3fc2023-01-18 14:51:25 +000078 DEF_FACTORY_THREE_TYPE(OpConv3d, FP16, FP16, FP16);
79 DEF_FACTORY_THREE_TYPE(OpConv3d, FP16, FP16, FP32);
80 DEF_FACTORY_THREE_TYPE(OpConv3d, BF16, BF16, FP32);
81 DEF_FACTORY_THREE_TYPE(OpConv3d, FP32, FP32, FP32);
82 DEF_FACTORY_THREE_TYPE(OpConv3d, INT8, INT4, INT32);
83 DEF_FACTORY_THREE_TYPE(OpConv3d, INT8, INT8, INT32);
84 DEF_FACTORY_THREE_TYPE(OpConv3d, INT16, INT8, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +000085 DEF_FACTORY_THREE_TYPE(OpConv3d, FP64, FP64, FP64);
Kevin Cheng1533b852021-09-01 12:51:58 -070086 break;
Eric Kunzee5e26762020-10-13 16:11:07 -070087 case Op_DEPTHWISE_CONV2D:
James Wardd34b3fc2023-01-18 14:51:25 +000088 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, FP16, FP16, FP16);
89 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, FP16, FP16, FP32);
90 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, BF16, BF16, FP32);
91 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, FP32, FP32, FP32);
92 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, INT8, INT4, INT32);
93 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, INT8, INT8, INT32);
94 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, INT16, INT8, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +000095 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, FP64, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -070096 break;
Luke Hutton57287132023-02-06 14:54:18 +000097 case Op_FFT2D:
98 DEF_FACTORY_ONE_TYPE(OpFFT2d, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +000099 DEF_FACTORY_ONE_TYPE(OpFFT2d, FP64);
Luke Hutton57287132023-02-06 14:54:18 +0000100 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700101 case Op_FULLY_CONNECTED:
James Wardd34b3fc2023-01-18 14:51:25 +0000102 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP16, FP16, FP16);
103 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP16, FP16, FP32);
104 DEF_FACTORY_THREE_TYPE(OpFullyConnected, BF16, BF16, FP32);
105 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP32, FP32, FP32);
106 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT8, INT4, INT32);
107 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT8, INT8, INT32);
108 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT16, INT8, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +0000109 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP64, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700110 break;
111 case Op_MATMUL:
James Wardd34b3fc2023-01-18 14:51:25 +0000112 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP16, FP16);
113 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP16, FP32);
114 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, BF16, FP32);
115 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP32, FP32);
116 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, INT8, INT32);
117 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, INT16, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +0000118 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700119 break;
120 case Op_MAX_POOL2D:
James Ward8b390432022-08-12 20:48:56 +0100121 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100122 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100123 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800124 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700125 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT16);
Tai Lya4d748b2023-03-28 22:06:56 +0000126 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700127 break;
Luke Hutton261b7b62023-01-10 14:50:31 +0000128 case Op_RFFT2D:
129 DEF_FACTORY_ONE_TYPE(OpRFFT2d, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000130 DEF_FACTORY_ONE_TYPE(OpRFFT2d, FP64);
Luke Hutton261b7b62023-01-10 14:50:31 +0000131 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700132 case Op_TRANSPOSE_CONV2D:
James Wardd34b3fc2023-01-18 14:51:25 +0000133 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, FP16, FP16, FP16);
134 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, FP16, FP16, FP32);
135 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, BF16, BF16, FP32);
136 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, FP32, FP32, FP32);
137 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, INT8, INT4, INT32);
138 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, INT8, INT8, INT32);
139 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, INT16, INT8, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +0000140 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, FP64, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700141 break;
142
143 // activation_funcs
144 case Op_CLAMP:
James Ward8b390432022-08-12 20:48:56 +0100145 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100146 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100147 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800148 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700149 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT16);
Tai Lya4d748b2023-03-28 22:06:56 +0000150 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700151 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700152 case Op_SIGMOID:
James Ward8b390432022-08-12 20:48:56 +0100153 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100154 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100155 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000156 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700157 break;
158 case Op_TANH:
James Ward8b390432022-08-12 20:48:56 +0100159 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100160 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100161 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000162 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700163 break;
Won Jeon78155c62023-06-10 00:20:04 +0000164 case Op_ERF:
165 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, FP16);
166 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, BF16);
167 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, FP32);
168 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, FP64);
169 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700170
171 // ewise_binary
172 case Op_ADD:
James Ward8b390432022-08-12 20:48:56 +0100173 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100174 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100175 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700176 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000177 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700178 break;
179 case Op_ARITHMETIC_RIGHT_SHIFT:
180 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT8);
181 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT16);
182 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT32);
183 break;
184 case Op_BITWISE_AND:
Kevin Cheng3a478572021-01-22 17:21:02 -0800185 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700186 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT16);
187 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT32);
188 break;
189 case Op_BITWISE_OR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800190 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700191 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT16);
192 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT32);
193 break;
194 case Op_BITWISE_XOR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800195 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700196 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT16);
197 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT32);
198 break;
Matthew Haddon459443c2021-08-23 16:43:13 +0100199 case Op_INTDIV:
200 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIntdiv, INT32);
Kevin Cheng14d7f7a2021-05-12 10:44:49 -0700201 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700202 case Op_LOGICAL_AND:
203 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalAnd, BOOL);
204 break;
205 case Op_LOGICAL_LEFT_SHIFT:
206 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT8);
207 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT16);
208 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT32);
209 break;
210 case Op_LOGICAL_RIGHT_SHIFT:
211 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT8);
212 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT16);
213 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT32);
214 break;
215 case Op_LOGICAL_OR:
216 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalOr, BOOL);
217 break;
218 case Op_LOGICAL_XOR:
Jeremy Johnson615feee2022-03-10 16:00:49 +0000219 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalXor, BOOL);
Eric Kunzee5e26762020-10-13 16:11:07 -0700220 break;
221 case Op_MAXIMUM:
James Ward8b390432022-08-12 20:48:56 +0100222 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100223 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100224 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700225 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000226 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700227 break;
228 case Op_MINIMUM:
James Ward8b390432022-08-12 20:48:56 +0100229 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100230 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100231 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700232 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000233 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700234 break;
235 case Op_MUL:
James Ward8b390432022-08-12 20:48:56 +0100236 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP16, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100237 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, BF16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100238 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP32, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700239 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT8, INT32);
240 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT16, INT32);
241 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT32, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000242 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700243 break;
244 case Op_POW:
James Ward8b390432022-08-12 20:48:56 +0100245 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100246 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100247 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000248 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700249 break;
250 case Op_SUB:
James Ward8b390432022-08-12 20:48:56 +0100251 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100252 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100253 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700254 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000255 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700256 break;
257 case Op_TABLE:
Kevin Cheng571f7182021-05-24 17:20:01 -0700258 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT8);
259 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700260 break;
261
262 // ewise_unary
263 case Op_ABS:
James Ward8b390432022-08-12 20:48:56 +0100264 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100265 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100266 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700267 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000268 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700269 break;
270 case Op_BITWISE_NOT:
Kevin Cheng3a478572021-01-22 17:21:02 -0800271 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700272 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT16);
273 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT32);
274 break;
275 case Op_CEIL:
James Ward8b390432022-08-12 20:48:56 +0100276 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100277 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100278 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000279 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700280 break;
281 case Op_CLZ:
282 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClz, INT32);
283 break;
284 case Op_EXP:
James Ward8b390432022-08-12 20:48:56 +0100285 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100286 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100287 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000288 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700289 break;
290 case Op_FLOOR:
James Ward8b390432022-08-12 20:48:56 +0100291 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100292 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100293 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000294 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700295 break;
296 case Op_LOG:
James Ward8b390432022-08-12 20:48:56 +0100297 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100298 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100299 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000300 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700301 break;
302 case Op_LOGICAL_NOT:
303 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalNot, BOOL);
304 break;
305 case Op_NEGATE:
James Ward8b390432022-08-12 20:48:56 +0100306 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100307 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100308 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800309 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700310 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT16);
311 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000312 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700313 break;
314 case Op_RECIPROCAL:
James Ward8b390432022-08-12 20:48:56 +0100315 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100316 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100317 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000318 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700319 break;
320 case Op_RSQRT:
James Ward8b390432022-08-12 20:48:56 +0100321 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100322 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100323 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000324 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700325 break;
326
327 // ewise_ternary
328 case Op_SELECT:
James Ward8b390432022-08-12 20:48:56 +0100329 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100330 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100331 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700332 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT8);
333 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT16);
334 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT32);
335 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000336 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700337 break;
338
339 // comparison
340 case Op_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100341 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100342 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100343 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700344 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000345 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700346 break;
347 case Op_GREATER:
James Ward8b390432022-08-12 20:48:56 +0100348 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100349 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100350 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700351 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000352 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700353 break;
354 case Op_GREATER_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100355 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100356 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100357 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700358 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000359 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700360 break;
361
362 // reduction
363 case Op_REDUCE_ALL:
364 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAll, BOOL);
365 break;
366 case Op_REDUCE_ANY:
367 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAny, BOOL);
368 break;
369 case Op_REDUCE_MAX:
James Ward8b390432022-08-12 20:48:56 +0100370 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100371 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100372 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800373 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700374 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT16);
375 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000376 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700377 break;
378 case Op_REDUCE_MIN:
James Ward8b390432022-08-12 20:48:56 +0100379 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100380 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100381 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800382 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700383 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT16);
384 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000385 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700386 break;
387 case Op_REDUCE_PRODUCT:
James Ward8b390432022-08-12 20:48:56 +0100388 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100389 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100390 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000391 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProductDouble, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700392 break;
393 case Op_REDUCE_SUM:
James Ward8b390432022-08-12 20:48:56 +0100394 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100395 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100396 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000397 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSumDouble, FP64);
Jeremy Johnson7de9b452022-04-05 14:31:37 +0100398 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSumInt, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700399 break;
400
401 // data layout
402 case Op_CONCAT:
James Ward8b390432022-08-12 20:48:56 +0100403 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100404 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100405 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700406 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT8);
407 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT16);
408 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT32);
409 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000410 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700411 break;
412 case Op_PAD:
James Ward8b390432022-08-12 20:48:56 +0100413 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100414 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100415 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700416 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700417 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT8);
418 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT16);
419 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000420 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700421 break;
Won Jeona21b2e82023-08-10 10:33:01 +0000422 case Op_DIM:
423 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, FP16);
424 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, BF16);
425 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, FP32);
426 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, INT32);
427 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, INT8);
428 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, INT16);
429 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, BOOL);
430 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700431 case Op_RESHAPE:
James Ward8b390432022-08-12 20:48:56 +0100432 DEF_FACTORY_RESHAPE(OpReshape, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100433 DEF_FACTORY_RESHAPE(OpReshape, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100434 DEF_FACTORY_RESHAPE(OpReshape, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700435 DEF_FACTORY_RESHAPE(OpReshape, INT8);
436 DEF_FACTORY_RESHAPE(OpReshape, INT16);
437 DEF_FACTORY_RESHAPE(OpReshape, INT32);
438 DEF_FACTORY_RESHAPE(OpReshape, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000439 DEF_FACTORY_RESHAPE(OpReshape, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700440 break;
441 case Op_REVERSE:
James Ward8b390432022-08-12 20:48:56 +0100442 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100443 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100444 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700445 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT8);
446 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT16);
447 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT32);
448 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000449 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700450 break;
451 case Op_SLICE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000452 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP16);
453 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, BF16);
454 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP32);
455 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT8);
456 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT16);
457 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT32);
458 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000459 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700460 break;
461 case Op_TILE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000462 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP16);
463 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, BF16);
464 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP32);
465 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT8);
466 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT16);
467 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT32);
468 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000469 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700470 break;
471 case Op_TRANSPOSE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000472 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, BOOL);
473 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP16);
474 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, BF16);
475 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP32);
476 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT8);
477 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT16);
478 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000479 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700480 break;
481
482 // scatter_gather
483 case Op_GATHER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800484 DEF_FACTORY_ONE_TYPE(OpGather, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800485 DEF_FACTORY_ONE_TYPE(OpGather, INT16);
486 DEF_FACTORY_ONE_TYPE(OpGather, INT32);
James Ward8b390432022-08-12 20:48:56 +0100487 DEF_FACTORY_ONE_TYPE(OpGather, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100488 DEF_FACTORY_ONE_TYPE(OpGather, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100489 DEF_FACTORY_ONE_TYPE(OpGather, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000490 DEF_FACTORY_ONE_TYPE(OpGather, FP64);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800491 break;
492 case Op_SCATTER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800493 DEF_FACTORY_ONE_TYPE(OpScatter, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800494 DEF_FACTORY_ONE_TYPE(OpScatter, INT16);
495 DEF_FACTORY_ONE_TYPE(OpScatter, INT32);
James Ward8b390432022-08-12 20:48:56 +0100496 DEF_FACTORY_ONE_TYPE(OpScatter, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100497 DEF_FACTORY_ONE_TYPE(OpScatter, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100498 DEF_FACTORY_ONE_TYPE(OpScatter, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000499 DEF_FACTORY_ONE_TYPE(OpScatter, FP64);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800500 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700501
502 // image
503 case Op_RESIZE:
TatWai Chongf7326092022-06-08 12:17:14 -0700504 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT32);
505 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT8);
506 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT48);
507 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT16);
James Ward8b390432022-08-12 20:48:56 +0100508 DEF_FACTORY_TWO_TYPE_RESIZE_FP16(OpResize, FP16, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100509 DEF_FACTORY_TWO_TYPE_RESIZE_BF16(OpResize, BF16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100510 DEF_FACTORY_TWO_TYPE_RESIZE_FP32(OpResize, FP32, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000511 DEF_FACTORY_TWO_TYPE_RESIZE_FP64(OpResize, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700512 break;
513
514 // data_nodes
515 case Op_CONST:
Kevin Chengacb550f2021-06-29 15:32:19 -0700516 return new OpConst(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700517 case Op_IDENTITY:
James Ward8b390432022-08-12 20:48:56 +0100518 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100519 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100520 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700521 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700522 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT8);
523 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT16);
524 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000525 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700526 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700527
528 // type_conversion
529 case Op_CAST:
530 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT8);
531 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT16);
532 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT32);
533 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BOOL);
534 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT16);
535 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT32);
James Ward8b390432022-08-12 20:48:56 +0100536 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000537 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100538 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700539 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BOOL);
540 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT8);
541 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT32);
James Ward8b390432022-08-12 20:48:56 +0100542 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000543 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100544 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700545 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BOOL);
546 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT8);
547 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT16);
James Ward8b390432022-08-12 20:48:56 +0100548 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000549 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100550 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP32);
James Ward8b390432022-08-12 20:48:56 +0100551 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT8);
552 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT16);
553 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000554 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +0100555 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT8);
556 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT16);
557 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000558 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100559 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT8);
560 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT16);
561 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000562 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, FP16);
563 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, BF16);
Tai Lya4d748b2023-03-28 22:06:56 +0000564 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, INT8);
565 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, INT16);
566 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, INT32);
567 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, FP64);
568 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP64);
569 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP64);
570 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700571 break;
572 case Op_RESCALE:
Kevin Cheng3a478572021-01-22 17:21:02 -0800573 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT8);
574 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT16);
575 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT32);
576 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700577 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT16);
578 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800579 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700580 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT16);
581 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800582 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700583 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT16);
584 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800585 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100586 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT16);
587 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT16, INT16);
Kevin Cheng3a478572021-01-22 17:21:02 -0800588 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, UINT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100589 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT8);
590 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700591 break;
592
593 // custom
594 case Op_CUSTOM:
Kevin Chengacb550f2021-06-29 15:32:19 -0700595 return new OpCustom(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700596
597 // control_flow
598 case Op_COND_IF:
Kevin Chengacb550f2021-06-29 15:32:19 -0700599 return new OpCondIf(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700600 case Op_WHILE_LOOP:
Kevin Chengacb550f2021-06-29 15:32:19 -0700601 return new OpWhileLoop(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700602
603 // Ops not recognized
604 default:
605 goto done;
606
607 } // End of switch(opType)
608
609done:
610 return nullptr;
611}