Imported Upstream version 1.8.0
[platform/core/ml/nnfw.git] / compiler / luci / lang / include / luci / IR / CircleNodes.h
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 #ifndef __LUCI_IR_CIRCLENODES_H__
18 #define __LUCI_IR_CIRCLENODES_H__
19
20 #include "Nodes/CircleAbs.h"
21 #include "Nodes/CircleAdd.h"
22 #include "Nodes/CircleAddN.h"
23 #include "Nodes/CircleArgMax.h"
24 #include "Nodes/CircleArgMin.h"
25 #include "Nodes/CircleAveragePool2D.h"
26 #include "Nodes/CircleBatchMatMul.h"
27 #include "Nodes/CircleBatchToSpaceND.h"
28 #include "Nodes/CircleCast.h"
29 #include "Nodes/CircleCeil.h"
30 #include "Nodes/CircleConcatenation.h"
31 #include "Nodes/CircleConst.h"
32 #include "Nodes/CircleConv2D.h"
33 #include "Nodes/CircleCos.h"
34 #include "Nodes/CircleCustom.h"
35 #include "Nodes/CircleDepthToSpace.h"
36 #include "Nodes/CircleDepthwiseConv2D.h"
37 #include "Nodes/CircleDiv.h"
38 #include "Nodes/CircleElu.h"
39 #include "Nodes/CircleEqual.h"
40 #include "Nodes/CircleExp.h"
41 #include "Nodes/CircleExpandDims.h"
42 #include "Nodes/CircleFill.h"
43 #include "Nodes/CircleFloor.h"
44 #include "Nodes/CircleFloorDiv.h"
45 #include "Nodes/CircleFloorMod.h"
46 #include "Nodes/CircleFullyConnected.h"
47 #include "Nodes/CircleGather.h"
48 #include "Nodes/CircleGatherNd.h"
49 #include "Nodes/CircleGreater.h"
50 #include "Nodes/CircleGreaterEqual.h"
51 #include "Nodes/CircleIf.h"
52 #include "Nodes/CircleL2Normalize.h"
53 #include "Nodes/CircleL2Pool2D.h"
54 #include "Nodes/CircleLeakyRelu.h"
55 #include "Nodes/CircleLess.h"
56 #include "Nodes/CircleLessEqual.h"
57 #include "Nodes/CircleLocalResponseNormalization.h"
58 #include "Nodes/CircleLog.h"
59 #include "Nodes/CircleLogicalAnd.h"
60 #include "Nodes/CircleLogicalNot.h"
61 #include "Nodes/CircleLogicalOr.h"
62 #include "Nodes/CircleLogistic.h"
63 #include "Nodes/CircleLogSoftmax.h"
64 #include "Nodes/CircleMatrixDiag.h"
65 #include "Nodes/CircleMatrixSetDiag.h"
66 #include "Nodes/CircleMaximum.h"
67 #include "Nodes/CircleMaxPool2D.h"
68 #include "Nodes/CircleMean.h"
69 #include "Nodes/CircleMinimum.h"
70 #include "Nodes/CircleMirrorPad.h"
71 #include "Nodes/CircleMul.h"
72 #include "Nodes/CircleNeg.h"
73 #include "Nodes/CircleNonMaxSuppressionV4.h"
74 #include "Nodes/CircleNotEqual.h"
75 #include "Nodes/CircleOneHot.h"
76 #include "Nodes/CirclePack.h"
77 #include "Nodes/CirclePad.h"
78 #include "Nodes/CirclePadV2.h"
79 #include "Nodes/CirclePow.h"
80 #include "Nodes/CirclePRelu.h"
81 #include "Nodes/CircleRange.h"
82 #include "Nodes/CircleRank.h"
83 #include "Nodes/CircleReduceAny.h"
84 #include "Nodes/CircleReduceMax.h"
85 #include "Nodes/CircleReduceMin.h"
86 #include "Nodes/CircleReduceProd.h"
87 #include "Nodes/CircleRelu.h"
88 #include "Nodes/CircleRelu6.h"
89 #include "Nodes/CircleReluN1To1.h"
90 #include "Nodes/CircleReshape.h"
91 #include "Nodes/CircleResizeBilinear.h"
92 #include "Nodes/CircleResizeNearestNeighbor.h"
93 #include "Nodes/CircleReverseSequence.h"
94 #include "Nodes/CircleReverseV2.h"
95 #include "Nodes/CircleRound.h"
96 #include "Nodes/CircleRsqrt.h"
97 #include "Nodes/CircleScatterNd.h"
98 #include "Nodes/CircleSegmentSum.h"
99 #include "Nodes/CircleSelect.h"
100 #include "Nodes/CircleSelectV2.h"
101 #include "Nodes/CircleShape.h"
102 #include "Nodes/CircleSin.h"
103 #include "Nodes/CircleSlice.h"
104 #include "Nodes/CircleSoftmax.h"
105 #include "Nodes/CircleSpaceToBatchND.h"
106 #include "Nodes/CircleSpaceToDepth.h"
107 #include "Nodes/CircleSparseToDense.h"
108 #include "Nodes/CircleSplit.h"
109 #include "Nodes/CircleSplitV.h"
110 #include "Nodes/CircleSqrt.h"
111 #include "Nodes/CircleSquare.h"
112 #include "Nodes/CircleSquaredDifference.h"
113 #include "Nodes/CircleSqueeze.h"
114 #include "Nodes/CircleStridedSlice.h"
115 #include "Nodes/CircleSub.h"
116 #include "Nodes/CircleSum.h"
117 #include "Nodes/CircleTanh.h"
118 #include "Nodes/CircleTile.h"
119 #include "Nodes/CircleTopKV2.h"
120 #include "Nodes/CircleTranspose.h"
121 #include "Nodes/CircleTransposeConv.h"
122 #include "Nodes/CircleUnique.h"
123 #include "Nodes/CircleUnpack.h"
124 #include "Nodes/CircleWhere.h"
125 #include "Nodes/CircleWhile.h"
126 #include "Nodes/CircleZerosLike.h"
127 // Circle only
128 #include "Nodes/CircleBCQFullyConnected.h"
129 #include "Nodes/CircleBCQGather.h"
130 #include "Nodes/CircleInstanceNorm.h"
131 // Virtual nodes
132 #include "Nodes/CircleInput.h"
133 #include "Nodes/CircleOutput.h"
134 #include "Nodes/CircleCustomOut.h"
135 #include "Nodes/CircleIfOut.h"
136 #include "Nodes/CircleNonMaxSuppressionV4Out.h"
137 #include "Nodes/CircleUnpackOut.h"
138 #include "Nodes/CircleUniqueOut.h"
139 #include "Nodes/CircleSplitOut.h"
140 #include "Nodes/CircleSplitVOut.h"
141 #include "Nodes/CircleTopKV2Out.h"
142 #include "Nodes/CircleWhileOut.h"
143
144 #include <loco/IR/Graph.h>
145
146 namespace luci
147 {
148
149 /**
150  * @brief  Set both CircleReshape's 2nd input as CircleConst, and newShape attribute
151  *         with same value
152  * @note   Shape inference for TFLReshape forces them to be same
153  *
154  * TODO find better place for this helper
155  */
156 void set_new_shape(CircleReshape *node, int32_t *base, uint32_t size);
157
158 /// @brief Link GraphOutput with CircleOutput node
159 void link(loco::GraphOutput *, CircleOutput *);
160
161 /// @brief Link GraphInput with CircleInput node
162 void link(loco::GraphInput *, CircleInput *);
163
164 /// @brief Find a CircleOutput node with a given output index
165 CircleOutput *output_node(loco::Graph *g, const loco::GraphOutputIndex &index);
166
167 /// @brief Find a Pull node with a given input index
168 CircleInput *input_node(loco::Graph *g, const loco::GraphInputIndex &index);
169
170 } // namespace luci
171
172 #endif // __LUCI_IR_CIRCLENODES_H__