• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2024-2025 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/include/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 AbckitInst *IcreateStrictEqualsStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
114 
115 AbckitInst *IcreateAddIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
116 AbckitInst *IcreateSubIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
117 AbckitInst *IcreateMulIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
118 AbckitInst *IcreateDivIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
119 AbckitInst *IcreateModIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
120 
121 AbckitInst *IcreateShlStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
122 AbckitInst *IcreateShrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
123 AbckitInst *IcreateAShrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
124 
125 AbckitInst *IcreateShlIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
126 AbckitInst *IcreateShrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
127 AbckitInst *IcreateAShrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
128 
129 AbckitInst *IcreateNotStatic(AbckitGraph *graph, AbckitInst *input0);
130 AbckitInst *IcreateOrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
131 AbckitInst *IcreateXorStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
132 AbckitInst *IcreateAndStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
133 
134 AbckitInst *IcreateOrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
135 AbckitInst *IcreateXorIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
136 AbckitInst *IcreateAndIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm);
137 
138 AbckitInst *IcreateLoadArrayStatic(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx,
139                                    AbckitTypeId returnTypeId);
140 AbckitInst *IcreateStoreArrayStatic(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx, AbckitInst *value,
141                                     AbckitTypeId valueTypeId);
142 AbckitInst *IcreateStoreArrayWideStatic(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx, AbckitInst *value,
143                                         AbckitTypeId valueTypeId);
144 AbckitInst *IcreateLenArrayStatic(AbckitGraph *graph, AbckitInst *arr);
145 AbckitInst *IcreateLoadConstArrayStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray);
146 
147 AbckitInst *IcreateCheckCastStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitType *targetType);
148 AbckitInst *IcreateIsInstanceStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitType *targetType);
149 AbckitInst *IcreateLoadNullValueStatic(AbckitGraph *graph);
150 AbckitInst *IcreateCastStatic(AbckitGraph *graph, AbckitInst *input0, AbckitTypeId targetTypeId);
151 AbckitInst *IcreateIsUndefinedStatic(AbckitGraph *graph, AbckitInst *inputObj);
152 
153 AbckitInst *IcreateThrowStatic(AbckitGraph *graph, AbckitInst *input0);
154 
155 AbckitInst *IcreateReturnStatic(AbckitGraph *graph, AbckitInst *input0);
156 AbckitInst *IcreateReturnVoidStatic(AbckitGraph *graph);
157 AbckitInst *GcreateNullPtrStatic(AbckitGraph *graph);
158 
159 int32_t IgetConstantValueI32Static(AbckitInst *inst);
160 int64_t IgetConstantValueI64Static(AbckitInst *inst);
161 uint64_t IgetConstantValueU64Static(AbckitInst *inst);
162 double IgetConstantValueF64Static(AbckitInst *inst);
163 AbckitLiteralArray *IgetLiteralArrayStatic(AbckitInst *inst);
164 void IsetLiteralArrayStatic(AbckitInst *inst, AbckitLiteralArray *la);
165 AbckitString *IgetStringStatic(AbckitInst *inst);
166 void IsetStringStatic(AbckitInst *inst, AbckitString *str);
167 
168 AbckitInst *IcreateDynCallthis0Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
169 AbckitInst *IcreateDynCallthis1Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
170 AbckitInst *IcreateDynCallarg0Static(AbckitGraph *graph, AbckitInst *acc);
171 AbckitInst *IcreateDynCallarg1Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
172 AbckitInst *IcreateDynTryldglobalbynameStatic(AbckitGraph *graph, AbckitString *string);
173 AbckitInst *IcreateDynLdobjbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
174 AbckitInst *IcreateDynNewobjrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args);
175 
176 AbckitInst *IcreateDynDefinefuncStatic(AbckitGraph *graph, AbckitCoreFunction *function, uint64_t imm0);
177 
178 AbckitInst *IcreateDynNegStatic(AbckitGraph *graph, AbckitInst *acc);
179 
180 AbckitInst *IcreateDynAdd2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
181 AbckitInst *IcreateDynSub2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
182 AbckitInst *IcreateDynMul2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
183 AbckitInst *IcreateDynDiv2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
184 AbckitInst *IcreateDynMod2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
185 AbckitInst *IcreateDynExpStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
186 
187 AbckitInst *IcreateDynShl2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
188 AbckitInst *IcreateDynShr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
189 AbckitInst *IcreateDynAshr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
190 
191 AbckitInst *IcreateDynNotStatic(AbckitGraph *graph, AbckitInst *acc);
192 AbckitInst *IcreateDynOr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
193 AbckitInst *IcreateDynXor2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
194 AbckitInst *IcreateDynAnd2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
195 
196 AbckitInst *IcreateDynIncStatic(AbckitGraph *graph, AbckitInst *acc);
197 AbckitInst *IcreateDynDecStatic(AbckitGraph *graph, AbckitInst *acc);
198 
199 AbckitInst *IcreateDynEqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
200 AbckitInst *IcreateDynNoteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
201 AbckitInst *IcreateDynLessStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
202 AbckitInst *IcreateDynLesseqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
203 AbckitInst *IcreateDynGreaterStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
204 AbckitInst *IcreateDynGreatereqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
205 AbckitInst *IcreateDynStrictnoteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
206 AbckitInst *IcreateDynStricteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
207 
208 AbckitInst *IcreateDynIstrueStatic(AbckitGraph *graph, AbckitInst *acc);
209 AbckitInst *IcreateDynIsfalseStatic(AbckitGraph *graph, AbckitInst *acc);
210 AbckitInst *IcreateDynTonumberStatic(AbckitGraph *graph, AbckitInst *acc);
211 AbckitInst *IcreateDynTonumericStatic(AbckitGraph *graph, AbckitInst *acc);
212 
213 AbckitInst *IcreateDynThrowStatic(AbckitGraph *graph, AbckitInst *acc);
214 AbckitInst *IcreateDynThrowNotexistsStatic(AbckitGraph *graph);
215 AbckitInst *IcreateDynThrowPatternnoncoercibleStatic(AbckitGraph *graph);
216 AbckitInst *IcreateDynThrowDeletesuperpropertyStatic(AbckitGraph *graph);
217 AbckitInst *IcreateDynThrowConstassignmentStatic(AbckitGraph *graph, AbckitInst *input0);
218 AbckitInst *IcreateDynThrowIfnotobjectStatic(AbckitGraph *graph, AbckitInst *input0);
219 AbckitInst *IcreateDynThrowUndefinedifholeStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
220 AbckitInst *IcreateDynThrowIfsupernotcorrectcallStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0);
221 AbckitInst *IcreateDynThrowUndefinedifholewithnameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
222 
223 AbckitInst *IcreateDynLdnanStatic(AbckitGraph *graph);
224 AbckitInst *IcreateDynLdinfinityStatic(AbckitGraph *graph);
225 AbckitInst *IcreateDynLdundefinedStatic(AbckitGraph *graph);
226 AbckitInst *IcreateDynLdnullStatic(AbckitGraph *graph);
227 AbckitInst *IcreateDynLdsymbolStatic(AbckitGraph *graph);
228 AbckitInst *IcreateDynLdglobalStatic(AbckitGraph *graph);
229 AbckitInst *IcreateDynLdtrueStatic(AbckitGraph *graph);
230 AbckitInst *IcreateDynLdfalseStatic(AbckitGraph *graph);
231 AbckitInst *IcreateDynLdholeStatic(AbckitGraph *graph);
232 AbckitInst *IcreateDynLdfunctionStatic(AbckitGraph *graph);
233 AbckitInst *IcreateDynLdnewtargetStatic(AbckitGraph *graph);
234 AbckitInst *IcreateDynLdthisStatic(AbckitGraph *graph);
235 
236 AbckitInst *IcreateDynTypeofStatic(AbckitGraph *graph, AbckitInst *acc);
237 AbckitInst *IcreateDynIsinStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
238 AbckitInst *IcreateDynInstanceofStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
239 AbckitInst *IcreateDynReturnStatic(AbckitGraph *graph, AbckitInst *acc);
240 AbckitInst *IcreateDynReturnundefinedStatic(AbckitGraph *graph);
241 
242 AbckitInst *IcreateDynStownbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, AbckitInst *input0);
243 AbckitInst *IcreateDynStownbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
244 AbckitInst *IcreateDynStownbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0);
245 AbckitInst *IcreateDynWideStownbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0);
246 AbckitInst *IcreateDynStownbynamewithnamesetStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string,
247                                                    AbckitInst *input0);
248 AbckitInst *IcreateDynStownbyvaluewithnamesetStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0,
249                                                     AbckitInst *input1);
250 AbckitInst *IcreateDynStobjbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
251 AbckitInst *IcreateDynStobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0);
252 AbckitInst *IcreateDynWideStobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0);
253 AbckitInst *IcreateDynStobjbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, AbckitInst *input0);
254 
255 AbckitInst *IcreateDynCreateemptyobjectStatic(AbckitGraph *graph);
256 
257 AbckitInst *IcreateDynPoplexenvStatic(AbckitGraph *graph);
258 AbckitInst *IcreateDynGetunmappedargsStatic(AbckitGraph *graph);
259 AbckitInst *IcreateDynAsyncfunctionenterStatic(AbckitGraph *graph);
260 AbckitInst *IcreateDynDebuggerStatic(AbckitGraph *graph);
261 AbckitInst *IcreateDynGetpropiteratorStatic(AbckitGraph *graph, AbckitInst *acc);
262 AbckitInst *IcreateDynGetiteratorStatic(AbckitGraph *graph, AbckitInst *acc);
263 AbckitInst *IcreateDynGetasynciteratorStatic(AbckitGraph *graph, AbckitInst *acc);
264 AbckitInst *IcreateDynLdprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1);
265 AbckitInst *IcreateDynStprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1,
266                                               AbckitInst *input0);
267 AbckitInst *IcreateDynTestinStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1);
268 AbckitInst *IcreateDynDefinefieldbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string,
269                                               AbckitInst *input0);
270 AbckitInst *IcreateDynDefinepropertybynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string,
271                                                  AbckitInst *input0);
272 AbckitInst *IcreateDynCreateemptyarrayStatic(AbckitGraph *graph);
273 AbckitInst *IcreateDynCreategeneratorobjStatic(AbckitGraph *graph, AbckitInst *input0);
274 AbckitInst *IcreateDynCreateiterresultobjStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1);
275 AbckitInst *IcreateDynCreateobjectwithexcludedkeysStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
276                                                          uint64_t imm0, std::va_list args);
277 AbckitInst *IcreateDynWideCreateobjectwithexcludedkeysStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
278                                                              uint64_t imm0, std::va_list args);
279 
280 AbckitInst *IcreateDynDefineclasswithbufferStatic(AbckitGraph *graph, AbckitCoreFunction *function,
281                                                   AbckitLiteralArray *literalArray, uint64_t imm0, AbckitInst *input0);
282 AbckitInst *IcreateDynNewobjapplyStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
283 AbckitInst *IcreateDynWideNewobjrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args);
284 AbckitInst *IcreateDynNewlexenvStatic(AbckitGraph *graph, uint64_t imm0);
285 AbckitInst *IcreateDynWideNewlexenvStatic(AbckitGraph *graph, uint64_t imm0);
286 AbckitInst *IcreateDynNewlexenvwithnameStatic(AbckitGraph *graph, uint64_t imm0, AbckitLiteralArray *literalArray);
287 AbckitInst *IcreateDynWideNewlexenvwithnameStatic(AbckitGraph *graph, uint64_t imm0, AbckitLiteralArray *literalArray);
288 
289 AbckitInst *IcreateDynCreateasyncgeneratorobjStatic(AbckitGraph *graph, AbckitInst *input0);
290 AbckitInst *IcreateDynAsyncgeneratorresolveStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
291                                                   AbckitInst *input2);
292 AbckitInst *IcreateDynCallruntimeNotifyconcurrentresultStatic(AbckitGraph *graph, AbckitInst *acc);
293 AbckitInst *IcreateDynCallruntimeDefinefieldbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0,
294                                                           AbckitInst *input1);
295 AbckitInst *IcreateDynCallruntimeDefinefieldbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0,
296                                                           AbckitInst *input0);
297 AbckitInst *IcreateDynCallruntimeTopropertykeyStatic(AbckitGraph *graph, AbckitInst *acc);
298 
299 AbckitInst *IcreateDynCallruntimeDefineprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0,
300                                                              uint64_t imm1, AbckitInst *input0);
301 AbckitInst *IcreateDynCallruntimeCallinitStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
302 
303 AbckitInst *IcreateDynCallruntimeDefinesendableclassStatic(AbckitGraph *graph, AbckitCoreFunction *function,
304                                                            AbckitLiteralArray *literalArray, uint64_t imm0,
305                                                            AbckitInst *input0);
306 AbckitInst *IcreateDynCallruntimeLdsendableclassStatic(AbckitGraph *graph, uint64_t imm0);
307 AbckitInst *IcreateDynCallruntimeLdsendableexternalmodulevarStatic(AbckitGraph *graph, uint64_t imm0);
308 AbckitInst *IcreateDynCallruntimeWideldsendableexternalmodulevarStatic(AbckitGraph *graph, uint64_t imm0);
309 AbckitInst *IcreateDynCallruntimeNewsendableenvStatic(AbckitGraph *graph, uint64_t imm0);
310 AbckitInst *IcreateDynCallruntimeWidenewsendableenvStatic(AbckitGraph *graph, uint64_t imm0);
311 AbckitInst *IcreateDynCallruntimeStsendablevarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1);
312 AbckitInst *IcreateDynCallruntimeWidestsendablevarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0,
313                                                          uint64_t imm1);
314 AbckitInst *IcreateDynCallruntimeLdsendablevarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1);
315 AbckitInst *IcreateDynCallruntimeWideldsendablevarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1);
316 AbckitInst *IcreateDynCallruntimeIstrueStatic(AbckitGraph *graph, AbckitInst *acc);
317 AbckitInst *IcreateDynCallruntimeIsfalseStatic(AbckitGraph *graph, AbckitInst *acc);
318 AbckitInst *IcreateDynCallruntimeCreateprivatepropertyStatic(AbckitGraph *graph, uint64_t imm0,
319                                                              AbckitLiteralArray *literalArray);
320 AbckitInst *IcreateDynCallargs2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
321 AbckitInst *IcreateDynCallargs3Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1,
322                                       AbckitInst *input2);
323 AbckitInst *IcreateDynCallrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args);
324 AbckitInst *IcreateDynWideCallrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args);
325 AbckitInst *IcreateDynSupercallspreadStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
326 AbckitInst *IcreateDynApplyStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
327 AbckitInst *IcreateDynCallthis2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1,
328                                       AbckitInst *input2);
329 // CC-OFFNXT(G.FUN.01) This is function from public API
330 AbckitInst *IcreateDynCallthis3Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1,
331                                       AbckitInst *input2, AbckitInst *input3);
332 AbckitInst *IcreateDynCallthisrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args);
333 AbckitInst *IcreateDynWideCallthisrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args);
334 AbckitInst *IcreateDynSupercallthisrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args);
335 AbckitInst *IcreateDynWideSupercallthisrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args);
336 AbckitInst *IcreateDynSupercallarrowrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount,
337                                                 std::va_list args);
338 AbckitInst *IcreateDynWideSupercallarrowrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount,
339                                                     std::va_list args);
340 // CC-OFFNXT(G.FUN.01) This is function from public API
341 AbckitInst *IcreateDynDefinegettersetterbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0,
342                                                       AbckitInst *input1, AbckitInst *input2, AbckitInst *input3);
343 
344 AbckitInst *IcreateDynResumegeneratorStatic(AbckitGraph *graph, AbckitInst *acc);
345 AbckitInst *IcreateDynGetresumemodeStatic(AbckitGraph *graph, AbckitInst *acc);
346 AbckitInst *IcreateDynGettemplateobjectStatic(AbckitGraph *graph, AbckitInst *acc);
347 AbckitInst *IcreateDynGetnextpropnameStatic(AbckitGraph *graph, AbckitInst *input0);
348 AbckitInst *IcreateDynDelobjpropStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
349 AbckitInst *IcreateDynSuspendgeneratorStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
350 AbckitInst *IcreateDynAsyncfunctionawaituncaughtStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
351 AbckitInst *IcreateDynCopydatapropertiesStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
352 AbckitInst *IcreateDynStarrayspreadStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
353 AbckitInst *IcreateDynSetobjectwithprotoStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
354 AbckitInst *IcreateDynLdobjbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
355 AbckitInst *IcreateDynLdsuperbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
356 AbckitInst *IcreateDynStsuperbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1);
357 AbckitInst *IcreateDynLdobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0);
358 AbckitInst *IcreateDynWideLdobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0);
359 AbckitInst *IcreateDynAsyncfunctionresolveStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
360 AbckitInst *IcreateDynAsyncfunctionrejectStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
361 AbckitInst *IcreateDynCopyrestargsStatic(AbckitGraph *graph, uint64_t imm0);
362 AbckitInst *IcreateDynWideCopyrestargsStatic(AbckitGraph *graph, uint64_t imm0);
363 AbckitInst *IcreateDynLdlexvarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1);
364 AbckitInst *IcreateDynWideLdlexvarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1);
365 AbckitInst *IcreateDynStlexvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1);
366 AbckitInst *IcreateDynWideStlexvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1);
367 
368 AbckitInst *IcreateDynTrystglobalbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
369 AbckitInst *IcreateDynLdglobalvarStatic(AbckitGraph *graph, AbckitString *string);
370 AbckitInst *IcreateDynStglobalvarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
371 AbckitInst *IcreateDynLdsuperbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
372 AbckitInst *IcreateDynStsuperbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string,
373                                           AbckitInst *input0);
374 
375 AbckitInst *IcreateDynLdbigintStatic(AbckitGraph *graph, AbckitString *string);
376 AbckitInst *IcreateDynLdthisbynameStatic(AbckitGraph *graph, AbckitString *string);
377 AbckitInst *IcreateDynStthisbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string);
378 AbckitInst *IcreateDynLdthisbyvalueStatic(AbckitGraph *graph, AbckitInst *acc);
379 AbckitInst *IcreateDynStthisbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
380 AbckitInst *IcreateDynWideLdpatchvarStatic(AbckitGraph *graph, uint64_t imm0);
381 AbckitInst *IcreateDynWideStpatchvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0);
382 AbckitInst *IcreateDynDynamicimportStatic(AbckitGraph *graph, AbckitInst *acc);
383 AbckitInst *IcreateDynAsyncgeneratorrejectStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
384 AbckitInst *IcreateDynSetgeneratorstateStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0);
385 
386 AbckitInst *IcreateDynGetmodulenamespaceStatic(AbckitGraph *graph, AbckitCoreModule *md);
387 AbckitInst *IcreateDynWideGetmodulenamespaceStatic(AbckitGraph *graph, AbckitCoreModule *md);
388 AbckitInst *IcreateDynLdexternalmodulevarStatic(AbckitGraph *graph, AbckitCoreImportDescriptor *id);
389 AbckitInst *IcreateDynWideLdexternalmodulevarStatic(AbckitGraph *graph, AbckitCoreImportDescriptor *id);
390 AbckitInst *IcreateDynLdlocalmodulevarStatic(AbckitGraph *graph, AbckitCoreExportDescriptor *ed);
391 AbckitInst *IcreateDynWideLdlocalmodulevarStatic(AbckitGraph *graph, AbckitCoreExportDescriptor *ed);
392 AbckitInst *IcreateDynStmodulevarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreExportDescriptor *ed);
393 AbckitInst *IcreateDynWideStmodulevarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreExportDescriptor *ed);
394 AbckitInst *IcreateDynCreatearraywithbufferStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray);
395 AbckitInst *IcreateDynCreateobjectwithbufferStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray);
396 
397 AbckitInst *IcreateDynDefinemethodStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreFunction *function,
398                                          uint64_t imm0);
399 
400 void IremoveStatic(AbckitInst *inst);
401 uint32_t IgetIdStatic(AbckitInst *inst);
402 AbckitIsaApiStaticOpcode IgetOpcodeStaticStatic(AbckitInst *inst);
403 AbckitIsaApiDynamicOpcode IgetOpcodeDynamicStatic(AbckitInst *inst);
404 
405 AbckitInst *IgetNextStatic(AbckitInst *instnext);
406 AbckitInst *IgetPrevStatic(AbckitInst *instprev);
407 void IinsertAfterStatic(AbckitInst *inst, AbckitInst *next);
408 void IinsertBeforeStatic(AbckitInst *inst, AbckitInst *prev);
409 bool IcheckDominanceStatic(AbckitInst *inst, AbckitInst *dominator);
410 bool IvisitUsersStatic(AbckitInst *inst, void *data, bool (*cb)(AbckitInst *user, void *data));
411 bool IvisitInputsStatic(AbckitInst *inst, void *data, bool (*cb)(AbckitInst *input, size_t inputIdx, void *data));
412 uint32_t IgetUserCountStatic(AbckitInst *inst);
413 void IsetImmediateStatic(AbckitInst *inst, size_t idx, uint64_t imm);
414 AbckitBitImmSize IgetImmediateSizeStatic(AbckitInst *inst, size_t idx);
415 
416 uint64_t IgetInputCountStatic(AbckitInst *inst);
417 AbckitInst *IgetInputStatic(AbckitInst *inst, size_t index);
418 void IsetInputStatic(AbckitInst *inst, AbckitInst *input, int32_t index);
419 void IsetInputsStatic(AbckitInst *inst, size_t argCount, std::va_list args);
420 void IappendInputStatic(AbckitInst *inst, AbckitInst *input);
421 AbckitType *IgetTypeStatic(AbckitInst *inst);
422 AbckitTypeId IgetTargetTypeStatic(AbckitInst *inst);
423 void IsetTargetTypeStatic(AbckitInst *inst, AbckitTypeId t);
424 AbckitCoreFunction *IgetFunctionStatic(AbckitInst *inst);
425 void IsetFunctionStatic(AbckitInst *inst, AbckitCoreFunction *function);
426 void IsetClassStatic(AbckitInst *inst, AbckitCoreClass *klass);
427 AbckitCoreClass *IgetClassStatic(AbckitInst *inst);
428 uint64_t IgetImmediateStatic(AbckitInst *inst, size_t idx);
429 uint64_t IgetImmediateCountStatic(AbckitInst *inst);
430 AbckitInst *IcreateIfStaticStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
431                                   AbckitIsaApiStaticConditionCode cc);
432 AbckitInst *IcreateIfDynamicStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
433                                    AbckitIsaApiDynamicConditionCode cc);
434 AbckitInst *IcreateTryStatic(AbckitGraph *graph);
435 AbckitBasicBlock *IgetBasicBlockStatic(AbckitInst *inst);
436 AbckitGraph *IgetGraphStatic(AbckitInst *inst);
437 AbckitCoreModule *IgetModuleStatic(AbckitInst *inst);
438 uint32_t GetImportDescriptorIdxDynamic(AbckitGraph *graph, AbckitCoreImportDescriptor *id);
439 uint32_t GetExportDescriptorIdxDynamic(AbckitGraph *graph, AbckitCoreExportDescriptor *ed);
440 uint64_t GetModuleIndex(AbckitGraph *graph, AbckitCoreModule *md);
441 void IsetModuleStatic(AbckitInst *inst, AbckitCoreModule *md);
442 AbckitCoreImportDescriptor *IgetImportDescriptorStatic(AbckitInst *inst);
443 void IsetImportDescriptorStatic(AbckitInst *inst, AbckitCoreImportDescriptor *id);
444 AbckitCoreExportDescriptor *IgetExportDescriptorStatic(AbckitInst *inst);
445 void IsetExportDescriptorStatic(AbckitInst *inst, AbckitCoreExportDescriptor *ed);
446 AbckitIsaApiStaticConditionCode IgetConditionCodeStaticStatic(AbckitInst *inst);
447 AbckitIsaApiDynamicConditionCode IgetConditionCodeDynamicStatic(AbckitInst *inst);
448 void IsetConditionCodeStaticStatic(AbckitInst *inst, AbckitIsaApiStaticConditionCode cc);
449 void IsetConditionCodeDynamicStatic(AbckitInst *inst, AbckitIsaApiDynamicConditionCode cc);
450 
451 AbckitInst *IcreateDynCallarg0Dynamic(AbckitGraph *graph, AbckitInst *acc);
452 AbckitInst *IcreateDynCallarg1Dynamic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0);
453 AbckitInst *IcreateDynIfStatic(AbckitGraph *graph, AbckitInst *input, AbckitIsaApiDynamicConditionCode cc);
454 
455 AbckitInst *IcreateNewArrayStatic(AbckitGraph *graph, AbckitCoreClass *inputClass, AbckitInst *inputSize);
456 
457 AbckitInst *IcreateNewObjectStatic(AbckitGraph *graph, AbckitCoreClass *inputClass);
458 AbckitInst *IcreateInitObjectStatic(AbckitGraph *graph, AbckitCoreFunction *inputFunction, size_t argCount,
459                                     va_list argp);
460 
461 bool IcheckIsCallStatic(AbckitInst *inst);
462 
463 }  // namespace libabckit
464 
465 #endif
466