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