2 * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #include "luci/Import/GraphBuilderRegistry.h"
19 #include "luci/Import/Nodes.h"
26 GraphBuilderRegistry::GraphBuilderRegistry()
28 #define CIRCLE_NODE(OPCODE, CLASS) add(circle::BuiltinOperator_##OPCODE, std::make_unique<CLASS>());
30 CIRCLE_NODE(ABS, CircleAbsGraphBuilder); // 101
31 CIRCLE_NODE(ADD, CircleAddGraphBuilder); // 0
32 CIRCLE_NODE(ADD_N, CircleAddNGraphBuilder); // 106
33 CIRCLE_NODE(ARG_MAX, CircleArgMaxGraphBuilder); // 56
34 CIRCLE_NODE(ARG_MIN, CircleArgMinGraphBuilder); // 79
35 CIRCLE_NODE(AVERAGE_POOL_2D, CircleAveragePool2DGraphBuilder); // 1
36 CIRCLE_NODE(BATCH_MATMUL, CircleBatchMatMulGraphBuilder); // 126
37 CIRCLE_NODE(BATCH_TO_SPACE_ND, CircleBatchToSpaceNDGraphBuilder); // 37
38 CIRCLE_NODE(BCQ_FULLY_CONNECTED, CircleBCQFullyConnectedGraphBuilder); // 253
39 CIRCLE_NODE(BCQ_GATHER, CircleBCQGatherGraphBuilder); // 252
40 CIRCLE_NODE(CAST, CircleCastGraphBuilder); // 53
41 CIRCLE_NODE(CEIL, CircleCeilGraphBuilder); // 104
42 CIRCLE_NODE(CUSTOM, CircleCustomGraphBuilder); // 32
43 CIRCLE_NODE(CONCATENATION, CircleConcatenationGraphBuilder); // 2
44 CIRCLE_NODE(CONV_2D, CircleConv2DGraphBuilder); // 3
45 CIRCLE_NODE(COS, CircleCosGraphBuilder); // 108
46 CIRCLE_NODE(DEPTH_TO_SPACE, CircleDepthToSpaceGraphBuilder); // 5
47 CIRCLE_NODE(DEPTHWISE_CONV_2D, CircleDepthwiseConv2DGraphBuilder); // 4
48 CIRCLE_NODE(DIV, CircleDivGraphBuilder); // 42
49 CIRCLE_NODE(ELU, CircleEluGraphBuilder); // 111
50 CIRCLE_NODE(EQUAL, CircleEqualGraphBuilder); // 71
51 CIRCLE_NODE(EXP, CircleExpGraphBuilder); // 47
52 CIRCLE_NODE(EXPAND_DIMS, CircleExpandDimsGraphBuilder); // 70
53 CIRCLE_NODE(FILL, CircleFillGraphBuilder); // 94
54 CIRCLE_NODE(FLOOR, CircleFloorGraphBuilder); // 8
55 CIRCLE_NODE(FLOOR_DIV, CircleFloorDivGraphBuilder); // 90
56 CIRCLE_NODE(FLOOR_MOD, CircleFloorModGraphBuilder); // 95
57 CIRCLE_NODE(FULLY_CONNECTED, CircleFullyConnectedGraphBuilder); // 9
58 CIRCLE_NODE(GATHER, CircleGatherGraphBuilder); // 36
59 CIRCLE_NODE(GATHER_ND, CircleGatherNdGraphBuilder); // 107
60 CIRCLE_NODE(GREATER, CircleGreaterGraphBuilder); // 61
61 CIRCLE_NODE(GREATER_EQUAL, CircleGreaterEqualGraphBuilder); // 62
62 CIRCLE_NODE(IF, CircleIfGraphBuilder); // 118
63 CIRCLE_NODE(INSTANCE_NORM, CircleInstanceNormGraphBuilder); // 254
64 CIRCLE_NODE(L2_NORMALIZATION, CircleL2NormalizeGraphBuilder); // 11
65 CIRCLE_NODE(L2_POOL_2D, CircleL2Pool2DGraphBuilder); // 12
66 CIRCLE_NODE(LEAKY_RELU, CircleLeakyReluGraphBuilder); // 98,
67 CIRCLE_NODE(LESS, CircleLessGraphBuilder); // 58
68 CIRCLE_NODE(LESS_EQUAL, CircleLessEqualGraphBuilder); // 63
69 CIRCLE_NODE(LOCAL_RESPONSE_NORMALIZATION, CircleLocalResponseNormalizationGraphBuilder); // 13
70 CIRCLE_NODE(LOG, CircleLogGraphBuilder); // 73
71 CIRCLE_NODE(LOGICAL_AND, CircleLogicalAndGraphBuilder); // 86
72 CIRCLE_NODE(LOGICAL_NOT, CircleLogicalNotGraphBuilder); // 87
73 CIRCLE_NODE(LOGICAL_OR, CircleLogicalOrGraphBuilder); // 84
74 CIRCLE_NODE(LOGISTIC, CircleLogisticGraphBuilder); // 14
75 CIRCLE_NODE(LOG_SOFTMAX, CircleLogSoftmaxGraphBuilder); // 50
76 CIRCLE_NODE(MATRIX_DIAG, CircleMatrixDiagGraphBuilder); // 113
77 CIRCLE_NODE(MATRIX_SET_DIAG, CircleMatrixSetDiagGraphBuilder); // 115
78 CIRCLE_NODE(MAXIMUM, CircleMaximumGraphBuilder); // 55
79 CIRCLE_NODE(MAX_POOL_2D, CircleMaxPool2DGraphBuilder); // 17
80 CIRCLE_NODE(MEAN, CircleMeanGraphBuilder); // 40
81 CIRCLE_NODE(MINIMUM, CircleMinimumGraphBuilder); // 57
82 CIRCLE_NODE(MIRROR_PAD, CircleMirrorPadGraphBuilder); // 100
83 CIRCLE_NODE(MUL, CircleMulGraphBuilder); // 18
84 CIRCLE_NODE(NEG, CircleNegGraphBuilder); // 59
85 CIRCLE_NODE(NON_MAX_SUPPRESSION_V4, CircleNonMaxSuppressionV4GraphBuilder); // 120,
86 CIRCLE_NODE(NON_MAX_SUPPRESSION_V5, CircleNonMaxSuppressionV5GraphBuilder); // 121,
87 CIRCLE_NODE(NOT_EQUAL, CircleNotEqualGraphBuilder); // 72
88 CIRCLE_NODE(ONE_HOT, CircleOneHotGraphBuilder); // 85
89 CIRCLE_NODE(PACK, CirclePackGraphBuilder); // 83
90 CIRCLE_NODE(PAD, CirclePadGraphBuilder); // 34
91 CIRCLE_NODE(PADV2, CirclePadV2GraphBuilder); // 60
92 CIRCLE_NODE(POW, CirclePowGraphBuilder); // 78
93 CIRCLE_NODE(PRELU, CirclePReluGraphBuilder); // 54,
94 CIRCLE_NODE(RANGE, CircleRangeGraphBuilder); // 96
95 CIRCLE_NODE(RANK, CircleRankGraphBuilder); // 110
96 CIRCLE_NODE(REDUCE_ANY, CircleReduceAnyGraphBuilder); // 91
97 CIRCLE_NODE(REDUCE_MAX, CircleReduceMaxGraphBuilder); // 82
98 CIRCLE_NODE(REDUCE_MIN, CircleReduceMinGraphBuilder); // 89
99 CIRCLE_NODE(REDUCE_PROD, CircleReduceProdGraphBuilder); // 81
100 CIRCLE_NODE(RELU, CircleReluGraphBuilder); // 19
101 CIRCLE_NODE(RELU6, CircleRelu6GraphBuilder); // 21
102 CIRCLE_NODE(RELU_N1_TO_1, CircleReluN1To1GraphBuilder); // 20
103 CIRCLE_NODE(RESHAPE, CircleReshapeGraphBuilder); // 22
104 CIRCLE_NODE(RESIZE_BILINEAR, CircleResizeBilinearGraphBuilder); // 23
105 CIRCLE_NODE(RESIZE_NEAREST_NEIGHBOR, CircleResizeNearestNeighborGraphBuilder); // 97
106 CIRCLE_NODE(REVERSE_SEQUENCE, CircleReverseSequenceGraphBuilder); // 112
107 CIRCLE_NODE(REVERSE_V2, CircleReverseV2GraphBuilder); // 105
108 CIRCLE_NODE(ROUND, CircleRoundGraphBuilder); // 116
109 CIRCLE_NODE(RSQRT, CircleRsqrtGraphBuilder); // 76
110 CIRCLE_NODE(SCATTER_ND, CircleScatterNdGraphBuilder); // 122
111 CIRCLE_NODE(SEGMENT_SUM, CircleSegmentSumGraphBuilder); // 125
112 CIRCLE_NODE(SELECT, CircleSelectGraphBuilder); // 64
113 CIRCLE_NODE(SELECT_V2, CircleSelectV2GraphBuilder); // 123
114 CIRCLE_NODE(SHAPE, CircleShapeGraphBuilder); // 77
115 CIRCLE_NODE(SIN, CircleSinGraphBuilder); // 66
116 CIRCLE_NODE(SLICE, CircleSliceGraphBuilder); // 65
117 CIRCLE_NODE(SOFTMAX, CircleSoftmaxGraphBuilder); // 25
118 CIRCLE_NODE(SPACE_TO_BATCH_ND, CircleSpaceToBatchNDGraphBuilder); // 38
119 CIRCLE_NODE(SPACE_TO_DEPTH, CircleSpaceToDepthGraphBuilder); // 26
120 CIRCLE_NODE(SPARSE_TO_DENSE, CircleSparseToDenseGraphBuilder); // 68
121 CIRCLE_NODE(SPLIT, CircleSplitGraphBuilder); // 49
122 CIRCLE_NODE(SPLIT_V, CircleSplitVGraphBuilder); // 102
123 CIRCLE_NODE(SQRT, CircleSqrtGraphBuilder); // 75
124 CIRCLE_NODE(SQUARE, CircleSquareGraphBuilder); // 92
125 CIRCLE_NODE(SQUARED_DIFFERENCE, CircleSquaredDifferenceGraphBuilder); // 99
126 CIRCLE_NODE(SQUEEZE, CircleSqueezeGraphBuilder); // 43
127 CIRCLE_NODE(STRIDED_SLICE, CircleStridedSliceGraphBuilder); // 45
128 CIRCLE_NODE(SUB, CircleSubGraphBuilder); // 41
129 CIRCLE_NODE(SUM, CircleSumGraphBuilder); // 74
130 CIRCLE_NODE(TANH, CircleTanhGraphBuilder); // 28
131 CIRCLE_NODE(TILE, CircleTileGraphBuilder); // 69
132 CIRCLE_NODE(TOPK_V2, CircleTopKV2GraphBuilder); // 48
133 CIRCLE_NODE(TRANSPOSE, CircleTransposeGraphBuilder); // 39
134 CIRCLE_NODE(TRANSPOSE_CONV, CircleTransposeConvGraphBuilder); // 67
135 CIRCLE_NODE(UNIQUE, CircleUniqueGraphBuilder); // 103
136 CIRCLE_NODE(UNPACK, CircleUnpackGraphBuilder); // 88
137 CIRCLE_NODE(WHERE, CircleWhereGraphBuilder); // 109
138 CIRCLE_NODE(WHILE, CircleWhileGraphBuilder); // 119
139 CIRCLE_NODE(ZEROS_LIKE, CircleZerosLikeGraphBuilder); // 93
143 // BuiltinOperator_DEQUANTIZE = 6,
144 // BuiltinOperator_EMBEDDING_LOOKUP = 7,
145 // BuiltinOperator_HASHTABLE_LOOKUP = 10,
146 // BuiltinOperator_LSH_PROJECTION = 15,
147 // BuiltinOperator_LSTM = 16,
148 // BuiltinOperator_RNN = 24,
149 // BuiltinOperator_SVDF = 27,
150 // BuiltinOperator_CONCAT_EMBEDDINGS = 29,
151 // BuiltinOperator_SKIP_GRAM = 30,
152 // BuiltinOperator_CALL = 31,
153 // BuiltinOperator_EMBEDDING_LOOKUP_SPARSE = 33,
154 // BuiltinOperator_UNIDIRECTIONAL_SEQUENCE_RNN = 35,
155 // BuiltinOperator_UNIDIRECTIONAL_SEQUENCE_LSTM = 44,
156 // BuiltinOperator_BIDIRECTIONAL_SEQUENCE_RNN = 46,
157 // BuiltinOperator_DELEGATE = 51,
158 // BuiltinOperator_BIDIRECTIONAL_SEQUENCE_LSTM = 52,
159 // BuiltinOperator_ARG_MAX = 56,
160 // BuiltinOperator_FAKE_QUANT = 80,
161 // BuiltinOperator_QUANTIZE = 114,
162 // BuiltinOperator_HARD_SWISH = 117,
163 // BuiltinOperator_DENSIFY = 124,