MIPS64: Externalize deoptimization reasons.
Port 2491a639bf
BUG=
Review URL: https://codereview.chromium.org/888143004
Cr-Commit-Position: refs/heads/master@{#26473}
This commit is contained in:
parent
b67b3c5401
commit
1ffaf13b2d
@ -2581,6 +2581,15 @@ void Assembler::RecordComment(const char* msg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Assembler::RecordDeoptReason(const int reason, const int raw_position) {
|
||||||
|
if (FLAG_trace_deopt) {
|
||||||
|
EnsureSpace ensure_space(this);
|
||||||
|
RecordRelocInfo(RelocInfo::POSITION, raw_position);
|
||||||
|
RecordRelocInfo(RelocInfo::DEOPT_REASON, reason);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int Assembler::RelocateInternalReference(byte* pc, intptr_t pc_delta) {
|
int Assembler::RelocateInternalReference(byte* pc, intptr_t pc_delta) {
|
||||||
Instr instr = instr_at(pc);
|
Instr instr = instr_at(pc);
|
||||||
DCHECK(IsJ(instr) || IsLui(instr));
|
DCHECK(IsJ(instr) || IsLui(instr));
|
||||||
|
@ -1055,6 +1055,10 @@ class Assembler : public AssemblerBase {
|
|||||||
// Use --code-comments to enable.
|
// Use --code-comments to enable.
|
||||||
void RecordComment(const char* msg);
|
void RecordComment(const char* msg);
|
||||||
|
|
||||||
|
// Record a deoptimization reason that can be used by a log or cpu profiler.
|
||||||
|
// Use --trace-deopt to enable.
|
||||||
|
void RecordDeoptReason(const int reason, const int raw_position);
|
||||||
|
|
||||||
static int RelocateInternalReference(byte* pc, intptr_t pc_delta);
|
static int RelocateInternalReference(byte* pc, intptr_t pc_delta);
|
||||||
|
|
||||||
// Writes a single byte or word of data in the code stream. Used for
|
// Writes a single byte or word of data in the code stream. Used for
|
||||||
|
@ -763,9 +763,9 @@ void LCodeGen::RegisterEnvironmentForDeoptimization(LEnvironment* environment,
|
|||||||
|
|
||||||
|
|
||||||
void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr,
|
void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr,
|
||||||
|
Deoptimizer::DeoptReason deopt_reason,
|
||||||
Deoptimizer::BailoutType bailout_type,
|
Deoptimizer::BailoutType bailout_type,
|
||||||
const char* detail, Register src1,
|
Register src1, const Operand& src2) {
|
||||||
const Operand& src2) {
|
|
||||||
LEnvironment* environment = instr->environment();
|
LEnvironment* environment = instr->environment();
|
||||||
RegisterEnvironmentForDeoptimization(environment, Safepoint::kNoLazyDeopt);
|
RegisterEnvironmentForDeoptimization(environment, Safepoint::kNoLazyDeopt);
|
||||||
DCHECK(environment->HasBeenRegistered());
|
DCHECK(environment->HasBeenRegistered());
|
||||||
@ -807,7 +807,7 @@ void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Deoptimizer::Reason reason(instr->hydrogen_value()->position().raw(),
|
Deoptimizer::Reason reason(instr->hydrogen_value()->position().raw(),
|
||||||
instr->Mnemonic(), detail);
|
instr->Mnemonic(), deopt_reason);
|
||||||
DCHECK(info()->IsStub() || frame_is_built_);
|
DCHECK(info()->IsStub() || frame_is_built_);
|
||||||
// Go through jump table if we need to handle condition, build frame, or
|
// Go through jump table if we need to handle condition, build frame, or
|
||||||
// restore caller doubles.
|
// restore caller doubles.
|
||||||
@ -830,12 +830,12 @@ void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr,
|
|||||||
|
|
||||||
|
|
||||||
void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr,
|
void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr,
|
||||||
const char* detail, Register src1,
|
Deoptimizer::DeoptReason deopt_reason,
|
||||||
const Operand& src2) {
|
Register src1, const Operand& src2) {
|
||||||
Deoptimizer::BailoutType bailout_type = info()->IsStub()
|
Deoptimizer::BailoutType bailout_type = info()->IsStub()
|
||||||
? Deoptimizer::LAZY
|
? Deoptimizer::LAZY
|
||||||
: Deoptimizer::EAGER;
|
: Deoptimizer::EAGER;
|
||||||
DeoptimizeIf(condition, instr, bailout_type, detail, src1, src2);
|
DeoptimizeIf(condition, instr, deopt_reason, bailout_type, src1, src2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3275,7 +3275,8 @@ void LCodeGen::DoLoadKeyedFixedDoubleArray(LLoadKeyed* instr) {
|
|||||||
|
|
||||||
if (instr->hydrogen()->RequiresHoleCheck()) {
|
if (instr->hydrogen()->RequiresHoleCheck()) {
|
||||||
__ lwu(scratch, MemOperand(scratch, sizeof(kHoleNanLower32)));
|
__ lwu(scratch, MemOperand(scratch, sizeof(kHoleNanLower32)));
|
||||||
DeoptimizeIf(eq, instr, Deopt::kHole, scratch, Operand(kHoleNanUpper32));
|
DeoptimizeIf(eq, instr, Deoptimizer::kHole, scratch,
|
||||||
|
Operand(kHoleNanUpper32));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5055,7 +5056,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) {
|
|||||||
|
|
||||||
__ bind(&check_false);
|
__ bind(&check_false);
|
||||||
__ LoadRoot(at, Heap::kFalseValueRootIndex);
|
__ LoadRoot(at, Heap::kFalseValueRootIndex);
|
||||||
DeoptimizeIf(ne, instr, Deoptimizer::kNotAHeapNumberUndefinedTrueFalse,
|
DeoptimizeIf(ne, instr, Deoptimizer::kNotAHeapNumberUndefinedBoolean,
|
||||||
scratch2, Operand(at));
|
scratch2, Operand(at));
|
||||||
__ Branch(USE_DELAY_SLOT, &done);
|
__ Branch(USE_DELAY_SLOT, &done);
|
||||||
__ mov(input_reg, zero_reg); // In delay slot.
|
__ mov(input_reg, zero_reg); // In delay slot.
|
||||||
@ -5817,7 +5818,7 @@ void LCodeGen::DoDeoptimize(LDeoptimize* instr) {
|
|||||||
type = Deoptimizer::LAZY;
|
type = Deoptimizer::LAZY;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeoptimizeIf(al, instr, type, instr->hydrogen()->reason(), zero_reg,
|
DeoptimizeIf(al, instr, instr->hydrogen()->reason(), type, zero_reg,
|
||||||
Operand(zero_reg));
|
Operand(zero_reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,12 +223,14 @@ class LCodeGen: public LCodeGenBase {
|
|||||||
void RegisterEnvironmentForDeoptimization(LEnvironment* environment,
|
void RegisterEnvironmentForDeoptimization(LEnvironment* environment,
|
||||||
Safepoint::DeoptMode mode);
|
Safepoint::DeoptMode mode);
|
||||||
void DeoptimizeIf(Condition condition, LInstruction* instr,
|
void DeoptimizeIf(Condition condition, LInstruction* instr,
|
||||||
Deoptimizer::BailoutType bailout_type, const char* detail,
|
Deoptimizer::DeoptReason deopt_reason,
|
||||||
|
Deoptimizer::BailoutType bailout_type,
|
||||||
Register src1 = zero_reg,
|
Register src1 = zero_reg,
|
||||||
const Operand& src2 = Operand(zero_reg));
|
const Operand& src2 = Operand(zero_reg));
|
||||||
void DeoptimizeIf(Condition condition, LInstruction* instr,
|
void DeoptimizeIf(
|
||||||
const char* detail, Register src1 = zero_reg,
|
Condition condition, LInstruction* instr,
|
||||||
const Operand& src2 = Operand(zero_reg));
|
Deoptimizer::DeoptReason deopt_reason = Deoptimizer::kNoReason,
|
||||||
|
Register src1 = zero_reg, const Operand& src2 = Operand(zero_reg));
|
||||||
|
|
||||||
void AddToTranslation(LEnvironment* environment,
|
void AddToTranslation(LEnvironment* environment,
|
||||||
Translation* translation,
|
Translation* translation,
|
||||||
|
Loading…
Reference in New Issue
Block a user