[crankshaft] The array protector is a PropertyCell, not a Cell.
There's a typo in a couple of lithium backends, where we assume that the array protector on the Isolate is a Cell instead of a PropertyCell. This could lead to unnecessary deoptimizations. R=yangguo@chromium.org Review-Url: https://codereview.chromium.org/2512943002 Cr-Commit-Position: refs/heads/master@{#41096}
This commit is contained in:
parent
0283d550c9
commit
30db83a3b5
@ -2873,7 +2873,7 @@ void LCodeGen::DoLoadKeyedFixedArray(LLoadKeyed* instr) {
|
||||
// protector cell contains (Smi) Isolate::kProtectorValid. Otherwise
|
||||
// it needs to bail out.
|
||||
__ LoadRoot(result, Heap::kArrayProtectorRootIndex);
|
||||
__ ldr(result, FieldMemOperand(result, Cell::kValueOffset));
|
||||
__ ldr(result, FieldMemOperand(result, PropertyCell::kValueOffset));
|
||||
__ cmp(result, Operand(Smi::FromInt(Isolate::kProtectorValid)));
|
||||
DeoptimizeIf(ne, instr, DeoptimizeReason::kHole);
|
||||
}
|
||||
|
@ -3243,7 +3243,7 @@ void LCodeGen::DoLoadKeyedFixed(LLoadKeyedFixed* instr) {
|
||||
// protector cell contains (Smi) Isolate::kProtectorValid. Otherwise
|
||||
// it needs to bail out.
|
||||
__ LoadRoot(result, Heap::kArrayProtectorRootIndex);
|
||||
__ Ldr(result, FieldMemOperand(result, Cell::kValueOffset));
|
||||
__ Ldr(result, FieldMemOperand(result, PropertyCell::kValueOffset));
|
||||
__ Cmp(result, Operand(Smi::FromInt(Isolate::kProtectorValid)));
|
||||
DeoptimizeIf(ne, instr, DeoptimizeReason::kHole);
|
||||
}
|
||||
|
@ -2799,7 +2799,7 @@ void LCodeGen::DoLoadKeyedFixedArray(LLoadKeyed* instr) {
|
||||
// protector cell contains (Smi) Isolate::kProtectorValid. Otherwise
|
||||
// it needs to bail out.
|
||||
__ LoadRoot(result, Heap::kArrayProtectorRootIndex);
|
||||
__ lw(result, FieldMemOperand(result, Cell::kValueOffset));
|
||||
__ lw(result, FieldMemOperand(result, PropertyCell::kValueOffset));
|
||||
DeoptimizeIf(ne, instr, DeoptimizeReason::kHole, result,
|
||||
Operand(Smi::FromInt(Isolate::kProtectorValid)));
|
||||
}
|
||||
|
@ -2976,7 +2976,7 @@ void LCodeGen::DoLoadKeyedFixedArray(LLoadKeyed* instr) {
|
||||
// it needs to bail out.
|
||||
__ LoadRoot(result, Heap::kArrayProtectorRootIndex);
|
||||
// The comparison only needs LS bits of value, which is a smi.
|
||||
__ ld(result, FieldMemOperand(result, Cell::kValueOffset));
|
||||
__ ld(result, FieldMemOperand(result, PropertyCell::kValueOffset));
|
||||
DeoptimizeIf(ne, instr, DeoptimizeReason::kHole, result,
|
||||
Operand(Smi::FromInt(Isolate::kProtectorValid)));
|
||||
}
|
||||
|
@ -3049,7 +3049,7 @@ void LCodeGen::DoLoadKeyedFixedArray(LLoadKeyed* instr) {
|
||||
// protector cell contains (Smi) Isolate::kProtectorValid. Otherwise
|
||||
// it needs to bail out.
|
||||
__ LoadRoot(result, Heap::kArrayProtectorRootIndex);
|
||||
__ LoadP(result, FieldMemOperand(result, Cell::kValueOffset));
|
||||
__ LoadP(result, FieldMemOperand(result, PropertyCell::kValueOffset));
|
||||
__ CmpSmiLiteral(result, Smi::FromInt(Isolate::kProtectorValid), r0);
|
||||
DeoptimizeIf(ne, instr, DeoptimizeReason::kHole);
|
||||
}
|
||||
|
@ -3012,7 +3012,7 @@ void LCodeGen::DoLoadKeyedFixedArray(LLoadKeyed* instr) {
|
||||
// protector cell contains (Smi) Isolate::kProtectorValid. Otherwise
|
||||
// it needs to bail out.
|
||||
__ LoadRoot(result, Heap::kArrayProtectorRootIndex);
|
||||
__ LoadP(result, FieldMemOperand(result, Cell::kValueOffset));
|
||||
__ LoadP(result, FieldMemOperand(result, PropertyCell::kValueOffset));
|
||||
__ CmpSmiLiteral(result, Smi::FromInt(Isolate::kProtectorValid), r0);
|
||||
DeoptimizeIf(ne, instr, DeoptimizeReason::kHole);
|
||||
}
|
||||
|
@ -2825,7 +2825,7 @@ void LCodeGen::DoLoadKeyedFixedArray(LLoadKeyed* instr) {
|
||||
// protector cell contains (Smi) Isolate::kProtectorValid. Otherwise
|
||||
// it needs to bail out.
|
||||
__ LoadRoot(result, Heap::kArrayProtectorRootIndex);
|
||||
__ Cmp(FieldOperand(result, Cell::kValueOffset),
|
||||
__ Cmp(FieldOperand(result, PropertyCell::kValueOffset),
|
||||
Smi::FromInt(Isolate::kProtectorValid));
|
||||
DeoptimizeIf(not_equal, instr, DeoptimizeReason::kHole);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user