Clean up MObjectState

master
Fedor 2019-07-08 13:10:08 +03:00
parent 5f9f343762
commit 99e451fe76
3 changed files with 6 additions and 59 deletions

View File

@ -4817,15 +4817,14 @@ MCreateThisWithTemplate::canRecoverOnBailout() const
MObjectState::MObjectState(MObjectState* state)
: numSlots_(state->numSlots_),
numFixedSlots_(state->numFixedSlots_),
operandIndex_(state->operandIndex_)
numFixedSlots_(state->numFixedSlots_)
{
// This instruction is only used as a summary for bailout paths.
setResultType(MIRType::Object);
setRecoveredOnBailout();
}
MObjectState::MObjectState(JSObject *templateObject, OperandIndexMap* operandIndex)
MObjectState::MObjectState(JSObject* templateObject)
{
// This instruction is only used as a summary for bailout paths.
setResultType(MIRType::Object);
@ -4836,8 +4835,6 @@ MObjectState::MObjectState(JSObject *templateObject, OperandIndexMap* operandInd
NativeObject* nativeObject = &templateObject->as<NativeObject>();
numSlots_ = nativeObject->slotSpan();
numFixedSlots_ = nativeObject->numFixedSlots();
operandIndex_ = operandIndex;
}
JSObject*
@ -4897,7 +4894,7 @@ MObjectState::New(TempAllocator& alloc, MDefinition* obj)
JSObject* templateObject = templateObjectOf(obj);
MOZ_ASSERT(templateObject, "Unexpected object creation.");
MObjectState* res = new(alloc) MObjectState(templateObject, nullptr);
MObjectState* res = new(alloc) MObjectState(templateObject);
if (!res || !res->init(alloc, obj))
return nullptr;
return res;

View File

@ -375,7 +375,7 @@ class AliasSet {
Element = 1 << 1, // A Value member of obj->elements or
// a typed object.
UnboxedElement = 1 << 2, // An unboxed scalar or reference member of
// typed object or unboxed object.
// typed object.
DynamicSlot = 1 << 3, // A Value member of obj->slots.
FixedSlot = 1 << 4, // A Value member of obj->fixedSlots().
DOMProperty = 1 << 5, // A DOM property
@ -3758,14 +3758,9 @@ class MObjectState
{
private:
uint32_t numSlots_;
uint32_t numFixedSlots_; // valid if isUnboxed() == false.
OperandIndexMap* operandIndex_; // valid if isUnboxed() == true.
uint32_t numFixedSlots_;
bool isUnboxed() const {
return operandIndex_ != nullptr;
}
MObjectState(JSObject *templateObject, OperandIndexMap* operandIndex);
MObjectState(JSObject *templateObject);
explicit MObjectState(MObjectState* state);
MOZ_MUST_USE bool init(TempAllocator& alloc, MDefinition* obj);
@ -3825,18 +3820,6 @@ class MObjectState
setSlot(slot + numFixedSlots(), def);
}
// Interface reserved for unboxed objects.
bool hasOffset(uint32_t offset) const {
MOZ_ASSERT(isUnboxed());
return offset < operandIndex_->map.length() && operandIndex_->map[offset] != 0;
}
MDefinition* getOffset(uint32_t offset) const {
return getOperand(operandIndex_->map[offset]);
}
void setOffset(uint32_t offset, MDefinition* def) {
replaceOperand(operandIndex_->map[offset], def);
}
MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override;
bool canRecoverOnBailout() const override {
return true;

View File

@ -285,10 +285,6 @@ class ObjectMemoryView : public MDefinitionVisitorDefaultNoop
void visitGuardShape(MGuardShape* ins);
void visitFunctionEnvironment(MFunctionEnvironment* ins);
void visitLambda(MLambda* ins);
private:
void storeOffset(MInstruction* ins, size_t offset, MDefinition* value);
void loadOffset(MInstruction* ins, size_t offset);
};
const char* ObjectMemoryView::phaseName = "Scalar Replacement of Object";
@ -630,35 +626,6 @@ ObjectMemoryView::visitLambda(MLambda* ins)
ins->setIncompleteObject();
}
void
ObjectMemoryView::storeOffset(MInstruction* ins, size_t offset, MDefinition* value)
{
// Clone the state and update the slot value.
MOZ_ASSERT(state_->hasOffset(offset));
state_ = BlockState::Copy(alloc_, state_);
if (!state_) {
oom_ = true;
return;
}
state_->setOffset(offset, value);
ins->block()->insertBefore(ins, state_);
// Remove original instruction.
ins->block()->discard(ins);
}
void
ObjectMemoryView::loadOffset(MInstruction* ins, size_t offset)
{
// Replace load by the slot value.
MOZ_ASSERT(state_->hasOffset(offset));
ins->replaceAllUsesWith(state_->getOffset(offset));
// Remove original instruction.
ins->block()->discard(ins);
}
static bool
IndexOf(MDefinition* ins, int32_t* res)
{