5#ifndef V8_DEOPTIMIZER_TRANSLATED_STATE_H_
6#define V8_DEOPTIMIZER_TRANSLATED_STATE_H_
20#if V8_ENABLE_WEBASSEMBLY
27class DeoptimizationLiteral;
36 DeoptimizationFrameTranslation::Iterator& iterator,
211#if V8_ENABLE_WEBASSEMBLY
213 kJSToWasmBuiltinContinuation,
308#if V8_ENABLE_WEBASSEMBLY
310 std::optional<wasm::ValueKind> wasm_call_return_kind()
const {
315 int wasm_function_index()
const {
317 return wasm_function_index_;
342#if V8_ENABLE_WEBASSEMBLY
348 uint32_t
height, std::optional<wasm::ValueKind> return_type);
350 uint32_t
height, uint32_t function_index);
362 static void AdvanceIterator(std::deque<TranslatedValue>::iterator* iter);
406#if V8_ENABLE_WEBASSEMBLY
408 std::optional<wasm::ValueKind> return_kind_;
410 int wasm_function_index_ = -1;
420 std::vector<DeoptimizationLiteral> literals);
472 using iterator = std::vector<TranslatedFrame>::iterator;
484 int* arguments_count);
493 int actual_argument_count);
538 int* value_index, std::stack<int>* worklist);
540 std::stack<int>* worklist);
static constexpr BytecodeOffset None()
DeoptimizationLiteralProvider(const DeoptimizationLiteralProvider &)=delete
Tagged< DeoptimizationLiteralArray > get_on_heap_literals() const
DeoptimizationLiteralProvider(Tagged< DeoptimizationLiteralArray > literal_array)
std::vector< DeoptimizationLiteral > literals_off_heap_
Tagged< DeoptimizationLiteralArray > literals_on_heap_
TranslatedValue Get(TranslatedState *container, int literal_index) const
void operator=(const DeoptimizationLiteralProvider &)=delete
~DeoptimizationLiteralProvider()
bool operator==(const iterator &other) const
iterator(std::deque< TranslatedValue >::iterator position, int input_index=0)
std::deque< TranslatedValue >::iterator position_
TranslatedValue * operator->()
TranslatedValue & operator*()
bool operator!=(const iterator &other) const
const TranslatedValue * operator->() const
const TranslatedValue & operator*() const
BytecodeOffset bytecode_offset() const
TranslatedFrame(Kind kind, Tagged< SharedFunctionInfo > raw_shared_info, Tagged< BytecodeArray > raw_bytecode_array, uint32_t height, int return_value_offset=0, int return_value_count=0)
int return_value_offset() const
DirectHandle< SharedFunctionInfo > shared_info() const
const_reference front() const
static TranslatedFrame UnoptimizedJSFrame(BytecodeOffset bytecode_offset, Tagged< SharedFunctionInfo > shared_info, Tagged< BytecodeArray > bytecode_array, uint32_t height, int return_value_offset, int return_value_count)
IndirectHandle< BytecodeArray > bytecode_array_
void Add(const TranslatedValue &value)
BytecodeOffset bytecode_offset_
Tagged< BytecodeArray > raw_bytecode_array() const
Tagged< SharedFunctionInfo > raw_shared_info_
static TranslatedFrame InvalidFrame()
void Handlify(Isolate *isolate)
TranslatedValue const & const_reference
int GetValueCount() const
static TranslatedFrame BuiltinContinuationFrame(BytecodeOffset bailout_id, Tagged< SharedFunctionInfo > shared_info, uint32_t height)
static TranslatedFrame ConstructInvokeStubFrame(Tagged< SharedFunctionInfo > shared_info)
int formal_parameter_count() const
DirectHandle< BytecodeArray > bytecode_array() const
@ kJavaScriptBuiltinContinuationWithCatch
@ kJavaScriptBuiltinContinuation
static TranslatedFrame InlinedExtraArguments(Tagged< SharedFunctionInfo > shared_info, uint32_t height, uint32_t formal_parameter_count)
static TranslatedFrame JavaScriptBuiltinContinuationWithCatchFrame(BytecodeOffset bailout_id, Tagged< SharedFunctionInfo > shared_info, uint32_t height)
static TranslatedFrame AccessorFrame(Kind kind, Tagged< SharedFunctionInfo > shared_info)
int formal_parameter_count_
IndirectHandle< SharedFunctionInfo > shared_info_
Tagged< BytecodeArray > raw_bytecode_array_
int return_value_count() const
std::deque< TranslatedValue > ValuesContainer
static TranslatedFrame JavaScriptBuiltinContinuationFrame(BytecodeOffset bailout_id, Tagged< SharedFunctionInfo > shared_info, uint32_t height)
static TranslatedFrame ConstructCreateStubFrame(Tagged< SharedFunctionInfo > shared_info, uint32_t height)
Tagged< SharedFunctionInfo > raw_shared_info() const
static void AdvanceIterator(std::deque< TranslatedValue >::iterator *iter)
enum v8::internal::TranslatedFrame::HandleState handle_state_
TranslatedValue * ValueAt(int index)
Address stack_frame_pointer_
static Float64 GetDoubleSlot(Address fp, int slot_index)
const_iterator begin() const
std::vector< TranslatedFrame > & frames()
void SkipSlots(int slots_to_skip, TranslatedFrame *frame, int *value_index)
static uint64_t GetUInt64Slot(Address fp, int slot_index)
TranslatedValue * ResolveCapturedObject(TranslatedValue *slot)
int CreateNextTranslatedValue(int frame_index, DeoptTranslationIterator *iterator, const DeoptimizationLiteralProvider &literal_array, Address fp, RegisterValues *registers, FILE *trace_file)
void ReadUpdateFeedback(DeoptTranslationIterator *iterator, Tagged< DeoptimizationLiteralArray > literal_array, FILE *trace_file)
const_iterator end() const
void EnsureCapturedObjectAllocatedAt(int object_index, std::stack< int > *worklist)
TranslatedValue * GetResolvedSlot(TranslatedFrame *frame, int value_index)
void EnsureChildrenAllocated(int count, TranslatedFrame *frame, int *value_index, std::stack< int > *worklist)
void MaterializeHeapNumber(TranslatedFrame *frame, int *value_index, TranslatedValue *slot)
void MaterializeFixedDoubleArray(TranslatedFrame *frame, int *value_index, TranslatedValue *slot, DirectHandle< Map > map)
TranslatedFrame * GetArgumentsInfoFromJSFrameIndex(int jsframe_index, int *arguments_count)
void CreateArgumentsElementsTranslatedValues(int frame_index, Address input_frame_pointer, CreateArgumentsType type, FILE *trace_file)
Address DecompressIfNeeded(intptr_t value)
void EnsureJSObjectAllocated(TranslatedValue *slot, DirectHandle< Map > map)
Handle< HeapObject > InitializeObjectAt(TranslatedValue *slot)
FeedbackSlot feedback_slot_
int actual_argument_count_
void StoreMaterializedValuesAndDeopt(JavaScriptFrame *frame)
void EnsureObjectAllocatedAt(TranslatedValue *slot)
TranslatedValue * GetResolvedSlotAndAdvance(TranslatedFrame *frame, int *value_index)
void Init(Isolate *isolate, Address input_frame_pointer, Address stack_frame_pointer, DeoptTranslationIterator *iterator, Tagged< ProtectedDeoptimizationLiteralArray > protected_literal_array, const DeoptimizationLiteralProvider &literal_array, RegisterValues *registers, FILE *trace_file, int parameter_count, int actual_argument_count)
void InitializeCapturedObjectAt(int object_index, std::stack< int > *worklist, const DisallowGarbageCollection &no_gc)
void InitializeObjectWithTaggedFieldsAt(TranslatedFrame *frame, int *value_index, TranslatedValue *slot, DirectHandle< Map > map, const DisallowGarbageCollection &no_gc)
std::deque< ObjectPosition > object_positions_
TranslatedValue * GetValueByObjectIndex(int object_index)
Tagged< FeedbackVector > feedback_vector_
static Simd128 getSimd128Slot(Address fp, int slot_index)
Handle< HeapObject > ResolveStringConcat(TranslatedValue *slot)
void VerifyMaterializedObjects()
TranslatedFrame CreateNextTranslatedFrame(DeoptTranslationIterator *iterator, Tagged< ProtectedDeoptimizationLiteralArray > protected_literal_array, const DeoptimizationLiteralProvider &literal_array, Address fp, FILE *trace_file)
Handle< FeedbackVector > feedback_vector_handle_
void EnsurePropertiesAllocatedAndMarked(TranslatedValue *properties_slot, DirectHandle< Map > map)
std::vector< TranslatedFrame > frames_
static Float32 GetFloatSlot(Address fp, int slot_index)
TranslatedFrame * GetFrameFromJSFrameIndex(int jsframe_index)
void UpdateFromPreviouslyMaterializedObjects()
DirectHandle< Object > GetValueAndAdvance(TranslatedFrame *frame, int *value_index)
int formal_parameter_count_
Handle< ByteArray > AllocateStorageFor(TranslatedValue *slot)
std::vector< TranslatedFrame >::iterator iterator
void Prepare(Address stack_frame_pointer)
void InitializeJSObjectAt(TranslatedFrame *frame, int *value_index, TranslatedValue *slot, DirectHandle< Map > map, const DisallowGarbageCollection &no_gc)
std::vector< TranslatedFrame >::const_iterator const_iterator
static uint32_t GetUInt32Slot(Address fp, int slot_index)
static TranslatedValue NewUint64ToBigInt(TranslatedState *container, uint64_t value)
static TranslatedValue NewDouble(TranslatedState *container, Float64 value)
Handle< HeapObject > storage()
Tagged< Object > GetRawValue() const
static TranslatedValue NewDuplicateObject(TranslatedState *container, int id)
static TranslatedValue NewInt64ToBigInt(TranslatedState *container, int64_t value)
static TranslatedValue NewHoleyDouble(TranslatedState *container, Float64 value)
static TranslatedValue NewBool(TranslatedState *container, uint32_t value)
void set_initialized_storage(Handle< HeapObject > storage)
uint32_t uint32_value() const
int GetChildrenCount() const
int32_t int32_value() const
Handle< HeapObject > storage_
void set_storage(Handle< HeapObject > storage)
static TranslatedValue NewInvalid(TranslatedState *container)
static TranslatedValue NewSimd128(TranslatedState *container, Simd128 value)
static TranslatedValue NewInt32(TranslatedState *container, int32_t value)
Handle< Object > GetValue()
Isolate * isolate() const
int object_length() const
MaterializationState materialization_state_
Tagged< Object > raw_literal() const
Float32 float_value() const
TranslatedValue(TranslatedState *container, Kind kind)
void ReplaceElementsArrayWithCopy()
static TranslatedValue NewInt64(TranslatedState *container, int64_t value)
static TranslatedValue NewUint32(TranslatedState *container, uint32_t value)
MaterializationState materialization_state() const
uint64_t uint64_value() const
bool IsMaterializedObject() const
MaterializedObjectInfo materialization_info_
static TranslatedValue NewFloat(TranslatedState *container, Float32 value)
bool IsMaterializableByDebugger() const
int64_t int64_value() const
static TranslatedValue NewStringConcat(TranslatedState *container, int id)
static TranslatedValue NewTagged(TranslatedState *container, Tagged< Object > literal)
static TranslatedValue NewDeferredObject(TranslatedState *container, int length, int object_index)
static TranslatedValue NewUint64(TranslatedState *container, uint64_t value)
Tagged< Object > raw_literal_
Float64 double_value() const
Simd128 simd_value() const
TranslatedState * container_
int string_concat_index() const
FunctionLiteral * literal
RegListBase< RegisterT > registers
const int kNoWasmReturnKind
Tagged(T object) -> Tagged< T >
void DeoptimizationFrameTranslationPrintSingleOpcode(std::ostream &os, TranslationOpcode opcode, DeoptimizationFrameTranslation::Iterator &iterator, Tagged< ProtectedDeoptimizationLiteralArray > protected_literal_array, Tagged< DeoptimizationLiteralArray > literal_array)
static constexpr Address kNullAddress
#define DCHECK_NE(v1, v2)
#define CHECK_EQ(lhs, rhs)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)