Skip to content

Commit 38940b7

Browse files
LiuYu396V8 LUCI CQ
authored and
V8 LUCI CQ
committed
[loong64][mips] Remove dynamic map checks and custom deoptimization kinds
Port commit b297892 Fixed: v8:12552 Change-Id: Ic2fbded9a662ed840a0350e3ce049e147fbf03a0 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3541527 Auto-Submit: Yu Liu <liuyu@loongson.cn> Reviewed-by: Zhao Jiazhong <zhaojiazhong-hf@loongson.cn> Commit-Queue: Zhao Jiazhong <zhaojiazhong-hf@loongson.cn> Cr-Commit-Position: refs/heads/main@{#79557}
1 parent faaf681 commit 38940b7

15 files changed

+21
-335
lines changed

src/builtins/loong64/builtins-loong64.cc

-72
Original file line numberDiff line numberDiff line change
@@ -3564,10 +3564,6 @@ void Builtins::Generate_DeoptimizationEntry_Soft(MacroAssembler* masm) {
35643564
Generate_DeoptimizationEntry(masm, DeoptimizeKind::kSoft);
35653565
}
35663566

3567-
void Builtins::Generate_DeoptimizationEntry_Bailout(MacroAssembler* masm) {
3568-
Generate_DeoptimizationEntry(masm, DeoptimizeKind::kBailout);
3569-
}
3570-
35713567
void Builtins::Generate_DeoptimizationEntry_Lazy(MacroAssembler* masm) {
35723568
Generate_DeoptimizationEntry(masm, DeoptimizeKind::kLazy);
35733569
}
@@ -3748,74 +3744,6 @@ void Builtins::Generate_InterpreterOnStackReplacement_ToBaseline(
37483744
Generate_BaselineOrInterpreterEntry(masm, false, true);
37493745
}
37503746

3751-
void Builtins::Generate_DynamicCheckMapsTrampoline(MacroAssembler* masm) {
3752-
Generate_DynamicCheckMapsTrampoline<DynamicCheckMapsDescriptor>(
3753-
masm, BUILTIN_CODE(masm->isolate(), DynamicCheckMaps));
3754-
}
3755-
3756-
void Builtins::Generate_DynamicCheckMapsWithFeedbackVectorTrampoline(
3757-
MacroAssembler* masm) {
3758-
Generate_DynamicCheckMapsTrampoline<
3759-
DynamicCheckMapsWithFeedbackVectorDescriptor>(
3760-
masm, BUILTIN_CODE(masm->isolate(), DynamicCheckMapsWithFeedbackVector));
3761-
}
3762-
3763-
template <class Descriptor>
3764-
void Builtins::Generate_DynamicCheckMapsTrampoline(
3765-
MacroAssembler* masm, Handle<Code> builtin_target) {
3766-
FrameScope scope(masm, StackFrame::MANUAL);
3767-
__ EnterFrame(StackFrame::INTERNAL);
3768-
3769-
// Only save the registers that the DynamicCheckMaps builtin can clobber.
3770-
Descriptor descriptor;
3771-
RegList registers = descriptor.allocatable_registers();
3772-
// FLAG_debug_code is enabled CSA checks will call C function and so we need
3773-
// to save all CallerSaved registers too.
3774-
if (FLAG_debug_code) registers |= kJSCallerSaved;
3775-
__ MaybeSaveRegisters(registers);
3776-
3777-
// Load the immediate arguments from the deopt exit to pass to the builtin.
3778-
Register slot_arg = descriptor.GetRegisterParameter(Descriptor::kSlot);
3779-
Register handler_arg = descriptor.GetRegisterParameter(Descriptor::kHandler);
3780-
__ Ld_d(handler_arg, MemOperand(fp, CommonFrameConstants::kCallerPCOffset));
3781-
__ Ld_d(
3782-
slot_arg,
3783-
MemOperand(handler_arg, Deoptimizer::kEagerWithResumeImmedArgs1PcOffset));
3784-
__ Ld_d(
3785-
handler_arg,
3786-
MemOperand(handler_arg, Deoptimizer::kEagerWithResumeImmedArgs2PcOffset));
3787-
__ Call(builtin_target, RelocInfo::CODE_TARGET);
3788-
3789-
Label deopt, bailout;
3790-
__ Branch(&deopt, ne, a0,
3791-
Operand(static_cast<int64_t>(DynamicCheckMapsStatus::kSuccess)));
3792-
3793-
__ MaybeRestoreRegisters(registers);
3794-
__ LeaveFrame(StackFrame::INTERNAL);
3795-
__ Ret();
3796-
3797-
__ bind(&deopt);
3798-
__ Branch(&bailout, eq, a0,
3799-
Operand(static_cast<int64_t>(DynamicCheckMapsStatus::kBailout)));
3800-
3801-
if (FLAG_debug_code) {
3802-
__ Assert(eq, AbortReason::kUnexpectedDynamicCheckMapsStatus, a0,
3803-
Operand(static_cast<int64_t>(DynamicCheckMapsStatus::kDeopt)));
3804-
}
3805-
__ MaybeRestoreRegisters(registers);
3806-
__ LeaveFrame(StackFrame::INTERNAL);
3807-
Handle<Code> deopt_eager = masm->isolate()->builtins()->code_handle(
3808-
Deoptimizer::GetDeoptimizationEntry(DeoptimizeKind::kEager));
3809-
__ Jump(deopt_eager, RelocInfo::CODE_TARGET);
3810-
3811-
__ bind(&bailout);
3812-
__ MaybeRestoreRegisters(registers);
3813-
__ LeaveFrame(StackFrame::INTERNAL);
3814-
Handle<Code> deopt_bailout = masm->isolate()->builtins()->code_handle(
3815-
Deoptimizer::GetDeoptimizationEntry(DeoptimizeKind::kBailout));
3816-
__ Jump(deopt_bailout, RelocInfo::CODE_TARGET);
3817-
}
3818-
38193747
#undef __
38203748

38213749
} // namespace internal

