blob: 1ff822941d1f999fe7cc50b484c135498a1a8634 [file] [log] [blame]
Eric Kunzee5e26762020-10-13 16:11:07 -07001
James Ward8b390432022-08-12 20:48:56 +01002// Copyright (c) 2020-2022, ARM Limited.
Eric Kunzee5e26762020-10-13 16:11:07 -07003//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#include "op_factory.h"
17#include "activation_funcs.h"
18#include "comparison.h"
19#include "control_flow.h"
20#include "custom.h"
21#include "data_layout.h"
22#include "data_nodes.h"
23#include "ewise_binary.h"
24#include "ewise_ternary.h"
25#include "ewise_unary.h"
26#include "image.h"
27#include "reduction.h"
28#include "scatter_gather.h"
29#include "tensor_ops.h"
30#include "type_conversion.h"
31
32using namespace TosaReference;
33using namespace tosa;
34
Kevin Chengacb550f2021-06-29 15:32:19 -070035GraphNode* OpFactory::newOp(SubgraphTraverser* sgt,
36 TosaSerializationHandler* tsh,
Eric Kunzee5e26762020-10-13 16:11:07 -070037 Op opType,
38 TosaAttributeBase* attribute,
Eric Kunzee5e26762020-10-13 16:11:07 -070039 uint64_t id,
40 DType inputDType,
41 int inputRank,
42 DType outputDType,
43 int outputRank,
44 DType weightDType,
45 int weightRank)
46{
47 switch (opType)
48 {
49 // tensor_ops
50 case Op_ARGMAX:
James Ward8b390432022-08-12 20:48:56 +010051 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010052 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -080053 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -070054 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpArgMax, INT16);
55 break;
56 case Op_AVG_POOL2D:
James Ward8b390432022-08-12 20:48:56 +010057 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010058 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP16, FP32);
59 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010060 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, INT8, INT32);
61 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpAvgPool2d, Pool, INT16, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -070062 break;
63 case Op_CONV2D:
James Ward8b390432022-08-12 20:48:56 +010064 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, FP16, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010065 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, FP16, FP16, FP32);
66 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, FP32, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010067 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, INT8, INT4, INT32);
68 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, INT8, INT8, INT32);
69 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv2d, Conv, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -070070 break;
Kevin Cheng1533b852021-09-01 12:51:58 -070071 case Op_CONV3D:
James Ward8b390432022-08-12 20:48:56 +010072 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, FP16, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010073 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, FP16, FP16, FP32);
74 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, FP32, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010075 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, INT8, INT4, INT32);
76 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, INT8, INT8, INT32);
77 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpConv3d, Conv, INT16, INT8, INT48);
Kevin Cheng1533b852021-09-01 12:51:58 -070078 break;
Eric Kunzee5e26762020-10-13 16:11:07 -070079 case Op_DEPTHWISE_CONV2D:
James Ward8b390432022-08-12 20:48:56 +010080 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP16, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010081 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP16, FP16, FP32);
82 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, FP32, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010083 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, INT8, INT4, INT32);
84 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, INT8, INT8, INT32);
85 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpDepthwiseConv2d, Conv, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -070086 break;
87 case Op_FULLY_CONNECTED:
James Ward8b390432022-08-12 20:48:56 +010088 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, FP16, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010089 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, FP16, FP16, FP32);
90 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, FP32, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010091 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, INT8, INT4, INT32);
92 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, INT8, INT8, INT32);
93 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpFullyConnected, FullyConnected, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -070094 break;
95 case Op_MATMUL:
James Ward8b390432022-08-12 20:48:56 +010096 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpMatMul, MatMul, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010097 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpMatMul, MatMul, FP16, FP32);
98 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpMatMul, MatMul, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +010099 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpMatMul, MatMul, INT8, INT32);
100 DEF_FACTORY_ONE_TYPE_ONE_ACCUM(OpMatMul, MatMul, INT16, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -0700101 break;
102 case Op_MAX_POOL2D:
James Ward8b390432022-08-12 20:48:56 +0100103 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100104 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800105 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700106 DEF_FACTORY_ONE_TYPE(OpMaxPool2d, INT16);
107 break;
108 case Op_TRANSPOSE_CONV2D:
James Ward8b390432022-08-12 20:48:56 +0100109 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP16, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100110 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP16, FP16, FP32);
111 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, FP32, FP32, FP32);
James Ward8b390432022-08-12 20:48:56 +0100112 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, INT8, INT4, INT32);
113 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, INT8, INT8, INT32);
114 DEF_FACTORY_TWO_TYPE_ONE_ACCUM(OpTransposeConv2d, TransposeConv, INT16, INT8, INT48);
Eric Kunzee5e26762020-10-13 16:11:07 -0700115 break;
116
117 // activation_funcs
118 case Op_CLAMP:
James Ward8b390432022-08-12 20:48:56 +0100119 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100120 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800121 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700122 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClamp, INT16);
123 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700124 case Op_SIGMOID:
James Ward8b390432022-08-12 20:48:56 +0100125 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100126 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSigmoid, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700127 break;
128 case Op_TANH:
James Ward8b390432022-08-12 20:48:56 +0100129 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100130 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTanh, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700131 break;
132
133 // ewise_binary
134 case Op_ADD:
James Ward8b390432022-08-12 20:48:56 +0100135 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100136 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700137 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAdd, INT32);
138 break;
139 case Op_ARITHMETIC_RIGHT_SHIFT:
140 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT8);
141 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT16);
142 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpArithmeticRightShift, INT32);
143 break;
144 case Op_BITWISE_AND:
Kevin Cheng3a478572021-01-22 17:21:02 -0800145 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700146 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT16);
147 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseAnd, INT32);
148 break;
149 case Op_BITWISE_OR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800150 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700151 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT16);
152 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseOr, INT32);
153 break;
154 case Op_BITWISE_XOR:
Kevin Cheng3a478572021-01-22 17:21:02 -0800155 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700156 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT16);
157 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT32);
158 break;
Matthew Haddon459443c2021-08-23 16:43:13 +0100159 case Op_INTDIV:
160 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIntdiv, INT32);
Kevin Cheng14d7f7a2021-05-12 10:44:49 -0700161 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700162 case Op_LOGICAL_AND:
163 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalAnd, BOOL);
164 break;
165 case Op_LOGICAL_LEFT_SHIFT:
166 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT8);
167 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT16);
168 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT32);
169 break;
170 case Op_LOGICAL_RIGHT_SHIFT:
171 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT8);
172 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT16);
173 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalRightShift, INT32);
174 break;
175 case Op_LOGICAL_OR:
176 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalOr, BOOL);
177 break;
178 case Op_LOGICAL_XOR:
Jeremy Johnson615feee2022-03-10 16:00:49 +0000179 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalXor, BOOL);
Eric Kunzee5e26762020-10-13 16:11:07 -0700180 break;
181 case Op_MAXIMUM:
James Ward8b390432022-08-12 20:48:56 +0100182 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100183 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700184 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMaximum, INT32);
185 break;
186 case Op_MINIMUM:
James Ward8b390432022-08-12 20:48:56 +0100187 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100188 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700189 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpMinimum, INT32);
190 break;
191 case Op_MUL:
James Ward8b390432022-08-12 20:48:56 +0100192 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100193 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, FP32, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700194 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT8, INT32);
195 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT16, INT32);
196 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpMul, INT32, INT32);
197 break;
198 case Op_POW:
James Ward8b390432022-08-12 20:48:56 +0100199 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100200 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpPow, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700201 break;
202 case Op_SUB:
James Ward8b390432022-08-12 20:48:56 +0100203 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100204 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700205 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSub, INT32);
206 break;
207 case Op_TABLE:
Kevin Cheng571f7182021-05-24 17:20:01 -0700208 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT8);
209 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTable, INT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700210 break;
211
212 // ewise_unary
213 case Op_ABS:
James Ward8b390432022-08-12 20:48:56 +0100214 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100215 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700216 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpAbs, INT32);
217 break;
218 case Op_BITWISE_NOT:
Kevin Cheng3a478572021-01-22 17:21:02 -0800219 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700220 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT16);
221 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseNot, INT32);
222 break;
223 case Op_CEIL:
James Ward8b390432022-08-12 20:48:56 +0100224 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100225 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpCeil, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700226 break;
227 case Op_CLZ:
228 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpClz, INT32);
229 break;
230 case Op_EXP:
James Ward8b390432022-08-12 20:48:56 +0100231 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100232 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpExp, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700233 break;
234 case Op_FLOOR:
James Ward8b390432022-08-12 20:48:56 +0100235 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100236 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpFloor, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700237 break;
238 case Op_LOG:
James Ward8b390432022-08-12 20:48:56 +0100239 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100240 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLog, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700241 break;
242 case Op_LOGICAL_NOT:
243 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalNot, BOOL);
244 break;
245 case Op_NEGATE:
James Ward8b390432022-08-12 20:48:56 +0100246 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100247 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800248 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700249 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT16);
250 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpNegate, INT32);
251 break;
252 case Op_RECIPROCAL:
James Ward8b390432022-08-12 20:48:56 +0100253 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100254 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpReciprocal, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700255 break;
256 case Op_RSQRT:
James Ward8b390432022-08-12 20:48:56 +0100257 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100258 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpRsqrt, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700259 break;
260
261 // ewise_ternary
262 case Op_SELECT:
James Ward8b390432022-08-12 20:48:56 +0100263 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100264 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700265 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT8);
266 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT16);
267 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, INT32);
268 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSelect, BOOL);
269 break;
270
271 // comparison
272 case Op_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100273 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100274 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700275 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, INT32);
276 break;
277 case Op_GREATER:
James Ward8b390432022-08-12 20:48:56 +0100278 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100279 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700280 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, INT32);
281 break;
282 case Op_GREATER_EQUAL:
James Ward8b390432022-08-12 20:48:56 +0100283 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100284 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700285 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, INT32);
286 break;
287
288 // reduction
289 case Op_REDUCE_ALL:
290 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAll, BOOL);
291 break;
292 case Op_REDUCE_ANY:
293 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceAny, BOOL);
294 break;
295 case Op_REDUCE_MAX:
James Ward8b390432022-08-12 20:48:56 +0100296 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100297 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800298 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700299 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT16);
300 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMax, INT32);
301 break;
302 case Op_REDUCE_MIN:
James Ward8b390432022-08-12 20:48:56 +0100303 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100304 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, FP32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800305 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700306 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT16);
307 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceMin, INT32);
308 break;
309 case Op_REDUCE_PRODUCT:
James Ward8b390432022-08-12 20:48:56 +0100310 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100311 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceProduct, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700312 break;
313 case Op_REDUCE_SUM:
James Ward8b390432022-08-12 20:48:56 +0100314 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100315 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSum, FP32);
Jeremy Johnson7de9b452022-04-05 14:31:37 +0100316 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReduceSumInt, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700317 break;
318
319 // data layout
320 case Op_CONCAT:
James Ward8b390432022-08-12 20:48:56 +0100321 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100322 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700323 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT8);
324 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT16);
325 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, INT32);
326 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpConcat, BOOL);
327 break;
328 case Op_PAD:
James Ward8b390432022-08-12 20:48:56 +0100329 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100330 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700331 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700332 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT8);
333 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, INT16);
334 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpPad, BOOL);
335 break;
336 case Op_RESHAPE:
James Ward8b390432022-08-12 20:48:56 +0100337 DEF_FACTORY_RESHAPE(OpReshape, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100338 DEF_FACTORY_RESHAPE(OpReshape, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700339 DEF_FACTORY_RESHAPE(OpReshape, INT8);
340 DEF_FACTORY_RESHAPE(OpReshape, INT16);
341 DEF_FACTORY_RESHAPE(OpReshape, INT32);
342 DEF_FACTORY_RESHAPE(OpReshape, BOOL);
343 break;
344 case Op_REVERSE:
James Ward8b390432022-08-12 20:48:56 +0100345 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100346 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700347 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT8);
348 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT16);
349 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, INT32);
350 DEF_FACTORY_RANK1_6_ONE_RANK_ONE_TYPE(OpReverse, BOOL);
351 break;
352 case Op_SLICE:
James Ward8b390432022-08-12 20:48:56 +0100353 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100354 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700355 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT8);
356 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT16);
357 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, INT32);
358 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpSlice, BOOL);
359 break;
360 case Op_TILE:
James Ward8b390432022-08-12 20:48:56 +0100361 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100362 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700363 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT8);
364 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT16);
365 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, INT32);
366 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTile, BOOL);
367 break;
368 case Op_TRANSPOSE:
369 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, BOOL);
James Ward8b390432022-08-12 20:48:56 +0100370 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100371 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700372 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT8);
373 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT16);
374 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpTranspose, INT32);
375 break;
376
377 // scatter_gather
378 case Op_GATHER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800379 DEF_FACTORY_ONE_TYPE(OpGather, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800380 DEF_FACTORY_ONE_TYPE(OpGather, INT16);
381 DEF_FACTORY_ONE_TYPE(OpGather, INT32);
James Ward8b390432022-08-12 20:48:56 +0100382 DEF_FACTORY_ONE_TYPE(OpGather, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100383 DEF_FACTORY_ONE_TYPE(OpGather, FP32);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800384 break;
385 case Op_SCATTER:
Kevin Cheng3a478572021-01-22 17:21:02 -0800386 DEF_FACTORY_ONE_TYPE(OpScatter, INT8);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800387 DEF_FACTORY_ONE_TYPE(OpScatter, INT16);
388 DEF_FACTORY_ONE_TYPE(OpScatter, INT32);
James Ward8b390432022-08-12 20:48:56 +0100389 DEF_FACTORY_ONE_TYPE(OpScatter, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100390 DEF_FACTORY_ONE_TYPE(OpScatter, FP32);
Kevin Cheng77d0f762020-11-24 10:26:32 -0800391 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700392
393 // image
394 case Op_RESIZE:
TatWai Chongf7326092022-06-08 12:17:14 -0700395 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT32);
396 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT8, INT8);
397 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT48);
398 DEF_FACTORY_TWO_TYPE_RESIZE_INT16(OpResize, INT16, INT16);
James Ward8b390432022-08-12 20:48:56 +0100399 DEF_FACTORY_TWO_TYPE_RESIZE_FP16(OpResize, FP16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100400 DEF_FACTORY_TWO_TYPE_RESIZE_FP32(OpResize, FP32, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700401 break;
402
403 // data_nodes
404 case Op_CONST:
Kevin Chengacb550f2021-06-29 15:32:19 -0700405 return new OpConst(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700406 case Op_IDENTITY:
James Ward8b390432022-08-12 20:48:56 +0100407 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100408 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700409 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700410 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT8);
411 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, INT16);
412 DEF_FACTORY_RANK0_6_ONE_RANK_ONE_TYPE(OpIdentity, BOOL);
413 break;
Eric Kunzee5e26762020-10-13 16:11:07 -0700414
415 // type_conversion
416 case Op_CAST:
417 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT8);
418 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT16);
419 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, BOOL, INT32);
420 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, BOOL);
421 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT16);
422 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, INT32);
James Ward8b390432022-08-12 20:48:56 +0100423 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100424 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT8, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700425 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, BOOL);
426 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT8);
427 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, INT32);
James Ward8b390432022-08-12 20:48:56 +0100428 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100429 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT16, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700430 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, BOOL);
431 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT8);
432 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, INT16);
James Ward8b390432022-08-12 20:48:56 +0100433 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100434 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, INT32, FP32);
James Ward8b390432022-08-12 20:48:56 +0100435 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT8);
436 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT16);
437 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP16, INT32);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100438 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT8);
439 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT16);
440 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpCast, FP32, INT32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700441 break;
442 case Op_RESCALE:
Kevin Cheng3a478572021-01-22 17:21:02 -0800443 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT8);
444 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT16);
445 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, INT32);
446 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700447 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT16);
448 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800449 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700450 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT16);
451 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT32, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800452 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT8);
Eric Kunzee5e26762020-10-13 16:11:07 -0700453 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT16);
454 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT48, INT32);
Kevin Cheng3a478572021-01-22 17:21:02 -0800455 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100456 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT8, INT16);
457 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, UINT16, INT16);
Kevin Cheng3a478572021-01-22 17:21:02 -0800458 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT8, UINT8);
Jeremy Johnsonf7f78ae2022-05-25 15:26:38 +0100459 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT8);
460 DEF_FACTORY_RANK0_6_ONE_RANK_TWO_TYPE(OpRescale, INT16, UINT16);
Eric Kunzee5e26762020-10-13 16:11:07 -0700461 break;
462
463 // custom
464 case Op_CUSTOM:
Kevin Chengacb550f2021-06-29 15:32:19 -0700465 return new OpCustom(sgt, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700466
467 // control_flow
468 case Op_COND_IF:
Kevin Chengacb550f2021-06-29 15:32:19 -0700469 return new OpCondIf(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700470 case Op_WHILE_LOOP:
Kevin Chengacb550f2021-06-29 15:32:19 -0700471 return new OpWhileLoop(sgt, tsh, attribute, id);
Eric Kunzee5e26762020-10-13 16:11:07 -0700472
473 // Ops not recognized
474 default:
475 goto done;
476
477 } // End of switch(opType)
478
479done:
480 return nullptr;
481}