Commit d468f6e0 authored by Jakob Linke's avatar Jakob Linke Committed by V8 LUCI CQ

[maglev] Move deopt helpers to masm

Bug: v8:7700
Change-Id: I9554ee1a569cea6a04694c7e0a5b84a45196080c
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3876370Reviewed-by: 's avatarVictor Gomes <victorgomes@chromium.org>
Commit-Queue: Jakob Linke <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/main@{#83125}
parent bc0e7c87
......@@ -259,6 +259,40 @@ inline void MaglevAssembler::JumpToDeferredIf(Condition cond,
bind(&deferred_code->return_label);
}
// ---
// Deopt
// ---
inline void MaglevAssembler::RegisterEagerDeopt(EagerDeoptInfo* deopt_info,
DeoptimizeReason reason) {
if (deopt_info->reason != DeoptimizeReason::kUnknown) {
DCHECK_EQ(deopt_info->reason, reason);
}
if (deopt_info->deopt_entry_label.is_unused()) {
code_gen_state()->PushEagerDeopt(deopt_info);
deopt_info->reason = reason;
}
}
template <typename NodeT>
inline void MaglevAssembler::EmitEagerDeopt(NodeT* node,
DeoptimizeReason reason) {
static_assert(NodeT::kProperties.can_eager_deopt());
RegisterEagerDeopt(node->eager_deopt_info(), reason);
RecordComment("-- Jump to eager deopt");
jmp(&node->eager_deopt_info()->deopt_entry_label);
}
template <typename NodeT>
inline void MaglevAssembler::EmitEagerDeoptIf(Condition cond,
DeoptimizeReason reason,
NodeT* node) {
static_assert(NodeT::kProperties.can_eager_deopt());
RegisterEagerDeopt(node->eager_deopt_info(), reason);
RecordComment("-- Jump to eager deopt");
j(cond, &node->eager_deopt_info()->deopt_entry_label);
}
} // namespace maglev
} // namespace internal
} // namespace v8
......
......@@ -74,6 +74,14 @@ class MaglevAssembler : public MacroAssembler {
inline void JumpToDeferredIf(Condition cond, Function&& deferred_code_gen,
Args&&... args);
inline void RegisterEagerDeopt(EagerDeoptInfo* deopt_info,
DeoptimizeReason reason);
template <typename NodeT>
inline void EmitEagerDeopt(NodeT* node, DeoptimizeReason reason);
template <typename NodeT>
inline void EmitEagerDeoptIf(Condition cond, DeoptimizeReason reason,
NodeT* node);
compiler::NativeContextRef native_context() const {
return code_gen_state()->broker()->target_native_context();
}
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment