• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef LIBABCKIT_SRC_ADAPTER_STATIC_IR_STATIC_H
17 #define LIBABCKIT_SRC_ADAPTER_STATIC_IR_STATIC_H
18 
19 #include "libabckit/include/c/metadata_core.h"
20 #include "libabckit/include/c/ir_core.h"
21 #include "libabckit/include/c/isa/isa_dynamic.h"
22 #include "libabckit/src/include_v2/c/isa/isa_static.h"
23 
24 #include <cstdint>
25 #include <cstdarg>
26 
27 namespace libabckit {
28 
29 // ========================================
30 // Api for Graph manipulation
31 // ========================================
32 
33 AbckitBasicBlock *GgetStartBasicBlockStatic(AbckitGraph *graph);
34 AbckitBasicBlock *GgetEndBasicBlockStatic(AbckitGraph *graph);
35 AbckitBasicBlock *GgetBasicBlockStatic(AbckitGraph *graph, uint32_t id);
36 uint32_t GgetNumberOfParametersStatic(AbckitGraph *graph);
37 AbckitInst *GgetParameterStatic(AbckitGraph *graph, uint32_t index);
38 void GinsertTryCatchStatic(AbckitBasicBlock *tryFirstBB, AbckitBasicBlock *tryLastBB, AbckitBasicBlock *catchBeginBB,
39                            AbckitBasicBlock *catchEndBB);
40 uint32_t GgetNumberOfBasicBlocksStatic(AbckitGraph *graph);
41 void GdumpStatic(AbckitGraph *graph, int fd);
42 void GrunPassRemoveUnreachableBlocksStatic(AbckitGraph *graph);
43 void IdumpStatic(AbckitInst *inst, int fd);
44 bool GvisitBlocksRPOStatic(AbckitGraph *graph, void *data, bool (*cb)(AbckitBasicBlock *bb, void *data));
45 
46 // ========================================
47 // Api for basic block manipulation
48 // ========================================
49 
50 bool BBvisitSuccBlocksStatic(AbckitBasicBlock *curBasicBlock, void *data,
51                              bool (*cb)(AbckitBasicBlock *succBasicBlock, void *data));
52 bool BBvisitPredBlocksStatic(AbckitBasicBlock *curBasicBlock, void *data,
53                              bool (*cb)(AbckitBasicBlock *succBasicBlock, void *data));
54 bool BBvisitDominatedBlocksStatic(AbckitBasicBlock *basicBlock, void *data,
55                                   bool (*cb)(AbckitBasicBlock *dominatedBasicBlock, void *data));
56 AbckitInst *BBgetFirstInstStatic(AbckitBasicBlock *basicBlock);
57 AbckitInst *BBgetLastInstStatic(AbckitBasicBlock *basicBlock);
58 AbckitGraph *BBgetGraphStatic(AbckitBasicBlock *basicBlock);
59 AbckitBasicBlock *BBgetTrueBranchStatic(AbckitBasicBlock *bb);
60 AbckitBasicBlock *BBgetFalseBranchStatic(AbckitBasicBlock *bb);
61 AbckitBasicBlock *BBcreateEmptyStatic(AbckitGraph *graph);
62 AbckitBasicBlock *BBgetSuccBlockStatic(AbckitBasicBlock *basicBlock, uint32_t index);
63 AbckitBasicBlock *BBgetPredBlockStatic(AbckitBasicBlock *basicBlock, uint32_t index);
64 AbckitBasicBlock *BBgetImmediateDominatorStatic(AbckitBasicBlock *basicBlock);
65 uint64_t BBgetSuccBlockCountStatic(AbckitBasicBlock *basicBlock);
66 uint64_t BBgetPredBlockCountStatic(AbckitBasicBlock *basicBlock);
67 uint32_t BBgetIdStatic(AbckitBasicBlock *basicBlock);
68 uint32_t BBgetNumberOfInstructionsStatic(AbckitBasicBlock *basicBlock);
69 AbckitBasicBlock *BBsplitBlockAfterInstructionStatic(AbckitBasicBlock *basicBlock, AbckitInst *inst, bool makeEdge);
70 void BBremoveAllInstsStatic(AbckitBasicBlock *basicBlock);
71 void BBaddInstFrontStatic(AbckitBasicBlock *basicBlock, AbckitInst *inst);
72 void BBaddInstBackStatic(AbckitBasicBlock *basicBlock, AbckitInst *inst);
73 void BBdumpStatic(AbckitBasicBlock *basicBlock, int fd);
74 void BBinsertSuccBlockStatic(AbckitBasicBlock *basicBlock, AbckitBasicBlock *succBlock, uint32_t index);
75 void BBappendSuccBlockStatic(AbckitBasicBlock *basicBlock, AbckitBasicBlock *succBlock);
76 void BBdisconnectSuccBlockStatic(AbckitBasicBlock *bb, size_t index);
77 bool BBisStartStatic(AbckitBasicBlock *basicBlock);
78 bool BBisEndStatic(AbckitBasicBlock *basicBlock);
79 bool BBisLoopHeadStatic(AbckitBasicBlock *basicBlock);
80 bool BBisLoopPreheadStatic(AbckitBasicBlock *basicBlock);
81 bool BBisTryBeginStatic(AbckitBasicBlock *basicBlock);
82 bool BBisTryStatic(AbckitBasicBlock *basicBlock);
83 bool BBisTryEndStatic(AbckitBasicBlock *basicBlock);
84 bool BBisCatchBeginStatic(AbckitBasicBlock *basicBlock);
85 bool BBisCatchStatic(AbckitBasicBlock *basicBlock);
86 bool BBcheckDominanceStatic(AbckitBasicBlock *basicBlock, AbckitBasicBlock *dominator);
87 AbckitInst *BBcreatePhiStatic(AbckitBasicBlock *bb, size_t argCount, std::va_list args);
88 AbckitInst *BBcreateCatchPhiStatic(AbckitBasicBlock *catchBegin, size_t argCount, std::va_list args);
89 
90 // ========================================
91 // Api for instruction manipulation
92 // ========================================
93 
94 AbckitInst *IcreateCallStaticStatic(AbckitGraph *graph, AbckitCoreFunction *inputFunction, size_t argCount,
95                                     va_list argp);
96 AbckitInst *IcreateCallVirtualStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitCoreFunction *inputFunction,
97                                      size_t argCount, va_list argp);
98 AbckitInst *IcreateLoadStringStatic(AbckitGraph *graph, AbckitString *str);
99 AbckitInst *GfindOrCreateConstantI32Static(AbckitGraph *graph, int32_t value);
100 AbckitInst *GfindOrCreateConstantI64Static(AbckitGraph *graph, int64_t value);
101 AbckitInst *GfindOrCreateConstantU64Static(AbckitGraph *graph, uint64_t value);
102 AbckitInst *GfindOrCreateConstantF64Static(AbckitGraph *graph, double value);
103 
104 AbckitInst *IcreateCmpStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
105 AbckitInst *IcreateNegStatic(AbckitGraph *graph, AbckitInst *input0);
106 
107 AbckitInst *IcreateAddStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
108 AbckitInst *IcreateSubStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
109 AbckitInst *IcreateMulStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
110 AbckitInst *IcreateDivStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
111 AbckitInst *IcreateModStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
112 AbckitInst *IcreateEqualsStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
113 
114 AbckitInst *IcreateAddIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
115 AbckitInst *IcreateSubIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
116 AbckitInst *IcreateMulIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
117 AbckitInst *IcreateDivIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
118 AbckitInst *IcreateModIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
119 
120 AbckitInst *IcreateShlStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
121 AbckitInst *IcreateShrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
122 AbckitInst *IcreateAShrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
123 
124 AbckitInst *IcreateShlIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
125 AbckitInst *IcreateShrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
126 AbckitInst *IcreateAShrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
127 
128 AbckitInst *IcreateNotStatic(AbckitGraph *graph, AbckitInst *input0);
129 AbckitInst *IcreateOrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
130 AbckitInst *IcreateXorStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
131 AbckitInst *IcreateAndStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
132 
133 AbckitInst *IcreateOrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
134 AbckitInst *IcreateXorIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
135 AbckitInst *IcreateAndIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
136 
137 AbckitInst *IcreateLoadArrayStatic(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx,
138                                    AbckitTypeId returnTypeId);
139 AbckitInst *IcreateStoreArrayStatic(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx, AbckitInst *value,
140                                     AbckitTypeId valueTypeId);
141 AbckitInst *IcreateStoreArrayWideStatic(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx, AbckitInst *value,
142                                         AbckitTypeId valueTypeId);
143 AbckitInst *IcreateLenArrayStatic(AbckitGraph *graph, AbckitInst *arr);
144 AbckitInst *IcreateLoadConstArrayStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray);
145 
146 AbckitInst *IcreateCheckCastStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitType *targetType);
147 AbckitInst *IcreateIsInstanceStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitType *targetType);
148 AbckitInst *IcreateLoadUndefinedStatic(AbckitGraph *graph);
149 AbckitInst *IcreateCastStatic(AbckitGraph *graph, AbckitInst *input0, AbckitTypeId targetTypeId);
150 AbckitInst *IcreateIsUndefinedStatic(AbckitGraph *graph, AbckitInst *inputObj);
151 
152 AbckitInst *IcreateThrowStatic(AbckitGraph *graph, AbckitInst *input0);
153 
154 AbckitInst *IcreateReturnStatic(AbckitGraph *graph, AbckitInst *input0);
155 AbckitInst *IcreateReturnVoidStatic(AbckitGraph *graph);
156 AbckitInst *GcreateNullPtrStatic(AbckitGraph *graph);
157 
158 int32_t IgetConstantValueI32Static(AbckitInst *inst);
159 int64_t IgetConstantValueI64Static(AbckitInst *inst);
160 uint64_t IgetConstantValueU64Static(AbckitInst *inst);
161 double IgetConstantValueF64Static(AbckitInst *inst);
162 AbckitLiteralArray *IgetLiteralArrayStatic(AbckitInst *inst);
163 void IsetLiteralArrayStatic(AbckitInst *inst, AbckitLiteralArray *la);
164 AbckitString *IgetStringStatic(AbckitInst *inst);
165 void IsetStringStatic(AbckitInst *inst, AbckitString *str);
166 
167 AbckitInst *IcreateDynCallthis0Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
168 AbckitInst *IcreateDynCallthis1Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
169 AbckitInst *IcreateDynCallarg0Static(AbckitGraph *graph, AbckitInst *acc);
170 AbckitInst *IcreateDynCallarg1Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
171 AbckitInst *IcreateDynTryldglobalbynameStatic(AbckitGraph *graph, AbckitString *string);
172 AbckitInst *IcreateDynLdobjbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
173 AbckitInst *IcreateDynNewobjrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args);
174 
175 AbckitInst *IcreateDynDefinefuncStatic(AbckitGraph *graph, AbckitCoreFunction *function, uint64_t imm0);
176 
177 AbckitInst *IcreateDynNegStatic(AbckitGraph *graph, AbckitInst *acc);
178 
179 AbckitInst *IcreateDynAdd2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
180 AbckitInst *IcreateDynSub2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
181 AbckitInst *IcreateDynMul2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
182 AbckitInst *IcreateDynDiv2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
183 AbckitInst *IcreateDynMod2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
184 AbckitInst *IcreateDynExpStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
185 
186 AbckitInst *IcreateDynShl2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
187 AbckitInst *IcreateDynShr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
188 AbckitInst *IcreateDynAshr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
189 
190 AbckitInst *IcreateDynNotStatic(AbckitGraph *graph, AbckitInst *acc);
191 AbckitInst *IcreateDynOr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
192 AbckitInst *IcreateDynXor2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
193 AbckitInst *IcreateDynAnd2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
194 
195 AbckitInst *IcreateDynIncStatic(AbckitGraph *graph, AbckitInst *acc);
196 AbckitInst *IcreateDynDecStatic(AbckitGraph *graph, AbckitInst *acc);
197 
198 AbckitInst *IcreateDynEqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
199 AbckitInst *IcreateDynNoteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
200 AbckitInst *IcreateDynLessStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
201 AbckitInst *IcreateDynLesseqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
202 AbckitInst *IcreateDynGreaterStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
203 AbckitInst *IcreateDynGreatereqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
204 AbckitInst *IcreateDynStrictnoteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
205 AbckitInst *IcreateDynStricteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
206 
207 AbckitInst *IcreateDynIstrueStatic(AbckitGraph *graph, AbckitInst *acc);
208 AbckitInst *IcreateDynIsfalseStatic(AbckitGraph *graph, AbckitInst *acc);
209 AbckitInst *IcreateDynTonumberStatic(AbckitGraph *graph, AbckitInst *acc);
210 AbckitInst *IcreateDynTonumericStatic(AbckitGraph *graph, AbckitInst *acc);
211 
212 AbckitInst *IcreateDynThrowStatic(AbckitGraph *graph, AbckitInst *acc);
213 AbckitInst *IcreateDynThrowNotexistsStatic(AbckitGraph *graph);
214 AbckitInst *IcreateDynThrowPatternnoncoercibleStatic(AbckitGraph *graph);
215 AbckitInst *IcreateDynThrowDeletesuperpropertyStatic(AbckitGraph *graph);
216 AbckitInst *IcreateDynThrowConstassignmentStatic(AbckitGraph *graph, AbckitInst *input0);
217 AbckitInst *IcreateDynThrowIfnotobjectStatic(AbckitGraph *graph, AbckitInst *input0);
218 AbckitInst *IcreateDynThrowUndefinedifholeStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
219 AbckitInst *IcreateDynThrowIfsupernotcorrectcallStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0);
220 AbckitInst *IcreateDynThrowUndefinedifholewithnameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
221 
222 AbckitInst *IcreateDynLdnanStatic(AbckitGraph *graph);
223 AbckitInst *IcreateDynLdinfinityStatic(AbckitGraph *graph);
224 AbckitInst *IcreateDynLdundefinedStatic(AbckitGraph *graph);
225 AbckitInst *IcreateDynLdnullStatic(AbckitGraph *graph);
226 AbckitInst *IcreateDynLdsymbolStatic(AbckitGraph *graph);
227 AbckitInst *IcreateDynLdglobalStatic(AbckitGraph *graph);
228 AbckitInst *IcreateDynLdtrueStatic(AbckitGraph *graph);
229 AbckitInst *IcreateDynLdfalseStatic(AbckitGraph *graph);
230 AbckitInst *IcreateDynLdholeStatic(AbckitGraph *graph);
231 AbckitInst *IcreateDynLdfunctionStatic(AbckitGraph *graph);
232 AbckitInst *IcreateDynLdnewtargetStatic(AbckitGraph *graph);
233 AbckitInst *IcreateDynLdthisStatic(AbckitGraph *graph);
234 
235 AbckitInst *IcreateDynTypeofStatic(AbckitGraph *graph, AbckitInst *acc);
236 AbckitInst *IcreateDynIsinStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
237 AbckitInst *IcreateDynInstanceofStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
238 AbckitInst *IcreateDynReturnStatic(AbckitGraph *graph, AbckitInst *acc);
239 AbckitInst *IcreateDynReturnundefinedStatic(AbckitGraph *graph);
240 
241 AbckitInst *IcreateDynStownbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, AbckitInst *input0);
242 AbckitInst *IcreateDynStownbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
243 AbckitInst *IcreateDynStownbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0);
244 AbckitInst *IcreateDynWideStownbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0);
245 AbckitInst *IcreateDynStownbynamewithnamesetStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string,
246                                                    AbckitInst *input0);
247 AbckitInst *IcreateDynStownbyvaluewithnamesetStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0,
248                                                     AbckitInst *input1);
249 AbckitInst *IcreateDynStobjbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
250 AbckitInst *IcreateDynStobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0);
251 AbckitInst *IcreateDynWideStobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0);
252 AbckitInst *IcreateDynStobjbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, AbckitInst *input0);
253 
254 AbckitInst *IcreateDynCreateemptyobjectStatic(AbckitGraph *graph);
255 
256 AbckitInst *IcreateDynPoplexenvStatic(AbckitGraph *graph);
257 AbckitInst *IcreateDynGetunmappedargsStatic(AbckitGraph *graph);
258 AbckitInst *IcreateDynAsyncfunctionenterStatic(AbckitGraph *graph);
259 AbckitInst *IcreateDynDebuggerStatic(AbckitGraph *graph);
260 AbckitInst *IcreateDynGetpropiteratorStatic(AbckitGraph *graph, AbckitInst *acc);
261 AbckitInst *IcreateDynGetiteratorStatic(AbckitGraph *graph, AbckitInst *acc);
262 AbckitInst *IcreateDynGetasynciteratorStatic(AbckitGraph *graph, AbckitInst *acc);
263 AbckitInst *IcreateDynLdprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1);
264 AbckitInst *IcreateDynStprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1,
265                                               AbckitInst *input0);
266 AbckitInst *IcreateDynTestinStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1);
267 AbckitInst *IcreateDynDefinefieldbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string,
268                                               AbckitInst *input0);
269 AbckitInst *IcreateDynDefinepropertybynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string,
270                                                  AbckitInst *input0);
271 AbckitInst *IcreateDynCreateemptyarrayStatic(AbckitGraph *graph);
272 AbckitInst *IcreateDynCreategeneratorobjStatic(AbckitGraph *graph, AbckitInst *input0);
273 AbckitInst *IcreateDynCreateiterresultobjStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
274 AbckitInst *IcreateDynCreateobjectwithexcludedkeysStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
275                                                          uint64_t imm0, std::va_list args);
276 AbckitInst *IcreateDynWideCreateobjectwithexcludedkeysStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
277                                                              uint64_t imm0, std::va_list args);
278 
279 AbckitInst *IcreateDynDefineclasswithbufferStatic(AbckitGraph *graph, AbckitCoreFunction *function,
280                                                   AbckitLiteralArray *literalArray, uint64_t imm0, AbckitInst *input0);
281 AbckitInst *IcreateDynNewobjapplyStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
282 AbckitInst *IcreateDynWideNewobjrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args);
283 AbckitInst *IcreateDynNewlexenvStatic(AbckitGraph *graph, uint64_t imm0);
284 AbckitInst *IcreateDynWideNewlexenvStatic(AbckitGraph *graph, uint64_t imm0);
285 AbckitInst *IcreateDynNewlexenvwithnameStatic(AbckitGraph *graph, uint64_t imm0, AbckitLiteralArray *literalArray);
286 AbckitInst *IcreateDynWideNewlexenvwithnameStatic(AbckitGraph *graph, uint64_t imm0, AbckitLiteralArray *literalArray);
287 
288 AbckitInst *IcreateDynCreateasyncgeneratorobjStatic(AbckitGraph *graph, AbckitInst *input0);
289 AbckitInst *IcreateDynAsyncgeneratorresolveStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
290                                                   AbckitInst *input2);
291 AbckitInst *IcreateDynCallruntimeNotifyconcurrentresultStatic(AbckitGraph *graph, AbckitInst *acc);
292 AbckitInst *IcreateDynCallruntimeDefinefieldbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0,
293                                                           AbckitInst *input1);
294 AbckitInst *IcreateDynCallruntimeDefinefieldbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0,
295                                                           AbckitInst *input0);
296 AbckitInst *IcreateDynCallruntimeTopropertykeyStatic(AbckitGraph *graph, AbckitInst *acc);
297 
298 AbckitInst *IcreateDynCallruntimeDefineprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0,
299                                                              uint64_t imm1, AbckitInst *input0);
300 AbckitInst *IcreateDynCallruntimeCallinitStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
301 
302 AbckitInst *IcreateDynCallruntimeDefinesendableclassStatic(AbckitGraph *graph, AbckitCoreFunction *function,
303                                                            AbckitLiteralArray *literalArray, uint64_t imm0,
304                                                            AbckitInst *input0);
305 AbckitInst *IcreateDynCallruntimeLdsendableclassStatic(AbckitGraph *graph, uint64_t imm0);
306 AbckitInst *IcreateDynCallruntimeLdsendableexternalmodulevarStatic(AbckitGraph *graph, uint64_t imm0);
307 AbckitInst *IcreateDynCallruntimeWideldsendableexternalmodulevarStatic(AbckitGraph *graph, uint64_t imm0);
308 AbckitInst *IcreateDynCallruntimeNewsendableenvStatic(AbckitGraph *graph, uint64_t imm0);
309 AbckitInst *IcreateDynCallruntimeWidenewsendableenvStatic(AbckitGraph *graph, uint64_t imm0);
310 AbckitInst *IcreateDynCallruntimeStsendablevarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1);
311 AbckitInst *IcreateDynCallruntimeWidestsendablevarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0,
312                                                          uint64_t imm1);
313 AbckitInst *IcreateDynCallruntimeLdsendablevarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1);
314 AbckitInst *IcreateDynCallruntimeWideldsendablevarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1);
315 AbckitInst *IcreateDynCallruntimeIstrueStatic(AbckitGraph *graph, AbckitInst *acc);
316 AbckitInst *IcreateDynCallruntimeIsfalseStatic(AbckitGraph *graph, AbckitInst *acc);
317 AbckitInst *IcreateDynCallruntimeCreateprivatepropertyStatic(AbckitGraph *graph, uint64_t imm0,
318                                                              AbckitLiteralArray *literalArray);
319 AbckitInst *IcreateDynCallargs2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
320 AbckitInst *IcreateDynCallargs3Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1,
321                                       AbckitInst *input2);
322 AbckitInst *IcreateDynCallrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args);
323 AbckitInst *IcreateDynWideCallrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args);
324 AbckitInst *IcreateDynSupercallspreadStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
325 AbckitInst *IcreateDynApplyStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
326 AbckitInst *IcreateDynCallthis2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1,
327                                       AbckitInst *input2);
328 // CC-OFFNXT(G.FUN.01) This is function from public API
329 AbckitInst *IcreateDynCallthis3Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1,
330                                       AbckitInst *input2, AbckitInst *input3);
331 AbckitInst *IcreateDynCallthisrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args);
332 AbckitInst *IcreateDynWideCallthisrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args);
333 AbckitInst *IcreateDynSupercallthisrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args);
334 AbckitInst *IcreateDynWideSupercallthisrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args);
335 AbckitInst *IcreateDynSupercallarrowrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount,
336                                                 std::va_list args);
337 AbckitInst *IcreateDynWideSupercallarrowrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount,
338                                                     std::va_list args);
339 // CC-OFFNXT(G.FUN.01) This is function from public API
340 AbckitInst *IcreateDynDefinegettersetterbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0,
341                                                       AbckitInst *input1, AbckitInst *input2, AbckitInst *input3);
342 
343 AbckitInst *IcreateDynResumegeneratorStatic(AbckitGraph *graph, AbckitInst *acc);
344 AbckitInst *IcreateDynGetresumemodeStatic(AbckitGraph *graph, AbckitInst *acc);
345 AbckitInst *IcreateDynGettemplateobjectStatic(AbckitGraph *graph, AbckitInst *acc);
346 AbckitInst *IcreateDynGetnextpropnameStatic(AbckitGraph *graph, AbckitInst *input0);
347 AbckitInst *IcreateDynDelobjpropStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
348 AbckitInst *IcreateDynSuspendgeneratorStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
349 AbckitInst *IcreateDynAsyncfunctionawaituncaughtStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
350 AbckitInst *IcreateDynCopydatapropertiesStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
351 AbckitInst *IcreateDynStarrayspreadStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
352 AbckitInst *IcreateDynSetobjectwithprotoStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
353 AbckitInst *IcreateDynLdobjbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
354 AbckitInst *IcreateDynLdsuperbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
355 AbckitInst *IcreateDynStsuperbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
356 AbckitInst *IcreateDynLdobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0);
357 AbckitInst *IcreateDynWideLdobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0);
358 AbckitInst *IcreateDynAsyncfunctionresolveStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
359 AbckitInst *IcreateDynAsyncfunctionrejectStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
360 AbckitInst *IcreateDynCopyrestargsStatic(AbckitGraph *graph, uint64_t imm0);
361 AbckitInst *IcreateDynWideCopyrestargsStatic(AbckitGraph *graph, uint64_t imm0);
362 AbckitInst *IcreateDynLdlexvarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1);
363 AbckitInst *IcreateDynWideLdlexvarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1);
364 AbckitInst *IcreateDynStlexvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1);
365 AbckitInst *IcreateDynWideStlexvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1);
366 
367 AbckitInst *IcreateDynTrystglobalbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
368 AbckitInst *IcreateDynLdglobalvarStatic(AbckitGraph *graph, AbckitString *string);
369 AbckitInst *IcreateDynStglobalvarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
370 AbckitInst *IcreateDynLdsuperbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
371 AbckitInst *IcreateDynStsuperbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string,
372                                           AbckitInst *input0);
373 
374 AbckitInst *IcreateDynLdbigintStatic(AbckitGraph *graph, AbckitString *string);
375 AbckitInst *IcreateDynLdthisbynameStatic(AbckitGraph *graph, AbckitString *string);
376 AbckitInst *IcreateDynStthisbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
377 AbckitInst *IcreateDynLdthisbyvalueStatic(AbckitGraph *graph, AbckitInst *acc);
378 AbckitInst *IcreateDynStthisbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
379 AbckitInst *IcreateDynWideLdpatchvarStatic(AbckitGraph *graph, uint64_t imm0);
380 AbckitInst *IcreateDynWideStpatchvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0);
381 AbckitInst *IcreateDynDynamicimportStatic(AbckitGraph *graph, AbckitInst *acc);
382 AbckitInst *IcreateDynAsyncgeneratorrejectStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
383 AbckitInst *IcreateDynSetgeneratorstateStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0);
384 
385 AbckitInst *IcreateDynGetmodulenamespaceStatic(AbckitGraph *graph, AbckitCoreModule *md);
386 AbckitInst *IcreateDynWideGetmodulenamespaceStatic(AbckitGraph *graph, AbckitCoreModule *md);
387 AbckitInst *IcreateDynLdexternalmodulevarStatic(AbckitGraph *graph, AbckitCoreImportDescriptor *id);
388 AbckitInst *IcreateDynWideLdexternalmodulevarStatic(AbckitGraph *graph, AbckitCoreImportDescriptor *id);
389 AbckitInst *IcreateDynLdlocalmodulevarStatic(AbckitGraph *graph, AbckitCoreExportDescriptor *ed);
390 AbckitInst *IcreateDynWideLdlocalmodulevarStatic(AbckitGraph *graph, AbckitCoreExportDescriptor *ed);
391 AbckitInst *IcreateDynStmodulevarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreExportDescriptor *ed);
392 AbckitInst *IcreateDynWideStmodulevarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreExportDescriptor *ed);
393 AbckitInst *IcreateDynCreatearraywithbufferStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray);
394 AbckitInst *IcreateDynCreateobjectwithbufferStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray);
395 
396 AbckitInst *IcreateDynDefinemethodStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreFunction *function,
397                                          uint64_t imm0);
398 
399 void IremoveStatic(AbckitInst *inst);
400 uint32_t IgetIdStatic(AbckitInst *inst);
401 AbckitIsaApiStaticOpcode IgetOpcodeStaticStatic(AbckitInst *inst);
402 AbckitIsaApiDynamicOpcode IgetOpcodeDynamicStatic(AbckitInst *inst);
403 
404 AbckitInst *IgetNextStatic(AbckitInst *instnext);
405 AbckitInst *IgetPrevStatic(AbckitInst *instprev);
406 void IinsertAfterStatic(AbckitInst *inst, AbckitInst *next);
407 void IinsertBeforeStatic(AbckitInst *inst, AbckitInst *prev);
408 bool IcheckDominanceStatic(AbckitInst *inst, AbckitInst *dominator);
409 bool IvisitUsersStatic(AbckitInst *inst, void *data, bool (*cb)(AbckitInst *user, void *data));
410 bool IvisitInputsStatic(AbckitInst *inst, void *data, bool (*cb)(AbckitInst *input, size_t inputIdx, void *data));
411 uint32_t IgetUserCountStatic(AbckitInst *inst);
412 void IsetImmediateStatic(AbckitInst *inst, size_t idx, uint64_t imm);
413 AbckitBitImmSize IgetImmediateSizeStatic(AbckitInst *inst, size_t idx);
414 
415 uint64_t IgetInputCountStatic(AbckitInst *inst);
416 AbckitInst *IgetInputStatic(AbckitInst *inst, size_t index);
417 void IsetInputStatic(AbckitInst *inst, AbckitInst *input, int32_t index);
418 void IsetInputsStatic(AbckitInst *inst, size_t argCount, std::va_list args);
419 void IappendInputStatic(AbckitInst *inst, AbckitInst *input);
420 AbckitType *IgetTypeStatic(AbckitInst *inst);
421 AbckitTypeId IgetTargetTypeStatic(AbckitInst *inst);
422 void IsetTargetTypeStatic(AbckitInst *inst, AbckitTypeId t);
423 AbckitCoreFunction *IgetFunctionStatic(AbckitInst *inst);
424 void IsetFunctionStatic(AbckitInst *inst, AbckitCoreFunction *function);
425 void IsetClassStatic(AbckitInst *inst, AbckitCoreClass *klass);
426 AbckitCoreClass *IgetClassStatic(AbckitInst *inst);
427 uint64_t IgetImmediateStatic(AbckitInst *inst, size_t idx);
428 uint64_t IgetImmediateCountStatic(AbckitInst *inst);
429 AbckitInst *IcreateIfStaticStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
430                                   AbckitIsaApiStaticConditionCode cc);
431 AbckitInst *IcreateIfDynamicStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
432                                    AbckitIsaApiDynamicConditionCode cc);
433 AbckitInst *IcreateTryStatic(AbckitGraph *graph);
434 AbckitBasicBlock *IgetBasicBlockStatic(AbckitInst *inst);
435 AbckitGraph *IgetGraphStatic(AbckitInst *inst);
436 AbckitCoreModule *IgetModuleStatic(AbckitInst *inst);
437 uint32_t GetImportDescriptorIdxDynamic(AbckitGraph *graph, AbckitCoreImportDescriptor *id);
438 uint32_t GetExportDescriptorIdxDynamic(AbckitGraph *graph, AbckitCoreExportDescriptor *ed);
439 uint64_t GetModuleIndex(AbckitGraph *graph, AbckitCoreModule *md);
440 void IsetModuleStatic(AbckitInst *inst, AbckitCoreModule *md);
441 AbckitCoreImportDescriptor *IgetImportDescriptorStatic(AbckitInst *inst);
442 void IsetImportDescriptorStatic(AbckitInst *inst, AbckitCoreImportDescriptor *id);
443 AbckitCoreExportDescriptor *IgetExportDescriptorStatic(AbckitInst *inst);
444 void IsetExportDescriptorStatic(AbckitInst *inst, AbckitCoreExportDescriptor *ed);
445 AbckitIsaApiStaticConditionCode IgetConditionCodeStaticStatic(AbckitInst *inst);
446 AbckitIsaApiDynamicConditionCode IgetConditionCodeDynamicStatic(AbckitInst *inst);
447 void IsetConditionCodeStaticStatic(AbckitInst *inst, AbckitIsaApiStaticConditionCode cc);
448 void IsetConditionCodeDynamicStatic(AbckitInst *inst, AbckitIsaApiDynamicConditionCode cc);
449 
450 AbckitInst *IcreateDynCallarg0Dynamic(AbckitGraph *graph, AbckitInst *acc);
451 AbckitInst *IcreateDynCallarg1Dynamic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
452 AbckitInst *IcreateDynIfStatic(AbckitGraph *graph, AbckitInst *input, AbckitIsaApiDynamicConditionCode cc);
453 
454 AbckitInst *IcreateNewArrayStatic(AbckitGraph *graph, AbckitCoreClass *inputClass, AbckitInst *inputSize);
455 
456 AbckitInst *IcreateNewObjectStatic(AbckitGraph *graph, AbckitCoreClass *inputClass);
457 AbckitInst *IcreateInitObjectStatic(AbckitGraph *graph, AbckitCoreFunction *inputFunction, size_t argCount,
458                                     va_list argp);
459 
460 bool IcheckIsCallStatic(AbckitInst *inst);
461 
462 }  // namespace libabckit
463 
464 #endif
465