17#if V8_ENABLE_WEBASSEMBLY
31 return os <<
"Ignore";
32 return os <<
"PokeAt(" << sc.
parameter_ <<
")";
41#if V8_ENABLE_WEBASSEMBLY
48#if V8_ENABLE_WEBASSEMBLY
82 info.state_combine());
88 os <<
"UNOPTIMIZED_FRAME";
91 os <<
"INLINED_EXTRA_ARGUMENTS";
94 os <<
"CONSTRUCT_CREATE_STUB";
97 os <<
"CONSTRUCT_INVOKE_STUB";
100 os <<
"BUILTIN_CONTINUATION_FRAME";
102#if V8_ENABLE_WEBASSEMBLY
103 case FrameStateType::kWasmInlinedIntoJS:
104 os <<
"WASM_INLINED_INTO_JS_FRAME";
106 case FrameStateType::kJSToWasmBuiltinContinuation:
107 os <<
"JS_TO_WASM_BUILTIN_CONTINUATION_FRAME";
109 case FrameStateType::kLiftoffFunction:
110 os <<
"LIFTOFF_FRAME";
114 os <<
"JAVASCRIPT_BUILTIN_CONTINUATION_FRAME";
117 os <<
"JAVASCRIPT_BUILTIN_CONTINUATION_WITH_CATCH_FRAME";
124 os << info.type() <<
", " << info.bailout_id() <<
", "
125 << info.state_combine();
127 if (info.shared_info().ToHandle(&shared_info)) {
128 os <<
", " <<
Brief(*shared_info);
153FrameState CreateBuiltinContinuationFrameStateCommon(
158 const wasm::CanonicalSig* signature =
nullptr) {
162 const Operator* op_param =
164 Node* params_node = graph->NewNode(op_param,
parameter_count, parameters);
167#if V8_ENABLE_WEBASSEMBLY
168 const FrameStateFunctionInfo* state_info =
169 signature ? common->CreateJSToWasmFrameStateFunctionInfo(
171 : common->CreateFrameStateFunctionInfo(
175 const FrameStateFunctionInfo* state_info =
176 common->CreateFrameStateFunctionInfo(frame_type,
parameter_count, 0, 0,
180 const Operator* op = common->FrameState(
182 return FrameState(graph->NewNode(op, params_node,
jsgraph->EmptyStateValues(),
183 jsgraph->EmptyStateValues(), context,
196 std::vector<Node*> actual_parameters;
199 int stack_parameter_count =
209 actual_parameters.reserve(stack_parameter_count +
211 for (
int i = 0;
i < stack_parameter_count; ++
i) {
212 actual_parameters.push_back(
218 actual_parameters.push_back(parameters[
i]);
222#if V8_ENABLE_WEBASSEMBLY
223 if (name == Builtin::kJSToWasmLazyDeoptContinuation) {
225 frame_state_type = FrameStateType::kJSToWasmBuiltinContinuation;
228 return CreateBuiltinContinuationFrameStateCommon(
229 jsgraph, frame_state_type, name,
jsgraph->UndefinedConstant(), context,
230 actual_parameters.data(),
static_cast<int>(actual_parameters.size()),
234#if V8_ENABLE_WEBASSEMBLY
235FrameState CreateJSWasmCallBuiltinContinuationFrameState(
238 std::optional<wasm::ValueKind> wasm_return_kind =
240 Node* node_return_type =
242 Node* lazy_deopt_parameters[] = {node_return_type};
244 jsgraph, Builtin::kJSToWasmLazyDeoptContinuation, context,
245 lazy_deopt_parameters,
arraysize(lazy_deopt_parameters),
252 Node* context,
Node*
const* stack_parameters,
int stack_parameter_count,
257 stack_parameter_count + DeoptimizerParameterCountFor(mode));
264 std::vector<Node*> actual_parameters;
265 actual_parameters.reserve(stack_parameter_count);
266 for (
int i = 0;
i < stack_parameter_count; ++
i) {
267 actual_parameters.push_back(stack_parameters[
i]);
277 actual_parameters.push_back(target);
279 actual_parameters.push_back(argc);
280#ifdef V8_JS_LINKAGE_INCLUDES_DISPATCH_HANDLE
283 actual_parameters.push_back(
handle);
286 return CreateBuiltinContinuationFrameStateCommon(
291 name, target, context, &actual_parameters[0],
300 const int stack_parameter_count =
arraysize(stack_parameters);
302 graph, shared, Builtin::kGenericLazyDeoptContinuation, target, context,
320 DCHECK_EQ(IrOpcode::kFrameState, frame_state->op()->opcode());
constexpr UnderlyingType & value() &
static BytecodeOffset GetContinuationBytecodeOffset(Builtin builtin)
static CallInterfaceDescriptor CallInterfaceDescriptorFor(Builtin builtin)
static V8_EXPORT_PRIVATE int GetStackParameterCount(Builtin builtin)
static V8_EXPORT_PRIVATE Callable CallableFor(Isolate *isolate, Builtin builtin)
int GetStackParameterCount() const
int GetRegisterParameterCount() const
CallInterfaceDescriptor descriptor() const
const Operator * StateValues(int arguments, SparseInputMask bitmask)
const Operator * FrameState(BytecodeOffset bailout_id, OutputFrameStateCombine state_combine, const FrameStateFunctionInfo *function_info)
uint16_t max_arguments() const
FrameStateType type() const
uint16_t parameter_count() const
uint32_t wasm_function_index() const
IndirectHandle< SharedFunctionInfo > shared_info() const
uint32_t wasm_liftoff_frame_size() const
MaybeIndirectHandle< BytecodeArray > bytecode_array() const
OutputFrameStateCombine state_combine() const
const FrameStateFunctionInfo * function_info() const
FrameStateType type() const
BytecodeOffset bailout_id() const
Node * outer_frame_state() const
const FrameStateInfo & frame_state_info() const
Node * parameters() const
Isolate * isolate() const
Node * ConstantNoHole(ObjectRef ref, JSHeapBroker *broker)
Node * SmiConstant(int32_t immediate)
CommonOperatorBuilder * common() const
static const size_t kInvalidIndex
static OutputFrameStateCombine Ignore()
#define V8_JS_LINKAGE_INCLUDES_DISPATCH_HANDLE_BOOL
DirectHandle< Object > new_target
FrameState outer_frame_state
V8_INLINE size_t hash_value(unsigned int v)
V8_INLINE size_t hash_combine(size_t seed, size_t hash)
@ kJavaScriptBuiltinContinuationWithCatch
@ kJavaScriptBuiltinContinuation
FrameState CloneFrameState(JSGraph *jsgraph, FrameState frame_state, OutputFrameStateCombine changed_state_combine)
FrameState CreateGenericLazyDeoptContinuationFrameState(JSGraph *graph, SharedFunctionInfoRef shared, Node *target, Node *context, Node *receiver, Node *outer_frame_state)
ContinuationFrameStateMode
FrameState CreateStubBuiltinContinuationFrameState(JSGraph *jsgraph, Builtin name, Node *context, Node *const *parameters, int parameter_count, Node *outer_frame_state, ContinuationFrameStateMode mode, const wasm::CanonicalSig *signature)
size_t hash_value(const BranchParameters &p)
Node * CreateInlinedApiFunctionFrameState(JSGraph *graph, SharedFunctionInfoRef shared, Node *target, Node *context, Node *receiver, Node *outer_frame_state)
FrameState CreateJavaScriptBuiltinContinuationFrameState(JSGraph *jsgraph, SharedFunctionInfoRef shared, Builtin name, Node *target, Node *context, Node *const *stack_parameters, int stack_parameter_count, Node *outer_frame_state, ContinuationFrameStateMode mode)
bool operator!=(DeoptimizeParameters lhs, DeoptimizeParameters rhs)
bool operator==(const BranchParameters &lhs, const BranchParameters &rhs)
std::ostream & operator<<(std::ostream &os, AccessMode access_mode)
std::optional< wasm::ValueKind > WasmReturnTypeFromSignature(const CanonicalSig *wasm_signature)
V8_INLINE IndirectHandle< T > handle(Tagged< T > object, Isolate *isolate)
constexpr JSDispatchHandle kInvalidDispatchHandle(0xffffffff<< kJSDispatchHandleShift)
#define CHECK_NOT_NULL(val)
#define DCHECK_GE(v1, v2)
#define DCHECK_EQ(v1, v2)