src/builtins/mips/builtins-mips.cc

-72
Original file line numberDiff line numberDiff line change
@@ -4013,10 +4013,6 @@ void Builtins::Generate_DeoptimizationEntry_Soft(MacroAssembler* masm) {
40134013
Generate_DeoptimizationEntry(masm, DeoptimizeKind::kSoft);
40144014
}
40154015

4016-
void Builtins::Generate_DeoptimizationEntry_Bailout(MacroAssembler* masm) {
4017-
Generate_DeoptimizationEntry(masm, DeoptimizeKind::kBailout);
4018-
}
4019-
40204016
void Builtins::Generate_DeoptimizationEntry_Lazy(MacroAssembler* masm) {
40214017
Generate_DeoptimizationEntry(masm, DeoptimizeKind::kLazy);
40224018
}
@@ -4196,74 +4192,6 @@ void Builtins::Generate_InterpreterOnStackReplacement_ToBaseline(
41964192
Generate_BaselineOrInterpreterEntry(masm, false, true);
41974193
}
41984194

4199-
void Builtins::Generate_DynamicCheckMapsTrampoline(MacroAssembler* masm) {
4200-
Generate_DynamicCheckMapsTrampoline<DynamicCheckMapsDescriptor>(
4201-
masm, BUILTIN_CODE(masm->isolate(), DynamicCheckMaps));
4202-
}
4203-
4204-
void Builtins::Generate_DynamicCheckMapsWithFeedbackVectorTrampoline(
4205-
MacroAssembler* masm) {
4206-
Generate_DynamicCheckMapsTrampoline<
4207-
DynamicCheckMapsWithFeedbackVectorDescriptor>(
4208-
masm, BUILTIN_CODE(masm->isolate(), DynamicCheckMapsWithFeedbackVector));
4209-
}
4210-
4211-
template <class Descriptor>
4212-
void Builtins::Generate_DynamicCheckMapsTrampoline(
4213-
MacroAssembler* masm, Handle<Code> builtin_target) {
4214-
FrameScope scope(masm, StackFrame::MANUAL);
4215-
__ EnterFrame(StackFrame::INTERNAL);
4216-
4217-
// Only save the registers that the DynamicCheckMaps builtin can clobber.
4218-
Descriptor descriptor;
4219-
RegList registers = descriptor.allocatable_registers();
4220-
// FLAG_debug_code is enabled CSA checks will call C function and so we need
4221-
// to save all CallerSaved registers too.
4222-
if (FLAG_debug_code) registers |= kJSCallerSaved;
4223-
__ MaybeSaveRegisters(registers);
4224-
4225-
// Load the immediate arguments from the deopt exit to pass to the builtin.
4226-
Register slot_arg = descriptor.GetRegisterParameter(Descriptor::kSlot);
4227-
Register handler_arg = descriptor.GetRegisterParameter(Descriptor::kHandler);
4228-
__ Lw(handler_arg, MemOperand(fp, CommonFrameConstants::kCallerPCOffset));
4229-
__ Lw(slot_arg, MemOperand(handler_arg,
4230-
Deoptimizer::kEagerWithResumeImmedArgs1PcOffset));
4231-
__ Lw(
4232-
handler_arg,
4233-
MemOperand(handler_arg, Deoptimizer::kEagerWithResumeImmedArgs2PcOffset));
4234-
4235-
__ Call(builtin_target, RelocInfo::CODE_TARGET);
4236-
4237-
Label deopt, bailout;
4238-
__ Branch(&deopt, ne, v0,
4239-
Operand(static_cast<int>(DynamicCheckMapsStatus::kSuccess)));
4240-
4241-
__ MaybeRestoreRegisters(registers);
4242-
__ LeaveFrame(StackFrame::INTERNAL);
4243-
__ Ret();
4244-
4245-
__ bind(&deopt);
4246-
__ Branch(&bailout, eq, v0,
4247-
Operand(static_cast<int>(DynamicCheckMapsStatus::kBailout)));
4248-
4249-
if (FLAG_debug_code) {
4250-
__ Assert(eq, AbortReason::kUnexpectedDynamicCheckMapsStatus, v0,
4251-
Operand(static_cast<int>(DynamicCheckMapsStatus::kDeopt)));
4252-
}
4253-
__ MaybeRestoreRegisters(registers);
4254-
__ LeaveFrame(StackFrame::INTERNAL);
4255-
Handle<Code> deopt_eager = masm->isolate()->builtins()->code_handle(
4256-
Deoptimizer::GetDeoptimizationEntry(DeoptimizeKind::kEager));
4257-
__ Jump(deopt_eager, RelocInfo::CODE_TARGET);
4258-
4259-
__ bind(&bailout);
4260-
__ MaybeRestoreRegisters(registers);
4261-
__ LeaveFrame(StackFrame::INTERNAL);
4262-
Handle<Code> deopt_bailout = masm->isolate()->builtins()->code_handle(
4263-
Deoptimizer::GetDeoptimizationEntry(DeoptimizeKind::kBailout));
4264-
__ Jump(deopt_bailout, RelocInfo::CODE_TARGET);
4265-
}
4266-
42674195
#undef __
42684196

