#ifndef V8_MAGLEV_MAGLEV_INTERPRETER_FRAME_STATE_H_
#define V8_MAGLEV_MAGLEV_INTERPRETER_FRAME_STATE_H_
#include <optional>
#include "src/base/threaded-list.h"
#include "src/compiler/bytecode-analysis.h"
#include "src/compiler/bytecode-liveness-map.h"
#include "src/interpreter/bytecode-register.h"
#include "src/maglev/maglev-compilation-unit.h"
#include "src/maglev/maglev-ir.h"
#ifdef V8_ENABLE_MAGLEV
#include "src/maglev/maglev-regalloc-data.h"
#endif
#include "src/maglev/maglev-register-frame-array.h"
#include "src/zone/zone.h"
namespace v8 {
namespace internal {
namespace maglev {
class BasicBlock;
class Graph;
class MaglevGraphBuilder;
class MergePointInterpreterFrameState;
template <typename Key, typename Value,
typename MergeFunc = std::equal_to<Value>>
void DestructivelyIntersect(ZoneMap<Key, Value>& lhs_map,
const ZoneMap<Key, Value>& rhs_map,
MergeFunc&& func = MergeFunc()) { … }
using PossibleMaps = compiler::ZoneRefSet<Map>;
class NodeInfo { … };
struct LoopEffects;
struct KnownNodeAspects { … };
class InterpreterFrameState { … };
class CompactInterpreterFrameState { … };
class MergePointRegisterState { … };
class MergePointInterpreterFrameState { … };
struct LoopEffects { … };
void InterpreterFrameState::CopyFrom(const MaglevCompilationUnit& info,
MergePointInterpreterFrameState& state,
bool preserve_known_node_aspects = false,
Zone* zone = nullptr) { … }
}
}
}
#endif