cc328cc16a4fe160de8d60f40ad30dbf55b15ea1
[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(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(NOT_EQUAL, CircleNotEqualGraphBuilder);                                      // 72
87   CIRCLE_NODE(ONE_HOT, CircleOneHotGraphBuilder);                                          // 85
88   CIRCLE_NODE(PACK, CirclePackGraphBuilder);                                               // 83
89   CIRCLE_NODE(PAD, CirclePadGraphBuilder);                                                 // 34
90   CIRCLE_NODE(POW, CirclePowGraphBuilder);                                                 // 78
91   CIRCLE_NODE(PRELU, CirclePReluGraphBuilder);                                             // 54,
92   CIRCLE_NODE(RANGE, CircleRangeGraphBuilder);                                             // 96
93   CIRCLE_NODE(RANK, CircleRankGraphBuilder);                                               // 110
94   CIRCLE_NODE(REDUCE_ANY, CircleReduceAnyGraphBuilder);                                    // 91
95   CIRCLE_NODE(REDUCE_MAX, CircleReduceMaxGraphBuilder);                                    // 82
96   CIRCLE_NODE(REDUCE_MIN, CircleReduceMinGraphBuilder);                                    // 89
97   CIRCLE_NODE(REDUCE_PROD, CircleReduceProdGraphBuilder);                                  // 81
98   CIRCLE_NODE(RELU, CircleReluGraphBuilder);                                               // 19
99   CIRCLE_NODE(RELU6, CircleRelu6GraphBuilder);                                             // 21
100   CIRCLE_NODE(RELU_N1_TO_1, CircleReluN1To1GraphBuilder);                                  // 20
101   CIRCLE_NODE(RESHAPE, CircleReshapeGraphBuilder);                                         // 22
102   CIRCLE_NODE(RESIZE_BILINEAR, CircleResizeBilinearGraphBuilder);                          // 23
103   CIRCLE_NODE(RESIZE_NEAREST_NEIGHBOR, CircleResizeNearestNeighborGraphBuilder);           // 97
104   CIRCLE_NODE(REVERSE_SEQUENCE, CircleReverseSequenceGraphBuilder);                        // 112
105   CIRCLE_NODE(REVERSE_V2, CircleReverseV2GraphBuilder);                                    // 105
106   CIRCLE_NODE(ROUND, CircleRoundGraphBuilder);                                             // 116
107   CIRCLE_NODE(RSQRT, CircleRsqrtGraphBuilder);                                             // 76
108   CIRCLE_NODE(SCATTER_ND, CircleScatterNdGraphBuilder);                                    // 122
109   CIRCLE_NODE(SEGMENT_SUM, CircleSegmentSumGraphBuilder);                                  // 125
110   CIRCLE_NODE(SELECT, CircleSelectGraphBuilder);                                           // 64
111   CIRCLE_NODE(SELECT_V2, CircleSelectV2GraphBuilder);                                      // 123
112   CIRCLE_NODE(SHAPE, CircleShapeGraphBuilder);                                             // 77
113   CIRCLE_NODE(SIN, CircleSinGraphBuilder);                                                 // 66
114   CIRCLE_NODE(SLICE, CircleSliceGraphBuilder);                                             // 65
115   CIRCLE_NODE(SOFTMAX, CircleSoftmaxGraphBuilder);                                         // 25
116   CIRCLE_NODE(SPACE_TO_BATCH_ND, CircleSpaceToBatchNDGraphBuilder);                        // 38
117   CIRCLE_NODE(SPACE_TO_DEPTH, CircleSpaceToDepthGraphBuilder);                             // 26
118   CIRCLE_NODE(SPARSE_TO_DENSE, CircleSparseToDenseGraphBuilder);                           // 68
119   CIRCLE_NODE(SPLIT, CircleSplitGraphBuilder);                                             // 49
120   CIRCLE_NODE(SPLIT_V, CircleSplitVGraphBuilder);                                          // 102
121   CIRCLE_NODE(SQRT, CircleSqrtGraphBuilder);                                               // 75
122   CIRCLE_NODE(SQUARE, CircleSquareGraphBuilder);                                           // 92
123   CIRCLE_NODE(SQUARED_DIFFERENCE, CircleSquaredDifferenceGraphBuilder);                    // 99
124   CIRCLE_NODE(SQUEEZE, CircleSqueezeGraphBuilder);                                         // 43
125   CIRCLE_NODE(STRIDED_SLICE, CircleStridedSliceGraphBuilder);                              // 45
126   CIRCLE_NODE(SUB, CircleSubGraphBuilder);                                                 // 41
127   CIRCLE_NODE(SUM, CircleSumGraphBuilder);                                                 // 74
128   CIRCLE_NODE(TANH, CircleTanhGraphBuilder);                                               // 28
129   CIRCLE_NODE(TILE, CircleTileGraphBuilder);                                               // 69
130   CIRCLE_NODE(TOPK_V2, CircleTopKV2GraphBuilder);                                          // 48
131   CIRCLE_NODE(TRANSPOSE, CircleTransposeGraphBuilder);                                     // 39
132   CIRCLE_NODE(TRANSPOSE_CONV, CircleTransposeConvGraphBuilder);                            // 67
133   CIRCLE_NODE(UNIQUE, CircleUniqueGraphBuilder);                                           // 103
134   CIRCLE_NODE(UNPACK, CircleUnpackGraphBuilder);                                           // 88
135   CIRCLE_NODE(WHERE, CircleWhereGraphBuilder);                                             // 109
136   CIRCLE_NODE(WHILE, CircleWhileGraphBuilder);                                             // 119
137   CIRCLE_NODE(ZEROS_LIKE, CircleZerosLikeGraphBuilder);                                    // 93
138
139 #undef CIRCLE_NODE
140
141   // BuiltinOperator_DEQUANTIZE = 6,
142   // BuiltinOperator_EMBEDDING_LOOKUP = 7,
143   // BuiltinOperator_HASHTABLE_LOOKUP = 10,
144   // BuiltinOperator_LSH_PROJECTION = 15,
145   // BuiltinOperator_LSTM = 16,
146   // BuiltinOperator_RNN = 24,
147   // BuiltinOperator_SVDF = 27,
148   // BuiltinOperator_CONCAT_EMBEDDINGS = 29,
149   // BuiltinOperator_SKIP_GRAM = 30,
150   // BuiltinOperator_CALL = 31,
151   // BuiltinOperator_EMBEDDING_LOOKUP_SPARSE = 33,
152   // BuiltinOperator_UNIDIRECTIONAL_SEQUENCE_RNN = 35,
153   // BuiltinOperator_UNIDIRECTIONAL_SEQUENCE_LSTM = 44,
154   // BuiltinOperator_BIDIRECTIONAL_SEQUENCE_RNN = 46,
155   // BuiltinOperator_DELEGATE = 51,
156   // BuiltinOperator_BIDIRECTIONAL_SEQUENCE_LSTM = 52,
157   // BuiltinOperator_ARG_MAX = 56,
158   // BuiltinOperator_PADV2 = 60,
159   // BuiltinOperator_FAKE_QUANT = 80,
160   // BuiltinOperator_QUANTIZE = 114,
161   // BuiltinOperator_HARD_SWISH = 117,
162   // BuiltinOperator_NON_MAX_SUPPRESSION_V5 = 121,
163   // BuiltinOperator_DENSIFY = 124,
164 }
165
166 } // namespace luci