42694197
} // namespace internal

src/builtins/mips64/builtins-mips64.cc

-71
Original file line numberDiff line numberDiff line change
@@ -3591,10 +3591,6 @@ void Builtins::Generate_DeoptimizationEntry_Soft(MacroAssembler* masm) {
35913591
Generate_DeoptimizationEntry(masm, DeoptimizeKind::kSoft);
35923592
}
35933593

3594-
void Builtins::Generate_DeoptimizationEntry_Bailout(MacroAssembler* masm) {
3595-
Generate_DeoptimizationEntry(masm, DeoptimizeKind::kBailout);
3596-
}
3597-
35983594
void Builtins::Generate_DeoptimizationEntry_Lazy(MacroAssembler* masm) {
35993595
Generate_DeoptimizationEntry(masm, DeoptimizeKind::kLazy);
36003596
}
@@ -3774,73 +3770,6 @@ void Builtins::Generate_InterpreterOnStackReplacement_ToBaseline(
37743770
Generate_BaselineOrInterpreterEntry(masm, false, true);
37753771
}
37763772

3777-
void Builtins::Generate_DynamicCheckMapsTrampoline(MacroAssembler* masm) {
3778-
Generate_DynamicCheckMapsTrampoline<DynamicCheckMapsDescriptor>(
3779-
masm, BUILTIN_CODE(masm->isolate(), DynamicCheckMaps));
3780-
}
3781-
3782-
void Builtins::Generate_DynamicCheckMapsWithFeedbackVectorTrampoline(
3783-
MacroAssembler* masm) {
3784-
Generate_DynamicCheckMapsTrampoline<
3785-
DynamicCheckMapsWithFeedbackVectorDescriptor>(
3786-
masm, BUILTIN_CODE(masm->isolate(), DynamicCheckMapsWithFeedbackVector));
3787-
}
3788-
3789-
template <class Descriptor>
3790-
void Builtins::Generate_DynamicCheckMapsTrampoline(
3791-
MacroAssembler* masm, Handle<Code> builtin_target) {
3792-
FrameScope scope(masm, StackFrame::MANUAL);
3793-
__ EnterFrame(StackFrame::INTERNAL);
3794-
3795-
// Only save the registers that the DynamicCheckMaps builtin can clobber.
3796-
Descriptor descriptor;
3797-
RegList registers = descriptor.allocatable_registers();
3798-
// FLAG_debug_code is enabled CSA checks will call C function and so we need
3799-
// to save all CallerSaved registers too.
3800-
if (FLAG_debug_code) registers |= kJSCallerSaved;
3801-
__ MaybeSaveRegisters(registers);
3802-
3803-
// Load the immediate arguments from the deopt exit to pass to the builtin.
3804-
Register slot_arg = descriptor.GetRegisterParameter(Descriptor::kSlot);
3805-
Register handler_arg = descriptor.GetRegisterParameter(Descriptor::kHandler);
3806-
__ Ld(handler_arg, MemOperand(fp, CommonFrameConstants::kCallerPCOffset));
3807-
__ Uld(slot_arg, MemOperand(handler_arg,
3808-
Deoptimizer::kEagerWithResumeImmedArgs1PcOffset));
3809-
__ Uld(
3810-
handler_arg,
3811-
MemOperand(handler_arg, Deoptimizer::kEagerWithResumeImmedArgs2PcOffset));
3812-
__ Call(builtin_target, RelocInfo::CODE_TARGET);
3813-
3814-
Label deopt, bailout;
3815-
__ Branch(&deopt, ne, v0,
3816-
Operand(static_cast<int>(DynamicCheckMapsStatus::kSuccess)));
3817-
3818-
__ MaybeRestoreRegisters(registers);
3819-
__ LeaveFrame(StackFrame::INTERNAL);
3820-
__ Ret();
3821-
3822-
__ bind(&deopt);
3823-
__ Branch(&bailout, eq, v0,
3824-
Operand(static_cast<int>(DynamicCheckMapsStatus::kBailout)));
3825-
3826-
if (FLAG_debug_code) {
3827-
__ Assert(eq, AbortReason::kUnexpectedDynamicCheckMapsStatus, v0,
3828-
Operand(static_cast<int>(DynamicCheckMapsStatus::kDeopt)));
3829-
}
3830-
__ MaybeRestoreRegisters(registers);
3831-
__ LeaveFrame(StackFrame::INTERNAL);
3832-
Handle<Code> deopt_eager = masm->isolate()->builtins()->code_handle(
3833-
Deoptimizer::GetDeoptimizationEntry(DeoptimizeKind::kEager));
3834-
__ Jump(deopt_eager, RelocInfo::CODE_TARGET);
3835-
3836-
__ bind(&bailout);
3837-
__ MaybeRestoreRegisters(registers);
3838-
__ LeaveFrame(StackFrame::INTERNAL);
3839-
Handle<Code> deopt_bailout = masm->isolate()->builtins()->code_handle(
3840-
Deoptimizer::GetDeoptimizationEntry(DeoptimizeKind::kBailout));
3841-
__ Jump(deopt_bailout, RelocInfo::CODE_TARGET);
3842-
}
3843-
38443773
#undef __
38453774

