Imported Upstream version 1.25.0
[platform/core/ml/nnfw.git] / compiler / luci / import / src / GraphBuilderRegistry.cpp
1 /*
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved
3  *
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
17 #include "luci/Import/GraphBuilderRegistry.h"
18
19 #include "luci/Import/Nodes.h"
20
21 #include <memory>
22
23 namespace luci
24 {
25
26 GraphBuilderRegistry::GraphBuilderRegistry()
27 {
28 #define CIRCLE_NODE(OPCODE, CLASS) add(circle::BuiltinOperator_##OPCODE, std::make_unique<CLASS>());
29
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(GELU, CircleGeluGraphBuilder);                                               // 150
65   CIRCLE_NODE(GREATER, CircleGreaterGraphBuilder);                                         // 61
66   CIRCLE_NODE(GREATER_EQUAL, CircleGreaterEqualGraphBuilder);                              // 62
67   CIRCLE_NODE(HARD_SWISH, CircleHardSwishGraphBuilder);                                    // 117
68   CIRCLE_NODE(IF, CircleIfGraphBuilder);                                                   // 118
69   CIRCLE_NODE(INSTANCE_NORM, CircleInstanceNormGraphBuilder);                              // 254
70   CIRCLE_NODE(L2_NORMALIZATION, CircleL2NormalizeGraphBuilder);                            // 11
71   CIRCLE_NODE(L2_POOL_2D, CircleL2Pool2DGraphBuilder);                                     // 12
72   CIRCLE_NODE(LEAKY_RELU, CircleLeakyReluGraphBuilder);                                    // 98
73   CIRCLE_NODE(LESS, CircleLessGraphBuilder);                                               // 58
74   CIRCLE_NODE(LESS_EQUAL, CircleLessEqualGraphBuilder);                                    // 63
75   CIRCLE_NODE(LOCAL_RESPONSE_NORMALIZATION, CircleLocalResponseNormalizationGraphBuilder); // 13
76   CIRCLE_NODE(LOG, CircleLogGraphBuilder);                                                 // 73
77   CIRCLE_NODE(LOGICAL_AND, CircleLogicalAndGraphBuilder);                                  // 86
78   CIRCLE_NODE(LOGICAL_NOT, CircleLogicalNotGraphBuilder);                                  // 87
79   CIRCLE_NODE(LOGICAL_OR, CircleLogicalOrGraphBuilder);                                    // 84
80   CIRCLE_NODE(LOGISTIC, CircleLogisticGraphBuilder);                                       // 14
81   CIRCLE_NODE(LOG_SOFTMAX, CircleLogSoftmaxGraphBuilder);                                  // 50
82   CIRCLE_NODE(MATRIX_DIAG, CircleMatrixDiagGraphBuilder);                                  // 113
83   CIRCLE_NODE(MATRIX_SET_DIAG, CircleMatrixSetDiagGraphBuilder);                           // 115
84   CIRCLE_NODE(MAXIMUM, CircleMaximumGraphBuilder);                                         // 55
85   CIRCLE_NODE(MAX_POOL_2D, CircleMaxPool2DGraphBuilder);                                   // 17
86   CIRCLE_NODE(MEAN, CircleMeanGraphBuilder);                                               // 40
87   CIRCLE_NODE(MINIMUM, CircleMinimumGraphBuilder);                                         // 57
88   CIRCLE_NODE(MIRROR_PAD, CircleMirrorPadGraphBuilder);                                    // 100
89   CIRCLE_NODE(MUL, CircleMulGraphBuilder);                                                 // 18
90   CIRCLE_NODE(NEG, CircleNegGraphBuilder);                                                 // 59
91   CIRCLE_NODE(NON_MAX_SUPPRESSION_V4, CircleNonMaxSuppressionV4GraphBuilder);              // 120
92   CIRCLE_NODE(NON_MAX_SUPPRESSION_V5, CircleNonMaxSuppressionV5GraphBuilder);              // 121
93   CIRCLE_NODE(NOT_EQUAL, CircleNotEqualGraphBuilder);                                      // 72
94   CIRCLE_NODE(ONE_HOT, CircleOneHotGraphBuilder);                                          // 85
95   CIRCLE_NODE(PACK, CirclePackGraphBuilder);                                               // 83
96   CIRCLE_NODE(PAD, CirclePadGraphBuilder);                                                 // 34
97   CIRCLE_NODE(PADV2, CirclePadV2GraphBuilder);                                             // 60
98   CIRCLE_NODE(POW, CirclePowGraphBuilder);                                                 // 78
99   CIRCLE_NODE(PRELU, CirclePReluGraphBuilder);                                             // 54
100   CIRCLE_NODE(QUANTIZE, CircleQuantizeGraphBuilder);                                       // 114
101   CIRCLE_NODE(RANGE, CircleRangeGraphBuilder);                                             // 96
102   CIRCLE_NODE(RANK, CircleRankGraphBuilder);                                               // 110
103   CIRCLE_NODE(REDUCE_ANY, CircleReduceAnyGraphBuilder);                                    // 91
104   CIRCLE_NODE(REDUCE_MAX, CircleReduceMaxGraphBuilder);                                    // 82
105   CIRCLE_NODE(REDUCE_MIN, CircleReduceMinGraphBuilder);                                    // 89
106   CIRCLE_NODE(REDUCE_PROD, CircleReduceProdGraphBuilder);                                  // 81
107   CIRCLE_NODE(RELU, CircleReluGraphBuilder);                                               // 19
108   CIRCLE_NODE(RELU6, CircleRelu6GraphBuilder);                                             // 21
109   CIRCLE_NODE(RELU_N1_TO_1, CircleReluN1To1GraphBuilder);                                  // 20
110   CIRCLE_NODE(RESHAPE, CircleReshapeGraphBuilder);                                         // 22
111   CIRCLE_NODE(RESIZE_BILINEAR, CircleResizeBilinearGraphBuilder);                          // 23
112   CIRCLE_NODE(RESIZE_NEAREST_NEIGHBOR, CircleResizeNearestNeighborGraphBuilder);           // 97
113   CIRCLE_NODE(REVERSE_SEQUENCE, CircleReverseSequenceGraphBuilder);                        // 112
114   CIRCLE_NODE(REVERSE_V2, CircleReverseV2GraphBuilder);                                    // 105
115   CIRCLE_NODE(ROUND, CircleRoundGraphBuilder);                                             // 116
116   CIRCLE_NODE(RSQRT, CircleRsqrtGraphBuilder);                                             // 76
117   CIRCLE_NODE(SCATTER_ND, CircleScatterNdGraphBuilder);                                    // 122
118   CIRCLE_NODE(SEGMENT_SUM, CircleSegmentSumGraphBuilder);                                  // 125
119   CIRCLE_NODE(SELECT, CircleSelectGraphBuilder);                                           // 64
120   CIRCLE_NODE(SELECT_V2, CircleSelectV2GraphBuilder);                                      // 123
121   CIRCLE_NODE(SHAPE, CircleShapeGraphBuilder);                                             // 77
122   CIRCLE_NODE(SIN, CircleSinGraphBuilder);                                                 // 66
123   CIRCLE_NODE(SLICE, CircleSliceGraphBuilder);                                             // 65
124   CIRCLE_NODE(SOFTMAX, CircleSoftmaxGraphBuilder);                                         // 25
125   CIRCLE_NODE(SPACE_TO_BATCH_ND, CircleSpaceToBatchNDGraphBuilder);                        // 38
126   CIRCLE_NODE(SPACE_TO_DEPTH, CircleSpaceToDepthGraphBuilder);                             // 26
127   CIRCLE_NODE(SPARSE_TO_DENSE, CircleSparseToDenseGraphBuilder);                           // 68
128   CIRCLE_NODE(SPLIT, CircleSplitGraphBuilder);                                             // 49
129   CIRCLE_NODE(SPLIT_V, CircleSplitVGraphBuilder);                                          // 102
130   CIRCLE_NODE(SQRT, CircleSqrtGraphBuilder);                                               // 75
131   CIRCLE_NODE(SQUARE, CircleSquareGraphBuilder);                                           // 92
132   CIRCLE_NODE(SQUARED_DIFFERENCE, CircleSquaredDifferenceGraphBuilder);                    // 99
133   CIRCLE_NODE(SQUEEZE, CircleSqueezeGraphBuilder);                                         // 43
134   CIRCLE_NODE(STRIDED_SLICE, CircleStridedSliceGraphBuilder);                              // 45
135   CIRCLE_NODE(SUB, CircleSubGraphBuilder);                                                 // 41
136   CIRCLE_NODE(SUM, CircleSumGraphBuilder);                                                 // 74
137   CIRCLE_NODE(SVDF, CircleSVDFBuilder);                                                    // 27
138   CIRCLE_NODE(TANH, CircleTanhGraphBuilder);                                               // 28
139   CIRCLE_NODE(TILE, CircleTileGraphBuilder);                                               // 69
140   CIRCLE_NODE(TOPK_V2, CircleTopKV2GraphBuilder);                                          // 48
141   CIRCLE_NODE(TRANSPOSE, CircleTransposeGraphBuilder);                                     // 39
142   CIRCLE_NODE(TRANSPOSE_CONV, CircleTransposeConvGraphBuilder);                            // 67
143   CIRCLE_NODE(UNIDIRECTIONAL_SEQUENCE_LSTM, CircleUnidirectionalSequenceLSTMGraphBuilder); // 44
144   CIRCLE_NODE(UNIQUE, CircleUniqueGraphBuilder);                                           // 103
145   CIRCLE_NODE(UNPACK, CircleUnpackGraphBuilder);                                           // 88
146   CIRCLE_NODE(WHERE, CircleWhereGraphBuilder);                                             // 109
147   CIRCLE_NODE(WHILE, CircleWhileGraphBuilder);                                             // 119
148   CIRCLE_NODE(ZEROS_LIKE, CircleZerosLikeGraphBuilder);                                    // 93
149
150 #undef CIRCLE_NODE
151
152   // BuiltinOperator_EMBEDDING_LOOKUP = 7,
153   // BuiltinOperator_HASHTABLE_LOOKUP = 10,
154   // BuiltinOperator_LSH_PROJECTION = 15,
155   // BuiltinOperator_LSTM = 16,
156   // BuiltinOperator_RNN = 24,
157   // BuiltinOperator_CONCAT_EMBEDDINGS = 29,
158   // BuiltinOperator_SKIP_GRAM = 30,
159   // BuiltinOperator_CALL = 31,
160   // BuiltinOperator_EMBEDDING_LOOKUP_SPARSE = 33,
161   // BuiltinOperator_UNIDIRECTIONAL_SEQUENCE_RNN = 35,
162   // BuiltinOperator_BIDIRECTIONAL_SEQUENCE_RNN = 46,
163   // BuiltinOperator_DELEGATE = 51,
164   // BuiltinOperator_ARG_MAX = 56,
165
166   // Register builders for nodes which not handles in builders registered above.
167 #define CIRCLE_NODE(CLASS) add(std::make_unique<CLASS>())
168
169   CIRCLE_NODE(CircleConstNodeBuilder);
170
171 #undef CIRCLE_NODE
172 }
173
174 } // namespace luci