Thread the Lithium instruction down to DeoptimizeIf and friends.

This is a purely mechanical refactoring and a first step towards being
able to report more helpful deoptimization reasons. With this
refactoring, we know at least the mnemonic of the instruction causing
the deopt, although this is not used yet. Future steps will be using
the mnemonic, passing additional explicit deopt reasons and removing
the fragile machinery of searching for code comments.

R=jkummerow@chromium.org

Review URL: https://codereview.chromium.org/559143003

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24026 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 1debacf6
This diff is collapsed.
...@@ -234,10 +234,9 @@ class LCodeGen: public LCodeGenBase { ...@@ -234,10 +234,9 @@ class LCodeGen: public LCodeGenBase {
void RegisterEnvironmentForDeoptimization(LEnvironment* environment, void RegisterEnvironmentForDeoptimization(LEnvironment* environment,
Safepoint::DeoptMode mode); Safepoint::DeoptMode mode);
void DeoptimizeIf(Condition condition, void DeoptimizeIf(Condition condition, LInstruction* instr,
LEnvironment* environment,
Deoptimizer::BailoutType bailout_type); Deoptimizer::BailoutType bailout_type);
void DeoptimizeIf(Condition condition, LEnvironment* environment); void DeoptimizeIf(Condition condition, LInstruction* instr);
void AddToTranslation(LEnvironment* environment, void AddToTranslation(LEnvironment* environment,
Translation* translation, Translation* translation,
...@@ -281,12 +280,8 @@ class LCodeGen: public LCodeGenBase { ...@@ -281,12 +280,8 @@ class LCodeGen: public LCodeGenBase {
void EmitBranch(InstrType instr, Condition condition); void EmitBranch(InstrType instr, Condition condition);
template<class InstrType> template<class InstrType>
void EmitFalseBranch(InstrType instr, Condition condition); void EmitFalseBranch(InstrType instr, Condition condition);
void EmitNumberUntagD(Register input, void EmitNumberUntagD(LNumberUntagD* instr, Register input,
DwVfpRegister result, DwVfpRegister result, NumberUntagDMode mode);
bool allow_undefined_as_nan,
bool deoptimize_on_minus_zero,
LEnvironment* env,
NumberUntagDMode mode);
// Emits optimized code for typeof x == "y". Modifies input register. // Emits optimized code for typeof x == "y". Modifies input register.
// Returns the condition on which a final split to // Returns the condition on which a final split to
......
This diff is collapsed.
...@@ -213,27 +213,24 @@ class LCodeGen: public LCodeGenBase { ...@@ -213,27 +213,24 @@ class LCodeGen: public LCodeGenBase {
Register temp, Register temp,
LOperand* index, LOperand* index,
String::Encoding encoding); String::Encoding encoding);
void DeoptimizeBranch( void DeoptimizeBranch(LInstruction* instr, BranchType branch_type,
LEnvironment* environment, Register reg = NoReg, int bit = -1,
BranchType branch_type, Register reg = NoReg, int bit = -1, Deoptimizer::BailoutType* override_bailout_type = NULL);
Deoptimizer::BailoutType* override_bailout_type = NULL); void Deoptimize(LInstruction* instr,
void Deoptimize(LEnvironment* environment,
Deoptimizer::BailoutType* override_bailout_type = NULL); Deoptimizer::BailoutType* override_bailout_type = NULL);
void DeoptimizeIf(Condition cond, LEnvironment* environment); void DeoptimizeIf(Condition cond, LInstruction* instr);
void DeoptimizeIfZero(Register rt, LEnvironment* environment); void DeoptimizeIfZero(Register rt, LInstruction* instr);
void DeoptimizeIfNotZero(Register rt, LEnvironment* environment); void DeoptimizeIfNotZero(Register rt, LInstruction* instr);
void DeoptimizeIfNegative(Register rt, LEnvironment* environment); void DeoptimizeIfNegative(Register rt, LInstruction* instr);
void DeoptimizeIfSmi(Register rt, LEnvironment* environment); void DeoptimizeIfSmi(Register rt, LInstruction* instr);
void DeoptimizeIfNotSmi(Register rt, LEnvironment* environment); void DeoptimizeIfNotSmi(Register rt, LInstruction* instr);
void DeoptimizeIfRoot(Register rt, void DeoptimizeIfRoot(Register rt, Heap::RootListIndex index,
Heap::RootListIndex index, LInstruction* instr);
LEnvironment* environment); void DeoptimizeIfNotRoot(Register rt, Heap::RootListIndex index,
void DeoptimizeIfNotRoot(Register rt, LInstruction* instr);
Heap::RootListIndex index, void DeoptimizeIfMinusZero(DoubleRegister input, LInstruction* instr);
LEnvironment* environment); void DeoptimizeIfBitSet(Register rt, int bit, LInstruction* instr);
void DeoptimizeIfMinusZero(DoubleRegister input, LEnvironment* environment); void DeoptimizeIfBitClear(Register rt, int bit, LInstruction* instr);
void DeoptimizeIfBitSet(Register rt, int bit, LEnvironment* environment);
void DeoptimizeIfBitClear(Register rt, int bit, LEnvironment* environment);
MemOperand PrepareKeyedExternalArrayOperand(Register key, MemOperand PrepareKeyedExternalArrayOperand(Register key,
Register base, Register base,
......
This diff is collapsed.
...@@ -209,10 +209,9 @@ class LCodeGen: public LCodeGenBase { ...@@ -209,10 +209,9 @@ class LCodeGen: public LCodeGenBase {
void RegisterEnvironmentForDeoptimization(LEnvironment* environment, void RegisterEnvironmentForDeoptimization(LEnvironment* environment,
Safepoint::DeoptMode mode); Safepoint::DeoptMode mode);
void DeoptimizeIf(Condition cc, void DeoptimizeIf(Condition cc, LInstruction* instr,
LEnvironment* environment,
Deoptimizer::BailoutType bailout_type); Deoptimizer::BailoutType bailout_type);
void DeoptimizeIf(Condition cc, LEnvironment* environment); void DeoptimizeIf(Condition cc, LInstruction* instr);
bool DeoptEveryNTimes() { bool DeoptEveryNTimes() {
return FLAG_deopt_every_n_times != 0 && !info()->IsStub(); return FLAG_deopt_every_n_times != 0 && !info()->IsStub();
...@@ -269,14 +268,8 @@ class LCodeGen: public LCodeGenBase { ...@@ -269,14 +268,8 @@ class LCodeGen: public LCodeGenBase {
void EmitBranch(InstrType instr, Condition cc); void EmitBranch(InstrType instr, Condition cc);
template<class InstrType> template<class InstrType>
void EmitFalseBranch(InstrType instr, Condition cc); void EmitFalseBranch(InstrType instr, Condition cc);
void EmitNumberUntagD( void EmitNumberUntagD(LNumberUntagD* instr, Register input, Register temp,
Register input, XMMRegister result, NumberUntagDMode mode);
Register temp,
XMMRegister result,
bool allow_undefined_as_nan,
bool deoptimize_on_minus_zero,
LEnvironment* env,
NumberUntagDMode mode = NUMBER_CANDIDATE_IS_ANY_TAGGED);
// Emits optimized code for typeof x == "y". Modifies input register. // Emits optimized code for typeof x == "y". Modifies input register.
// Returns the condition on which a final split to // Returns the condition on which a final split to
......
This diff is collapsed.
...@@ -228,13 +228,11 @@ class LCodeGen: public LCodeGenBase { ...@@ -228,13 +228,11 @@ class LCodeGen: public LCodeGenBase {
void RegisterEnvironmentForDeoptimization(LEnvironment* environment, void RegisterEnvironmentForDeoptimization(LEnvironment* environment,
Safepoint::DeoptMode mode); Safepoint::DeoptMode mode);
void DeoptimizeIf(Condition condition, void DeoptimizeIf(Condition condition, LInstruction* instr,
LEnvironment* environment,
Deoptimizer::BailoutType bailout_type, 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, void DeoptimizeIf(Condition condition, LInstruction* instr,
LEnvironment* environment,
Register src1 = zero_reg, Register src1 = zero_reg,
const Operand& src2 = Operand(zero_reg)); const Operand& src2 = Operand(zero_reg));
...@@ -297,12 +295,8 @@ class LCodeGen: public LCodeGenBase { ...@@ -297,12 +295,8 @@ class LCodeGen: public LCodeGenBase {
FPURegister src1, FPURegister src1,
FPURegister src2); FPURegister src2);
void EmitCmpI(LOperand* left, LOperand* right); void EmitCmpI(LOperand* left, LOperand* right);
void EmitNumberUntagD(Register input, void EmitNumberUntagD(LNumberUntagD* instr, Register input,
DoubleRegister result, DoubleRegister result, NumberUntagDMode mode);
bool allow_undefined_as_nan,
bool deoptimize_on_minus_zero,
LEnvironment* env,
NumberUntagDMode mode);
// Emits optimized code for typeof x == "y". Modifies input register. // Emits optimized code for typeof x == "y". Modifies input register.
// Returns the condition on which a final split to // Returns the condition on which a final split to
......
This diff is collapsed.
...@@ -229,13 +229,11 @@ class LCodeGen: public LCodeGenBase { ...@@ -229,13 +229,11 @@ class LCodeGen: public LCodeGenBase {
void RegisterEnvironmentForDeoptimization(LEnvironment* environment, void RegisterEnvironmentForDeoptimization(LEnvironment* environment,
Safepoint::DeoptMode mode); Safepoint::DeoptMode mode);
void DeoptimizeIf(Condition condition, void DeoptimizeIf(Condition condition, LInstruction* instr,
LEnvironment* environment,
Deoptimizer::BailoutType bailout_type, 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, void DeoptimizeIf(Condition condition, LInstruction* instr,
LEnvironment* environment,
Register src1 = zero_reg, Register src1 = zero_reg,
const Operand& src2 = Operand(zero_reg)); const Operand& src2 = Operand(zero_reg));
...@@ -298,12 +296,8 @@ class LCodeGen: public LCodeGenBase { ...@@ -298,12 +296,8 @@ class LCodeGen: public LCodeGenBase {
FPURegister src1, FPURegister src1,
FPURegister src2); FPURegister src2);
void EmitCmpI(LOperand* left, LOperand* right); void EmitCmpI(LOperand* left, LOperand* right);
void EmitNumberUntagD(Register input, void EmitNumberUntagD(LNumberUntagD* instr, Register input,
DoubleRegister result, DoubleRegister result, NumberUntagDMode mode);
bool allow_undefined_as_nan,
bool deoptimize_on_minus_zero,
LEnvironment* env,
NumberUntagDMode mode);
// Emits optimized code for typeof x == "y". Modifies input register. // Emits optimized code for typeof x == "y". Modifies input register.
// Returns the condition on which a final split to // Returns the condition on which a final split to
......
This diff is collapsed.
...@@ -206,10 +206,9 @@ class LCodeGen: public LCodeGenBase { ...@@ -206,10 +206,9 @@ class LCodeGen: public LCodeGenBase {
int argc); int argc);
void RegisterEnvironmentForDeoptimization(LEnvironment* environment, void RegisterEnvironmentForDeoptimization(LEnvironment* environment,
Safepoint::DeoptMode mode); Safepoint::DeoptMode mode);
void DeoptimizeIf(Condition cc, void DeoptimizeIf(Condition cc, LInstruction* instr,
LEnvironment* environment,
Deoptimizer::BailoutType bailout_type); Deoptimizer::BailoutType bailout_type);
void DeoptimizeIf(Condition cc, LEnvironment* environment); void DeoptimizeIf(Condition cc, LInstruction* instr);
bool DeoptEveryNTimes() { bool DeoptEveryNTimes() {
return FLAG_deopt_every_n_times != 0 && !info()->IsStub(); return FLAG_deopt_every_n_times != 0 && !info()->IsStub();
...@@ -263,13 +262,8 @@ class LCodeGen: public LCodeGenBase { ...@@ -263,13 +262,8 @@ class LCodeGen: public LCodeGenBase {
void EmitBranch(InstrType instr, Condition cc); void EmitBranch(InstrType instr, Condition cc);
template<class InstrType> template<class InstrType>
void EmitFalseBranch(InstrType instr, Condition cc); void EmitFalseBranch(InstrType instr, Condition cc);
void EmitNumberUntagD( void EmitNumberUntagD(LNumberUntagD* instr, Register input,
Register input, XMMRegister result, NumberUntagDMode mode);
XMMRegister result,
bool allow_undefined_as_nan,
bool deoptimize_on_minus_zero,
LEnvironment* env,
NumberUntagDMode mode = NUMBER_CANDIDATE_IS_ANY_TAGGED);
// Emits optimized code for typeof x == "y". Modifies input register. // Emits optimized code for typeof x == "y". Modifies input register.
// Returns the condition on which a final split to // Returns the condition on which a final split to
......
This diff is collapsed.
...@@ -234,10 +234,9 @@ class LCodeGen: public LCodeGenBase { ...@@ -234,10 +234,9 @@ class LCodeGen: public LCodeGenBase {
void RegisterEnvironmentForDeoptimization(LEnvironment* environment, void RegisterEnvironmentForDeoptimization(LEnvironment* environment,
Safepoint::DeoptMode mode); Safepoint::DeoptMode mode);
void DeoptimizeIf(Condition cc, void DeoptimizeIf(Condition cc, LInstruction* instr,
LEnvironment* environment,
Deoptimizer::BailoutType bailout_type); Deoptimizer::BailoutType bailout_type);
void DeoptimizeIf(Condition cc, LEnvironment* environment); void DeoptimizeIf(Condition cc, LInstruction* instr);
bool DeoptEveryNTimes() { bool DeoptEveryNTimes() {
return FLAG_deopt_every_n_times != 0 && !info()->IsStub(); return FLAG_deopt_every_n_times != 0 && !info()->IsStub();
...@@ -294,14 +293,9 @@ class LCodeGen: public LCodeGenBase { ...@@ -294,14 +293,9 @@ class LCodeGen: public LCodeGenBase {
void EmitBranch(InstrType instr, Condition cc); void EmitBranch(InstrType instr, Condition cc);
template<class InstrType> template<class InstrType>
void EmitFalseBranch(InstrType instr, Condition cc); void EmitFalseBranch(InstrType instr, Condition cc);
void EmitNumberUntagDNoSSE2( void EmitNumberUntagDNoSSE2(LNumberUntagD* instr, Register input,
Register input, Register temp, X87Register res_reg,
Register temp, NumberUntagDMode mode);
X87Register res_reg,
bool allow_undefined_as_nan,
bool deoptimize_on_minus_zero,
LEnvironment* env,
NumberUntagDMode mode = NUMBER_CANDIDATE_IS_ANY_TAGGED);
// Emits optimized code for typeof x == "y". Modifies input register. // Emits optimized code for typeof x == "y". Modifies input register.
// Returns the condition on which a final split to // Returns the condition on which a final split to
......
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