// Copyright 2021 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_DEOPTIMIZER_TRANSLATED_STATE_H_ #define V8_DEOPTIMIZER_TRANSLATED_STATE_H_ #include <optional> #include <stack> #include <vector> #include "src/common/simd128.h" #include "src/deoptimizer/frame-translation-builder.h" #include "src/objects/deoptimization-data.h" #include "src/objects/feedback-vector.h" #include "src/objects/heap-object.h" #include "src/objects/shared-function-info.h" #include "src/utils/boxed-float.h" #if V8_ENABLE_WEBASSEMBLY #include "src/wasm/value-type.h" #endif // V8_ENABLE_WEBASSEMBLY namespace v8 { namespace internal { class DeoptimizationLiteral; class RegisterValues; class TranslatedState; // TODO(jgruber): This duplicates decoding logic already present in // TranslatedState/TranslatedFrame. Deduplicate into one class, e.g. by basing // printing off TranslatedFrame. void DeoptimizationFrameTranslationPrintSingleOpcode( std::ostream& os, TranslationOpcode opcode, DeoptimizationFrameTranslation::Iterator& iterator, Tagged<DeoptimizationLiteralArray> literal_array); // The Translated{Value,Frame,State} class hierarchy are a set of utility // functions to work with the combination of translations (built from a // DeoptimizationFrameTranslation) and the actual current CPU state (represented // by RegisterValues). // // TranslatedState: describes the entire stack state of the current optimized // frame, contains: // // TranslatedFrame: describes a single unoptimized frame, contains: // // TranslatedValue: the actual value of some location. class TranslatedValue { … }; class TranslatedFrame { … }; class DeoptimizationLiteralProvider { … }; // Auxiliary class for translating deoptimization values. // Typical usage sequence: // // 1. Construct the instance. This will involve reading out the translations // and resolving them to values using the supplied frame pointer and // machine state (registers). This phase is guaranteed not to allocate // and not to use any HandleScope. Any object pointers will be stored raw. // // 2. Handlify pointers. This will convert all the raw pointers to handles. // // 3. Reading out the frame values. // // Note: After the instance is constructed, it is possible to iterate over // the values eagerly. class TranslatedState { … }; // Return kind encoding for a Wasm function returning void. const int kNoWasmReturnKind = …; } // namespace internal } // namespace v8 #endif // V8_DEOPTIMIZER_TRANSLATED_STATE_H_