38463775
} // namespace internal

src/codegen/loong64/interface-descriptors-loong64-inl.h

-12
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,6 @@ constexpr auto WriteBarrierDescriptor::registers() {
4141
return RegisterArray(a1, a5, a4, a2, a0, a3, kContextRegister);
4242
}
4343

44-
// static
45-
constexpr auto DynamicCheckMapsDescriptor::registers() {
46-
STATIC_ASSERT(kReturnRegister0 == a0);
47-
return RegisterArray(a0, a1, a2, a3, cp);
48-
}
49-
50-
// static
51-
constexpr auto DynamicCheckMapsWithFeedbackVectorDescriptor::registers() {
52-
STATIC_ASSERT(kReturnRegister0 == a0);
53-
return RegisterArray(a0, a1, a2, a3, cp);
54-
}
55-
5644
// static
5745
constexpr Register LoadDescriptor::ReceiverRegister() { return a1; }
5846
// static

src/codegen/loong64/macro-assembler-loong64.cc

-6
Original file line numberDiff line numberDiff line change
@@ -4090,12 +4090,6 @@ void TurboAssembler::CallForDeoptimization(Builtin target, int, Label* exit,
40904090
(kind == DeoptimizeKind::kLazy)
40914091
? Deoptimizer::kLazyDeoptExitSize
40924092
: Deoptimizer::kNonLazyDeoptExitSize);
4093-
4094-
if (kind == DeoptimizeKind::kEagerWithResume) {
4095-
Branch(ret);
4096-
DCHECK_EQ(SizeOfCodeGeneratedSince(exit),
4097-
Deoptimizer::kEagerWithResumeBeforeArgsSize);
4098-
}
40994093
}
41004094

