blob: af8332ec4c9752c079f0484daa905a0b7f0ceed9 [file] [log] [blame]
Eric Kunzee5e26762020-10-13 16:11:07 -07001
Tai Ly8690a082023-12-18 20:40:24 +00002// Copyright (c) 2020-2024, 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"
Tai Ly8690a082023-12-18 20:40:24 +000029#include "shape.h"
Eric Kunzee5e26762020-10-13 16:11:07 -070030#include "tensor_ops.h"
31#include "type_conversion.h"
32
33using namespace TosaReference;
34using namespace tosa;
35
Kevin Chengacb550f2021-06-29 15:32:19 -070036GraphNode* OpFactory::newOp(SubgraphTraverser* sgt,
37 TosaSerializationHandler* tsh,
Eric Kunzee5e26762020-10-13 16:11:07 -070038 Op opType,
39 TosaAttributeBase* attribute,
Eric Kunzee5e26762020-10-13 16:11:07 -070040 uint64_t id,
Tai Lya4d748b2023-03-28 22:06:56 +000041 TOSA_REF_TYPE inputDTYPE,
Eric Kunzee5e26762020-10-13 16:11:07 -070042 int inputRank,
Tai Lya4d748b2023-03-28 22:06:56 +000043 TOSA_REF_TYPE outputDTYPE,
Eric Kunzee5e26762020-10-13 16:11:07 -070044 int outputRank,
Tai Lya4d748b2023-03-28 22:06:56 +000045 TOSA_REF_TYPE weightDTYPE,
Eric Kunzee5e26762020-10-13 16:11:07 -070046 int weightRank)
47{
48 switch (opType)
49 {
50 // tensor_ops
51 case Op_ARGMAX:
James Ward8b390432022-08-12 20:48:56 +010052 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FP16);
James Ward24dbc422022-10-19 12:20:31 +010053 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010054 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -080055 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070056 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, INT16);
Tai Lya4d748b2023-03-28 22:06:56 +000057 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -070058 break;
59 case Op_AVG_POOL2D:
James Ward8b390432022-08-12 20:48:56 +010060 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010061 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +010062 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010063 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010064 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, INT8, INT32);
65 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, INT16, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +000066 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -070067 break;
68 case Op_CONV2D:
James Wardd34b3fc2023-01-18 14:51:25 +000069 DEF_FACTORY_THREE_TYPE(OpConv2d, FP16, FP16, FP16);
70 DEF_FACTORY_THREE_TYPE(OpConv2d, FP16, FP16, FP32);
71 DEF_FACTORY_THREE_TYPE(OpConv2d, BF16, BF16, FP32);
72 DEF_FACTORY_THREE_TYPE(OpConv2d, FP32, FP32, FP32);
73 DEF_FACTORY_THREE_TYPE(OpConv2d, INT8, INT4, INT32);
74 DEF_FACTORY_THREE_TYPE(OpConv2d, INT8, INT8, INT32);
75 DEF_FACTORY_THREE_TYPE(OpConv2d, INT16, INT8, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +000076 DEF_FACTORY_THREE_TYPE(OpConv2d, FP64, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -070077 break;
Kevin Cheng1533b852021-09-01 12:51:58 -070078 case Op_CONV3D:
James Wardd34b3fc2023-01-18 14:51:25 +000079 DEF_FACTORY_THREE_TYPE(OpConv3d, FP16, FP16, FP16);
80 DEF_FACTORY_THREE_TYPE(OpConv3d, FP16, FP16, FP32);
81 DEF_FACTORY_THREE_TYPE(OpConv3d, BF16, BF16, FP32);
82 DEF_FACTORY_THREE_TYPE(OpConv3d, FP32, FP32, FP32);
83 DEF_FACTORY_THREE_TYPE(OpConv3d, INT8, INT4, INT32);
84 DEF_FACTORY_THREE_TYPE(OpConv3d, INT8, INT8, INT32);
85 DEF_FACTORY_THREE_TYPE(OpConv3d, INT16, INT8, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +000086 DEF_FACTORY_THREE_TYPE(OpConv3d, FP64, FP64, FP64);
Kevin Cheng1533b852021-09-01 12:51:58 -070087 break;
Eric Kunzee5e26762020-10-13 16:11:07 -070088 case Op_DEPTHWISE_CONV2D:
James Wardd34b3fc2023-01-18 14:51:25 +000089 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, FP16, FP16, FP16);
90 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, FP16, FP16, FP32);
91 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, BF16, BF16, FP32);
92 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, FP32, FP32, FP32);
93 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, INT8, INT4, INT32);
94 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, INT8, INT8, INT32);
95 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, INT16, INT8, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +000096 DEF_FACTORY_THREE_TYPE(OpDepthwiseConv2d, FP64, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -070097 break;
Luke Hutton57287132023-02-06 14:54:18 +000098 case Op_FFT2D:
99 DEF_FACTORY_ONE_TYPE(OpFFT2d, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000100 DEF_FACTORY_ONE_TYPE(OpFFT2d, FP64);
Luke Hutton57287132023-02-06 14:54:18 +0000101 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700102 case Op_FULLY_CONNECTED:
James Wardd34b3fc2023-01-18 14:51:25 +0000103 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP16, FP16, FP16);
104 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP16, FP16, FP32);
105 DEF_FACTORY_THREE_TYPE(OpFullyConnected, BF16, BF16, FP32);
106 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP32, FP32, FP32);
107 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT8, INT4, INT32);
108 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT8, INT8, INT32);
109 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT16, INT8, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +0000110 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP64, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700111 break;
112 case Op_MATMUL:
James Wardd34b3fc2023-01-18 14:51:25 +0000113 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP16, FP16);
114 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP16, FP32);
115 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, BF16, FP32);
116 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP32, FP32);
117 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, INT8, INT32);
118 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, INT16, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +0000119 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700120 break;
121 case Op_MAX_POOL2D:
James Ward8b390432022-08-12 20:48:56 +0100122 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100123 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100124 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800125 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700126 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT16);
Tai Lya4d748b2023-03-28 22:06:56 +0000127 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700128 break;
Luke Hutton261b7b62023-01-10 14:50:31 +0000129 case Op_RFFT2D:
130 DEF_FACTORY_ONE_TYPE(OpRFFT2d, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000131 DEF_FACTORY_ONE_TYPE(OpRFFT2d, FP64);
Luke Hutton261b7b62023-01-10 14:50:31 +0000132 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700133 case Op_TRANSPOSE_CONV2D:
James Wardd34b3fc2023-01-18 14:51:25 +0000134 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, FP16, FP16, FP16);
135 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, FP16, FP16, FP32);
136 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, BF16, BF16, FP32);
137 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, FP32, FP32, FP32);
138 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, INT8, INT4, INT32);
139 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, INT8, INT8, INT32);
140 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, INT16, INT8, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +0000141 DEF_FACTORY_THREE_TYPE(OpTransposeConv2d, FP64, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700142 break;
143
144 // activation_funcs
145 case Op_CLAMP:
James Ward8b390432022-08-12 20:48:56 +0100146 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100147 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100148 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800149 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700150 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT16);
Tai Lya4d748b2023-03-28 22:06:56 +0000151 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700152 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700153 case Op_SIGMOID:
James Ward8b390432022-08-12 20:48:56 +0100154 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100155 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100156 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000157 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700158 break;
159 case Op_TANH:
James Ward8b390432022-08-12 20:48:56 +0100160 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100161 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100162 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000163 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700164 break;
Won Jeon78155c62023-06-10 00:20:04 +0000165 case Op_ERF:
166 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, FP16);
167 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, BF16);
168 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, FP32);
169 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, FP64);
170 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700171
172 // ewise_binary
173 case Op_ADD:
James Ward8b390432022-08-12 20:48:56 +0100174 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100175 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100176 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700177 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000178 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700179 break;
180 case Op_ARITHMETIC_RIGHT_SHIFT:
181 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT8);
182 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT16);
183 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT32);
184 break;
185 case Op_BITWISE_AND:
Kevin Cheng3a478572021-01-22 17:21:02 -0800186 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700187 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT16);
188 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT32);
189 break;
190 case Op_BITWISE_OR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800191 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700192 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT16);
193 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT32);
194 break;
195 case Op_BITWISE_XOR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800196 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700197 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT16);
198 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT32);
199 break;
Matthew Haddon459443c2021-08-23 16:43:13 +0100200 case Op_INTDIV:
201 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIntdiv, INT32);
Kevin Cheng14d7f7a2021-05-12 10:44:49 -0700202 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700203 case Op_LOGICAL_AND:
204 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalAnd, BOOL);
205 break;
206 case Op_LOGICAL_LEFT_SHIFT:
207 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT8);
208 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT16);
209 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT32);
210 break;
211 case Op_LOGICAL_RIGHT_SHIFT:
212 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT8);
213 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT16);
214 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT32);
215 break;
216 case Op_LOGICAL_OR:
217 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalOr, BOOL);
218 break;
219 case Op_LOGICAL_XOR:
Jeremy Johnson615feee2022-03-10 16:00:49 +0000220 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalXor, BOOL);
Eric Kunzee5e26762020-10-13 16:11:07 -0700221 break;
222 case Op_MAXIMUM:
James Ward8b390432022-08-12 20:48:56 +0100223 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100224 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100225 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700226 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000227 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700228 break;
229 case Op_MINIMUM:
James Ward8b390432022-08-12 20:48:56 +0100230 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100231 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100232 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700233 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000234 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700235 break;
236 case Op_MUL:
James Ward8b390432022-08-12 20:48:56 +0100237 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP16, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100238 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, BF16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100239 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP32, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700240 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT8, INT32);
241 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT16, INT32);
242 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT32, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000243 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700244 break;
245 case Op_POW:
James Ward8b390432022-08-12 20:48:56 +0100246 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100247 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100248 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000249 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700250 break;
251 case Op_SUB:
James Ward8b390432022-08-12 20:48:56 +0100252 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100253 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100254 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700255 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000256 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700257 break;
258 case Op_TABLE:
Kevin Cheng571f7182021-05-24 17:20:01 -0700259 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT8);
260 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700261 break;
262
263 // ewise_unary
264 case Op_ABS:
James Ward8b390432022-08-12 20:48:56 +0100265 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100266 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100267 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700268 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000269 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700270 break;
271 case Op_BITWISE_NOT:
Kevin Cheng3a478572021-01-22 17:21:02 -0800272 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700273 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT16);
274 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT32);
275 break;
276 case Op_CEIL:
James Ward8b390432022-08-12 20:48:56 +0100277 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100278 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100279 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000280 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700281 break;
282 case Op_CLZ:
283 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClz, INT32);
284 break;
285 case Op_EXP:
James Ward8b390432022-08-12 20:48:56 +0100286 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100287 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100288 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000289 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700290 break;
291 case Op_FLOOR:
James Ward8b390432022-08-12 20:48:56 +0100292 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100293 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100294 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000295 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700296 break;
297 case Op_LOG:
James Ward8b390432022-08-12 20:48:56 +0100298 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100299 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100300 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000301 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700302 break;
303 case Op_LOGICAL_NOT:
304 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalNot, BOOL);
305 break;
306 case Op_NEGATE:
James Ward8b390432022-08-12 20:48:56 +0100307 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100308 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100309 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800310 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700311 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT16);
312 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000313 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700314 break;
315 case Op_RECIPROCAL:
James Ward8b390432022-08-12 20:48:56 +0100316 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100317 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100318 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000319 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700320 break;
321 case Op_RSQRT:
James Ward8b390432022-08-12 20:48:56 +0100322 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100323 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100324 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000325 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700326 break;
327
328 // ewise_ternary
329 case Op_SELECT:
James Ward8b390432022-08-12 20:48:56 +0100330 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100331 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100332 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700333 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT8);
334 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT16);
335 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT32);
336 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000337 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700338 break;
339
340 // comparison
341 case Op_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100342 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100343 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100344 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700345 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000346 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700347 break;
348 case Op_GREATER:
James Ward8b390432022-08-12 20:48:56 +0100349 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100350 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100351 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700352 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000353 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700354 break;
355 case Op_GREATER_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100356 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100357 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100358 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700359 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000360 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700361 break;
362
363 // reduction
364 case Op_REDUCE_ALL:
365 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAll, BOOL);
366 break;
367 case Op_REDUCE_ANY:
368 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAny, BOOL);
369 break;
370 case Op_REDUCE_MAX:
James Ward8b390432022-08-12 20:48:56 +0100371 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100372 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100373 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800374 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700375 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT16);
376 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000377 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700378 break;
379 case Op_REDUCE_MIN:
James Ward8b390432022-08-12 20:48:56 +0100380 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100381 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100382 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800383 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700384 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT16);
385 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000386 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700387 break;
388 case Op_REDUCE_PRODUCT:
James Ward8b390432022-08-12 20:48:56 +0100389 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100390 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100391 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000392 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProductDouble, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700393 break;
394 case Op_REDUCE_SUM:
James Ward8b390432022-08-12 20:48:56 +0100395 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100396 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100397 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000398 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSumDouble, FP64);
Jeremy Johnson7de9b452022-04-05 14:31:37 +0100399 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSumInt, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700400 break;
401
402 // data layout
403 case Op_CONCAT:
James Ward8b390432022-08-12 20:48:56 +0100404 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100405 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100406 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700407 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT8);
408 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT16);
409 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT32);
410 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000411 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700412 break;
413 case Op_PAD:
James Ward8b390432022-08-12 20:48:56 +0100414 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100415 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100416 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700417 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700418 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT8);
419 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT16);
420 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000421 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700422 break;
Won Jeona21b2e82023-08-10 10:33:01 +0000423 case Op_DIM:
424 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, FP16);
425 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, BF16);
426 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, FP32);
427 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, INT32);
428 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, INT8);
429 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, INT16);
430 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, BOOL);
431 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700432 case Op_RESHAPE:
James Ward8b390432022-08-12 20:48:56 +0100433 DEF_FACTORY_RESHAPE(OpReshape, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100434 DEF_FACTORY_RESHAPE(OpReshape, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100435 DEF_FACTORY_RESHAPE(OpReshape, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700436 DEF_FACTORY_RESHAPE(OpReshape, INT8);
437 DEF_FACTORY_RESHAPE(OpReshape, INT16);
438 DEF_FACTORY_RESHAPE(OpReshape, INT32);
439 DEF_FACTORY_RESHAPE(OpReshape, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000440 DEF_FACTORY_RESHAPE(OpReshape, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700441 break;
442 case Op_REVERSE:
James Ward8b390432022-08-12 20:48:56 +0100443 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100444 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100445 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700446 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT8);
447 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT16);
448 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT32);
449 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000450 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700451 break;
452 case Op_SLICE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000453 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP16);
454 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, BF16);
455 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP32);
456 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT8);
457 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT16);
458 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT32);
459 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000460 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700461 break;
462 case Op_TILE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000463 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP16);
464 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, BF16);
465 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP32);
466 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT8);
467 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT16);
468 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT32);
469 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000470 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700471 break;
472 case Op_TRANSPOSE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000473 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, BOOL);
474 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP16);
475 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, BF16);
476 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP32);
477 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT8);
478 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT16);
479 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000480 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700481 break;
482
483 // scatter_gather
484 case Op_GATHER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800485 DEF_FACTORY_ONE_TYPE(OpGather, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800486 DEF_FACTORY_ONE_TYPE(OpGather, INT16);
487 DEF_FACTORY_ONE_TYPE(OpGather, INT32);
James Ward8b390432022-08-12 20:48:56 +0100488 DEF_FACTORY_ONE_TYPE(OpGather, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100489 DEF_FACTORY_ONE_TYPE(OpGather, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100490 DEF_FACTORY_ONE_TYPE(OpGather, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000491 DEF_FACTORY_ONE_TYPE(OpGather, FP64);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800492 break;
493 case Op_SCATTER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800494 DEF_FACTORY_ONE_TYPE(OpScatter, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800495 DEF_FACTORY_ONE_TYPE(OpScatter, INT16);
496 DEF_FACTORY_ONE_TYPE(OpScatter, INT32);
James Ward8b390432022-08-12 20:48:56 +0100497 DEF_FACTORY_ONE_TYPE(OpScatter, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100498 DEF_FACTORY_ONE_TYPE(OpScatter, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100499 DEF_FACTORY_ONE_TYPE(OpScatter, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000500 DEF_FACTORY_ONE_TYPE(OpScatter, FP64);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800501 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700502
503 // image
504 case Op_RESIZE:
TatWai Chongf7326092022-06-08 12:17:14 -0700505 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT32);
506 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT8);
507 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT48);
508 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT16);
James Ward8b390432022-08-12 20:48:56 +0100509 DEF_FACTORY_TWO_TYPE_RESIZE_FP16(OpResize, FP16, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100510 DEF_FACTORY_TWO_TYPE_RESIZE_BF16(OpResize, BF16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100511 DEF_FACTORY_TWO_TYPE_RESIZE_FP32(OpResize, FP32, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000512 DEF_FACTORY_TWO_TYPE_RESIZE_FP64(OpResize, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700513 break;
514
515 // data_nodes
516 case Op_CONST:
Kevin Chengacb550f2021-06-29 15:32:19 -0700517 return new OpConst(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700518 case Op_IDENTITY:
James Ward8b390432022-08-12 20:48:56 +0100519 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100520 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100521 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700522 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700523 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT8);
524 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT16);
525 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000526 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700527 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700528
529 // type_conversion
530 case Op_CAST:
531 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT8);
532 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT16);
533 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT32);
534 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BOOL);
535 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT16);
536 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT32);
James Ward8b390432022-08-12 20:48:56 +0100537 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000538 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100539 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700540 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BOOL);
541 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT8);
542 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT32);
James Ward8b390432022-08-12 20:48:56 +0100543 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000544 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100545 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700546 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BOOL);
547 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT8);
548 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT16);
James Ward8b390432022-08-12 20:48:56 +0100549 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000550 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100551 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP32);
James Ward8b390432022-08-12 20:48:56 +0100552 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT8);
553 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT16);
554 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000555 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +0100556 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT8);
557 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT16);
558 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000559 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100560 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT8);
561 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT16);
562 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000563 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, FP16);
564 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, BF16);
Tai Lya4d748b2023-03-28 22:06:56 +0000565 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, INT8);
566 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, INT16);
567 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, INT32);
568 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, FP64);
569 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP64);
570 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP64);
571 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700572 break;
573 case Op_RESCALE:
Kevin Cheng3a478572021-01-22 17:21:02 -0800574 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT8);
575 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT16);
576 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT32);
577 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700578 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT16);
579 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800580 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700581 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT16);
582 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800583 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700584 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT16);
585 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800586 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100587 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT16);
588 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT16, INT16);
Kevin Cheng3a478572021-01-22 17:21:02 -0800589 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, UINT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100590 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT8);
591 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700592 break;
593
594 // custom
595 case Op_CUSTOM:
Jerry Ge5637a862023-10-30 10:18:45 -0700596 return new OpCustom(sgt, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700597
598 // control_flow
599 case Op_COND_IF:
Kevin Chengacb550f2021-06-29 15:32:19 -0700600 return new OpCondIf(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700601 case Op_WHILE_LOOP:
Kevin Chengacb550f2021-06-29 15:32:19 -0700602 return new OpWhileLoop(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700603
Tai Ly8690a082023-12-18 20:40:24 +0000604 case Op_CONST_SHAPE:
605 return new OpConstShape(sgt, id);
606 case Op_CONCAT_SHAPE:
607 return new OpConcatShape(sgt, id);
608 case Op_ADD_SHAPE:
609 return new OpAddShape(sgt, id);
610 case Op_SUB_SHAPE:
611 return new OpSubShape(sgt, id);
612 case Op_MUL_SHAPE:
613 return new OpMulShape(sgt, id);
614 case Op_DIV_SHAPE:
615 return new OpDivShape(sgt, id);
616
Eric Kunzee5e26762020-10-13 16:11:07 -0700617 // Ops not recognized
618 default:
619 goto done;
620
621 } // End of switch(opType)
622
623done:
624 return nullptr;
625}