blob: 74315d7d3d98b25add2d8cbf15c9f733484876f0 [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);
Won Jeon2c34b462024-02-06 18:37:00 +000058 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FP8E4M3);
59 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FP8E5M2);
Eric Kunzee5e26762020-10-13 16:11:07 -070060 break;
61 case Op_AVG_POOL2D:
James Ward8b390432022-08-12 20:48:56 +010062 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010063 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +010064 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010065 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010066 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, INT8, INT32);
67 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, INT16, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +000068 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP64, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +000069 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP8E4M3, FP16);
70 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP8E5M2, FP16);
Eric Kunzee5e26762020-10-13 16:11:07 -070071 break;
72 case Op_CONV2D:
Tai Lyf36f2562024-03-14 16:21:29 +000073 // OP, attr_name, in_t, w_t, acc_t, out_t
74 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv2d, Conv, FP16, FP16, FP16, FP16);
75 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv2d, Conv, FP16, FP16, FP32, FP16);
76 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv2d, Conv, BF16, BF16, FP32, BF16);
77 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv2d, Conv, FP32, FP32, FP32, FP32);
78 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv2d, Conv, INT8, INT4, INT32, INT32);
79 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv2d, Conv, INT8, INT8, INT32, INT32);
80 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv2d, Conv, INT16, INT8, INT48, INT48);
81 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv2d, Conv, FP64, FP64, FP64, FP64);
82 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv2d, Conv, FP8E4M3, FP8E4M3, FP16, FP16);
83 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv2d, Conv, FP8E5M2, FP8E5M2, FP16, FP16);
Eric Kunzee5e26762020-10-13 16:11:07 -070084 break;
Kevin Cheng1533b852021-09-01 12:51:58 -070085 case Op_CONV3D:
Tai Lyf36f2562024-03-14 16:21:29 +000086 // OP, attr_name, in_t, w_t, acc_t, out_t
87 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv3d, Conv, FP16, FP16, FP16, FP16);
88 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv3d, Conv, FP16, FP16, FP32, FP16);
89 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv3d, Conv, BF16, BF16, FP32, BF16);
90 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv3d, Conv, FP32, FP32, FP32, FP32);
91 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv3d, Conv, INT8, INT4, INT32, INT32);
92 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv3d, Conv, INT8, INT8, INT32, INT32);
93 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv3d, Conv, INT16, INT8, INT48, INT48);
94 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv3d, Conv, FP64, FP64, FP64, FP64);
95 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv3d, Conv, FP8E4M3, FP8E4M3, FP16, FP16);
96 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpConv3d, Conv, FP8E5M2, FP8E5M2, FP16, FP16);
Kevin Cheng1533b852021-09-01 12:51:58 -070097 break;
Eric Kunzee5e26762020-10-13 16:11:07 -070098 case Op_DEPTHWISE_CONV2D:
Tai Lyf36f2562024-03-14 16:21:29 +000099 // OP, attr_name, in_t, w_t, acc_t, out_t
100 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP16, FP16, FP16, FP16);
101 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP16, FP16, FP32, FP16);
102 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, BF16, BF16, FP32, BF16);
103 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP32, FP32, FP32, FP32);
104 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, INT8, INT4, INT32, INT32);
105 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, INT8, INT8, INT32, INT32);
106 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, INT16, INT8, INT48, INT48);
107 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP64, FP64, FP64, FP64);
108 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP8E4M3, FP8E4M3, FP16, FP16);
109 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP8E5M2, FP8E5M2, FP16, FP16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700110 break;
Luke Hutton57287132023-02-06 14:54:18 +0000111 case Op_FFT2D:
112 DEF_FACTORY_ONE_TYPE(OpFFT2d, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000113 DEF_FACTORY_ONE_TYPE(OpFFT2d, FP64);
Luke Hutton57287132023-02-06 14:54:18 +0000114 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700115 case Op_FULLY_CONNECTED:
James Wardd34b3fc2023-01-18 14:51:25 +0000116 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP16, FP16, FP16);
117 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP16, FP16, FP32);
118 DEF_FACTORY_THREE_TYPE(OpFullyConnected, BF16, BF16, FP32);
119 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP32, FP32, FP32);
120 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT8, INT4, INT32);
121 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT8, INT8, INT32);
122 DEF_FACTORY_THREE_TYPE(OpFullyConnected, INT16, INT8, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +0000123 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP64, FP64, FP64);
Won Jeone67115e2024-03-13 19:18:08 +0000124 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP8E4M3, FP8E4M3, FP16);
125 DEF_FACTORY_THREE_TYPE(OpFullyConnected, FP8E5M2, FP8E5M2, FP16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700126 break;
127 case Op_MATMUL:
James Wardd34b3fc2023-01-18 14:51:25 +0000128 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP16, FP16);
129 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP16, FP32);
130 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, BF16, FP32);
131 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP32, FP32);
132 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, INT8, INT32);
133 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, INT16, INT48);
Tai Lya4d748b2023-03-28 22:06:56 +0000134 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP64, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000135 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP8E4M3, FP16);
136 DEF_FACTORY_TWO_TYPE_IN_OUT(OpMatMul, FP8E5M2, FP16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700137 break;
138 case Op_MAX_POOL2D:
James Ward8b390432022-08-12 20:48:56 +0100139 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100140 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100141 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800142 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700143 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT16);
Tai Lya4d748b2023-03-28 22:06:56 +0000144 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000145 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP8E4M3);
146 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP8E5M2);
Eric Kunzee5e26762020-10-13 16:11:07 -0700147 break;
Luke Hutton261b7b62023-01-10 14:50:31 +0000148 case Op_RFFT2D:
149 DEF_FACTORY_ONE_TYPE(OpRFFT2d, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000150 DEF_FACTORY_ONE_TYPE(OpRFFT2d, FP64);
Luke Hutton261b7b62023-01-10 14:50:31 +0000151 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700152 case Op_TRANSPOSE_CONV2D:
Tai Lyf36f2562024-03-14 16:21:29 +0000153 // OP, attr_name, in_t, w_t, acc_t, out_t
154 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP16, FP16, FP16, FP16);
155 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP16, FP16, FP32, FP16);
156 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, BF16, BF16, FP32, BF16);
157 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP32, FP32, FP32, FP32);
158 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, INT8, INT4, INT32, INT32);
159 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, INT8, INT8, INT32, INT32);
160 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, INT16, INT8, INT48, INT48);
161 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP64, FP64, FP64, FP64);
162 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP8E4M3, FP8E4M3, FP16, FP16);
163 DEF_FACTORY_THREE_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP8E5M2, FP8E5M2, FP16, FP16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700164 break;
165
166 // activation_funcs
167 case Op_CLAMP:
James Ward8b390432022-08-12 20:48:56 +0100168 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100169 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100170 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800171 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700172 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT16);
Tai Lya4d748b2023-03-28 22:06:56 +0000173 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700174 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700175 case Op_SIGMOID:
James Ward8b390432022-08-12 20:48:56 +0100176 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100177 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100178 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000179 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700180 break;
181 case Op_TANH:
James Ward8b390432022-08-12 20:48:56 +0100182 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100183 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100184 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000185 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700186 break;
Won Jeon78155c62023-06-10 00:20:04 +0000187 case Op_ERF:
188 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, FP16);
189 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, BF16);
190 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, FP32);
191 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpErf, FP64);
192 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700193
194 // ewise_binary
195 case Op_ADD:
James Ward8b390432022-08-12 20:48:56 +0100196 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100197 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100198 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700199 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000200 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700201 break;
202 case Op_ARITHMETIC_RIGHT_SHIFT:
203 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT8);
204 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT16);
205 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT32);
206 break;
207 case Op_BITWISE_AND:
Kevin Cheng3a478572021-01-22 17:21:02 -0800208 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700209 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT16);
210 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT32);
211 break;
212 case Op_BITWISE_OR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800213 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700214 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT16);
215 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT32);
216 break;
217 case Op_BITWISE_XOR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800218 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700219 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT16);
220 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT32);
221 break;
Matthew Haddon459443c2021-08-23 16:43:13 +0100222 case Op_INTDIV:
223 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIntdiv, INT32);
Kevin Cheng14d7f7a2021-05-12 10:44:49 -0700224 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700225 case Op_LOGICAL_AND:
226 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalAnd, BOOL);
227 break;
228 case Op_LOGICAL_LEFT_SHIFT:
229 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT8);
230 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT16);
231 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT32);
232 break;
233 case Op_LOGICAL_RIGHT_SHIFT:
234 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT8);
235 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT16);
236 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT32);
237 break;
238 case Op_LOGICAL_OR:
239 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalOr, BOOL);
240 break;
241 case Op_LOGICAL_XOR:
Jeremy Johnson615feee2022-03-10 16:00:49 +0000242 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalXor, BOOL);
Eric Kunzee5e26762020-10-13 16:11:07 -0700243 break;
244 case Op_MAXIMUM:
James Ward8b390432022-08-12 20:48:56 +0100245 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100246 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100247 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700248 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000249 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700250 break;
251 case Op_MINIMUM:
James Ward8b390432022-08-12 20:48:56 +0100252 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100253 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100254 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700255 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000256 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700257 break;
258 case Op_MUL:
James Ward8b390432022-08-12 20:48:56 +0100259 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP16, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100260 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, BF16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100261 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP32, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700262 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT8, INT32);
263 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT16, INT32);
264 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT32, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000265 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700266 break;
267 case Op_POW:
James Ward8b390432022-08-12 20:48:56 +0100268 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100269 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100270 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000271 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700272 break;
273 case Op_SUB:
James Ward8b390432022-08-12 20:48:56 +0100274 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100275 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100276 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700277 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000278 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700279 break;
280 case Op_TABLE:
Kevin Cheng571f7182021-05-24 17:20:01 -0700281 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT8);
282 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700283 break;
284
285 // ewise_unary
286 case Op_ABS:
James Ward8b390432022-08-12 20:48:56 +0100287 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100288 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100289 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700290 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000291 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700292 break;
293 case Op_BITWISE_NOT:
Kevin Cheng3a478572021-01-22 17:21:02 -0800294 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700295 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT16);
296 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT32);
297 break;
298 case Op_CEIL:
James Ward8b390432022-08-12 20:48:56 +0100299 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100300 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100301 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000302 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700303 break;
304 case Op_CLZ:
305 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClz, INT32);
306 break;
Jerry Ge51bd4f52024-02-20 11:21:19 -0800307 case Op_COS:
308 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCos, FP16);
309 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCos, BF16);
310 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCos, FP32);
311 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCos, FP64);
312 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700313 case Op_EXP:
James Ward8b390432022-08-12 20:48:56 +0100314 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100315 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100316 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000317 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700318 break;
319 case Op_FLOOR:
James Ward8b390432022-08-12 20:48:56 +0100320 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100321 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100322 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000323 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700324 break;
325 case Op_LOG:
James Ward8b390432022-08-12 20:48:56 +0100326 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100327 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100328 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000329 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700330 break;
331 case Op_LOGICAL_NOT:
332 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalNot, BOOL);
333 break;
334 case Op_NEGATE:
James Ward8b390432022-08-12 20:48:56 +0100335 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100336 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100337 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800338 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700339 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT16);
340 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000341 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700342 break;
343 case Op_RECIPROCAL:
James Ward8b390432022-08-12 20:48:56 +0100344 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100345 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100346 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000347 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700348 break;
349 case Op_RSQRT:
James Ward8b390432022-08-12 20:48:56 +0100350 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100351 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100352 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000353 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700354 break;
Jerry Ge51bd4f52024-02-20 11:21:19 -0800355 case Op_SIN:
356 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSin, FP16);
357 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSin, BF16);
358 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSin, FP32);
359 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSin, FP64);
360 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700361
362 // ewise_ternary
363 case Op_SELECT:
James Ward8b390432022-08-12 20:48:56 +0100364 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100365 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100366 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700367 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT8);
368 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT16);
369 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT32);
370 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000371 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700372 break;
373
374 // comparison
375 case Op_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100376 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100377 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100378 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700379 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000380 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700381 break;
382 case Op_GREATER:
James Ward8b390432022-08-12 20:48:56 +0100383 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100384 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100385 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700386 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000387 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700388 break;
389 case Op_GREATER_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100390 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100391 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100392 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700393 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000394 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700395 break;
396
397 // reduction
398 case Op_REDUCE_ALL:
399 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAll, BOOL);
400 break;
401 case Op_REDUCE_ANY:
402 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAny, BOOL);
403 break;
404 case Op_REDUCE_MAX:
James Ward8b390432022-08-12 20:48:56 +0100405 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100406 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100407 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800408 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700409 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT16);
410 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000411 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700412 break;
413 case Op_REDUCE_MIN:
James Ward8b390432022-08-12 20:48:56 +0100414 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100415 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100416 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800417 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700418 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT16);
419 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000420 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700421 break;
422 case Op_REDUCE_PRODUCT:
James Ward8b390432022-08-12 20:48:56 +0100423 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100424 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100425 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000426 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProductDouble, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700427 break;
428 case Op_REDUCE_SUM:
James Ward8b390432022-08-12 20:48:56 +0100429 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100430 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100431 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000432 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSumDouble, FP64);
Jeremy Johnson7de9b452022-04-05 14:31:37 +0100433 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSumInt, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700434 break;
435
436 // data layout
437 case Op_CONCAT:
James Ward8b390432022-08-12 20:48:56 +0100438 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100439 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100440 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700441 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT8);
442 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT16);
443 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT32);
444 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000445 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000446 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP8E4M3);
447 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP8E5M2);
Eric Kunzee5e26762020-10-13 16:11:07 -0700448 break;
449 case Op_PAD:
James Ward8b390432022-08-12 20:48:56 +0100450 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100451 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100452 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700453 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700454 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT8);
455 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT16);
456 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000457 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000458 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP8E4M3);
459 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP8E5M2);
Eric Kunzee5e26762020-10-13 16:11:07 -0700460 break;
Won Jeona21b2e82023-08-10 10:33:01 +0000461 case Op_DIM:
462 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, FP16);
463 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, BF16);
464 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, FP32);
465 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, INT32);
466 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, INT8);
467 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, INT16);
468 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, BOOL);
Won Jeon2c34b462024-02-06 18:37:00 +0000469 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, FP8E4M3);
470 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpDim, FP8E5M2);
Won Jeona21b2e82023-08-10 10:33:01 +0000471 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700472 case Op_RESHAPE:
James Ward8b390432022-08-12 20:48:56 +0100473 DEF_FACTORY_RESHAPE(OpReshape, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100474 DEF_FACTORY_RESHAPE(OpReshape, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100475 DEF_FACTORY_RESHAPE(OpReshape, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700476 DEF_FACTORY_RESHAPE(OpReshape, INT8);
477 DEF_FACTORY_RESHAPE(OpReshape, INT16);
478 DEF_FACTORY_RESHAPE(OpReshape, INT32);
479 DEF_FACTORY_RESHAPE(OpReshape, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000480 DEF_FACTORY_RESHAPE(OpReshape, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000481 DEF_FACTORY_RESHAPE(OpReshape, FP8E4M3);
482 DEF_FACTORY_RESHAPE(OpReshape, FP8E5M2);
Eric Kunzee5e26762020-10-13 16:11:07 -0700483 break;
484 case Op_REVERSE:
James Ward8b390432022-08-12 20:48:56 +0100485 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100486 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100487 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700488 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT8);
489 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT16);
490 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT32);
491 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000492 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000493 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP8E4M3);
494 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP8E5M2);
Eric Kunzee5e26762020-10-13 16:11:07 -0700495 break;
496 case Op_SLICE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000497 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP16);
498 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, BF16);
499 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP32);
500 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT8);
501 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT16);
502 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, INT32);
503 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000504 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000505 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP8E4M3);
506 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpSlice, FP8E5M2);
Eric Kunzee5e26762020-10-13 16:11:07 -0700507 break;
508 case Op_TILE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000509 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP16);
510 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, BF16);
511 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP32);
512 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT8);
513 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT16);
514 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, INT32);
515 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000516 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000517 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP8E4M3);
518 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTile, FP8E5M2);
Eric Kunzee5e26762020-10-13 16:11:07 -0700519 break;
520 case Op_TRANSPOSE:
Luke Huttona4e48ca2023-02-22 11:53:48 +0000521 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, BOOL);
522 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP16);
523 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, BF16);
524 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP32);
525 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT8);
526 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT16);
527 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000528 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000529 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP8E4M3);
530 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpTranspose, FP8E5M2);
Eric Kunzee5e26762020-10-13 16:11:07 -0700531 break;
532
533 // scatter_gather
534 case Op_GATHER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800535 DEF_FACTORY_ONE_TYPE(OpGather, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800536 DEF_FACTORY_ONE_TYPE(OpGather, INT16);
537 DEF_FACTORY_ONE_TYPE(OpGather, INT32);
James Ward8b390432022-08-12 20:48:56 +0100538 DEF_FACTORY_ONE_TYPE(OpGather, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100539 DEF_FACTORY_ONE_TYPE(OpGather, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100540 DEF_FACTORY_ONE_TYPE(OpGather, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000541 DEF_FACTORY_ONE_TYPE(OpGather, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000542 DEF_FACTORY_ONE_TYPE(OpGather, FP8E4M3);
543 DEF_FACTORY_ONE_TYPE(OpGather, FP8E5M2);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800544 break;
545 case Op_SCATTER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800546 DEF_FACTORY_ONE_TYPE(OpScatter, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800547 DEF_FACTORY_ONE_TYPE(OpScatter, INT16);
548 DEF_FACTORY_ONE_TYPE(OpScatter, INT32);
James Ward8b390432022-08-12 20:48:56 +0100549 DEF_FACTORY_ONE_TYPE(OpScatter, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100550 DEF_FACTORY_ONE_TYPE(OpScatter, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100551 DEF_FACTORY_ONE_TYPE(OpScatter, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000552 DEF_FACTORY_ONE_TYPE(OpScatter, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000553 DEF_FACTORY_ONE_TYPE(OpScatter, FP8E4M3);
554 DEF_FACTORY_ONE_TYPE(OpScatter, FP8E5M2);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800555 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700556
557 // image
558 case Op_RESIZE:
TatWai Chongf7326092022-06-08 12:17:14 -0700559 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT32);
560 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT8);
561 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT48);
562 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT16);
James Ward8b390432022-08-12 20:48:56 +0100563 DEF_FACTORY_TWO_TYPE_RESIZE_FP16(OpResize, FP16, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100564 DEF_FACTORY_TWO_TYPE_RESIZE_BF16(OpResize, BF16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100565 DEF_FACTORY_TWO_TYPE_RESIZE_FP32(OpResize, FP32, FP32);
Tai Lya4d748b2023-03-28 22:06:56 +0000566 DEF_FACTORY_TWO_TYPE_RESIZE_FP64(OpResize, FP64, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700567 break;
568
569 // data_nodes
570 case Op_CONST:
Kevin Chengacb550f2021-06-29 15:32:19 -0700571 return new OpConst(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700572 case Op_IDENTITY:
James Ward8b390432022-08-12 20:48:56 +0100573 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100574 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100575 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700576 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT32);
evacha011adff832024-03-06 17:33:44 +0000577 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT4);
Eric Kunzee5e26762020-10-13 16:11:07 -0700578 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT8);
579 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT16);
evacha011adff832024-03-06 17:33:44 +0000580 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -0700581 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BOOL);
Tai Lya4d748b2023-03-28 22:06:56 +0000582 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000583 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP8E4M3);
584 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP8E5M2);
Eric Kunzee5e26762020-10-13 16:11:07 -0700585 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700586
587 // type_conversion
588 case Op_CAST:
589 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT8);
590 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT16);
591 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT32);
592 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BOOL);
593 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT16);
594 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT32);
James Ward8b390432022-08-12 20:48:56 +0100595 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000596 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100597 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700598 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BOOL);
599 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT8);
600 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT32);
James Ward8b390432022-08-12 20:48:56 +0100601 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000602 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100603 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700604 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BOOL);
605 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT8);
606 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT16);
James Ward8b390432022-08-12 20:48:56 +0100607 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP16);
James Ward736fd1a2023-01-23 17:13:37 +0000608 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100609 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP32);
James Ward8b390432022-08-12 20:48:56 +0100610 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT8);
611 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT16);
612 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000613 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, FP32);
James Ward24dbc422022-10-19 12:20:31 +0100614 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT8);
615 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT16);
616 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000617 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, FP32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100618 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT8);
619 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT16);
620 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT32);
James Ward736fd1a2023-01-23 17:13:37 +0000621 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, FP16);
622 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, BF16);
Tai Lya4d748b2023-03-28 22:06:56 +0000623 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, INT8);
624 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, INT16);
625 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, INT32);
626 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP64, FP64);
627 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP64);
628 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP64);
629 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP64);
Won Jeon2c34b462024-02-06 18:37:00 +0000630 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, FP8E4M3);
631 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BF16, FP8E5M2);
632 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP8E4M3, FP16);
633 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP8E4M3, BF16);
634 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP8E4M3, FP32);
635 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP8E5M2, FP16);
636 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP8E5M2, BF16);
637 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP8E5M2, FP32);
638 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, FP8E4M3);
639 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, FP8E5M2);
640 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, FP8E4M3);
641 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, FP8E5M2);
Eric Kunzee5e26762020-10-13 16:11:07 -0700642 break;
643 case Op_RESCALE:
Kevin Cheng3a478572021-01-22 17:21:02 -0800644 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT8);
645 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT16);
646 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT32);
647 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700648 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT16);
649 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800650 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700651 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT16);
652 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800653 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700654 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT16);
655 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800656 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100657 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT16);
658 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT16, INT16);
Kevin Cheng3a478572021-01-22 17:21:02 -0800659 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, UINT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100660 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT8);
661 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700662 break;
663
664 // custom
665 case Op_CUSTOM:
Jerry Ge5637a862023-10-30 10:18:45 -0700666 return new OpCustom(sgt, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700667
668 // control_flow
669 case Op_COND_IF:
Kevin Chengacb550f2021-06-29 15:32:19 -0700670 return new OpCondIf(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700671 case Op_WHILE_LOOP:
Kevin Chengacb550f2021-06-29 15:32:19 -0700672 return new OpWhileLoop(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700673
Tai Ly8690a082023-12-18 20:40:24 +0000674 case Op_CONST_SHAPE:
675 return new OpConstShape(sgt, id);
676 case Op_CONCAT_SHAPE:
677 return new OpConcatShape(sgt, id);
678 case Op_ADD_SHAPE:
679 return new OpAddShape(sgt, id);
680 case Op_SUB_SHAPE:
681 return new OpSubShape(sgt, id);
682 case Op_MUL_SHAPE:
683 return new OpMulShape(sgt, id);
684 case Op_DIV_SHAPE:
685 return new OpDivShape(sgt, id);
686
Eric Kunzee5e26762020-10-13 16:11:07 -0700687 // Ops not recognized
688 default:
689 goto done;
690
691 } // End of switch(opType)
692
693done:
694 return nullptr;
695}