41014095
void TurboAssembler::LoadCodeObjectEntry(Register destination,

src/codegen/mips/interface-descriptors-mips-inl.h

-12
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,6 @@ constexpr auto WriteBarrierDescriptor::registers() {
3737
return RegisterArray(a1, t1, t0, a0, a2, v0, a3, kContextRegister);
3838
}
3939

40-
// static
41-
constexpr auto DynamicCheckMapsDescriptor::registers() {
42-
STATIC_ASSERT(kReturnRegister0 == v0);
43-
return RegisterArray(kReturnRegister0, a0, a1, a2, cp);
44-
}
45-
46-
// static
47-
constexpr auto DynamicCheckMapsWithFeedbackVectorDescriptor::registers() {
48-
STATIC_ASSERT(kReturnRegister0 == v0);
49-
return RegisterArray(kReturnRegister0, a0, a1, a2, cp);
50-
}
51-
5240
// static
5341
constexpr Register LoadDescriptor::ReceiverRegister() { return a1; }
5442
// static

src/codegen/mips/macro-assembler-mips.cc

-5
Original file line numberDiff line numberDiff line change
@@ -5574,11 +5574,6 @@ void TurboAssembler::CallForDeoptimization(Builtin target, int, Label* exit,
55745574
(kind == DeoptimizeKind::kLazy)
55755575
? Deoptimizer::kLazyDeoptExitSize
55765576
: Deoptimizer::kNonLazyDeoptExitSize);
5577-
if (kind == DeoptimizeKind::kEagerWithResume) {
5578-
Branch(ret);
5579-
DCHECK_EQ(SizeOfCodeGeneratedSince(exit),
5580-
Deoptimizer::kEagerWithResumeBeforeArgsSize);
5581-
}
55825577
}
55835578

55845579
void TurboAssembler::LoadCodeObjectEntry(Register destination,

src/codegen/mips64/interface-descriptors-mips64-inl.h

-12
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,6 @@ constexpr auto WriteBarrierDescriptor::registers() {
4141
return RegisterArray(a1, a5, a4, a0, a2, v0, a3, kContextRegister);
4242
}
4343

44-
// static
45-
constexpr auto DynamicCheckMapsDescriptor::registers() {
46-
STATIC_ASSERT(kReturnRegister0 == v0);
47-
return RegisterArray(kReturnRegister0, a0, a1, a2, cp);
48-
}
49-
50-
// static
51-
constexpr auto DynamicCheckMapsWithFeedbackVectorDescriptor::registers() {
52-
STATIC_ASSERT(kReturnRegister0 == v0);
53-
return RegisterArray(kReturnRegister0, a0, a1, a2, cp);
54-
}
55-
5644
// static
5745
constexpr Register LoadDescriptor::ReceiverRegister() { return a1; }
5846
// static

src/codegen/mips64/macro-assembler-mips64.cc

-6
Original file line numberDiff line numberDiff line change
@@ -6117,12 +6117,6 @@ void TurboAssembler::CallForDeoptimization(Builtin target, int, Label* exit,
61176117
(kind == DeoptimizeKind::kLazy)
61186118
? Deoptimizer::kLazyDeoptExitSize
61196119
: Deoptimizer::kNonLazyDeoptExitSize);
6120-
6121-
if (kind == DeoptimizeKind::kEagerWithResume) {
6122-
Branch(ret);
6123-
DCHECK_EQ(SizeOfCodeGeneratedSince(exit),
6124-
Deoptimizer::kEagerWithResumeBeforeArgsSize);
6125-
}
61266120
}
61276121

61286122
void TurboAssembler::LoadCodeObjectEntry(Register destination,

src/deoptimizer/loong64/deoptimizer-loong64.cc

-7
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,6 @@ namespace internal {
1010
const bool Deoptimizer::kSupportsFixedDeoptExitSizes = true;
1111
const int Deoptimizer::kNonLazyDeoptExitSize = 2 * kInstrSize;
1212
const int Deoptimizer::kLazyDeoptExitSize = 2 * kInstrSize;
13-
const int Deoptimizer::kEagerWithResumeBeforeArgsSize = 3 * kInstrSize;
14-
const int Deoptimizer::kEagerWithResumeDeoptExitSize =
15-
kEagerWithResumeBeforeArgsSize + 2 * kSystemPointerSize;
16-
// TODO(LOONG_dev): LOONG64 Is the PcOffset right?
17-
const int Deoptimizer::kEagerWithResumeImmedArgs1PcOffset = kInstrSize;
18-
const int Deoptimizer::kEagerWithResumeImmedArgs2PcOffset =
19-
kInstrSize + kSystemPointerSize;
2013

2114
Float32 RegisterValues::GetFloatRegister(unsigned n) const {
2215
return Float32::FromBits(

src/deoptimizer/mips/deoptimizer-mips.cc

-6
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,6 @@ namespace internal {
1010
const bool Deoptimizer::kSupportsFixedDeoptExitSizes = true;
1111
const int Deoptimizer::kNonLazyDeoptExitSize = 3 * kInstrSize;
1212
const int Deoptimizer::kLazyDeoptExitSize = 3 * kInstrSize;
13-
const int Deoptimizer::kEagerWithResumeBeforeArgsSize = 5 * kInstrSize;
14-
const int Deoptimizer::kEagerWithResumeDeoptExitSize =
15-
kEagerWithResumeBeforeArgsSize + 2 * kSystemPointerSize;
16-
const int Deoptimizer::kEagerWithResumeImmedArgs1PcOffset = 2 * kInstrSize;
17-
const int Deoptimizer::kEagerWithResumeImmedArgs2PcOffset =
18-
2 * kInstrSize + kSystemPointerSize;
1913

2014
Float32 RegisterValues::GetFloatRegister(unsigned n) const {
2115
return Float32::FromBits(

src/deoptimizer/mips64/deoptimizer-mips64.cc

-6
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,6 @@ namespace internal {
1010
const bool Deoptimizer::kSupportsFixedDeoptExitSizes = true;
1111
const int Deoptimizer::kNonLazyDeoptExitSize = 3 * kInstrSize;
1212
const int Deoptimizer::kLazyDeoptExitSize = 3 * kInstrSize;
13-
const int Deoptimizer::kEagerWithResumeBeforeArgsSize = 5 * kInstrSize;
14-
const int Deoptimizer::kEagerWithResumeDeoptExitSize =
15-
kEagerWithResumeBeforeArgsSize + 2 * kSystemPointerSize;
16-
const int Deoptimizer::kEagerWithResumeImmedArgs1PcOffset = 2 * kInstrSize;
17-
const int Deoptimizer::kEagerWithResumeImmedArgs2PcOffset =
18-
2 * kInstrSize + kSystemPointerSize;
1913

2014
Float32 RegisterValues::GetFloatRegister(unsigned n) const {
2115
return Float32::FromBits(

0 commit comments

Comments
 (0)