Use Unique<Map> in HTransitionElementsKind.
BUG= R=verwaest@chromium.org Review URL: https://codereview.chromium.org/23693006 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16864 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
e59cf6214d
commit
05babb3dca
@ -2276,8 +2276,10 @@ class LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 1, 1> {
|
|||||||
|
|
||||||
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
||||||
|
|
||||||
Handle<Map> original_map() { return hydrogen()->original_map(); }
|
Handle<Map> original_map() { return hydrogen()->original_map().handle(); }
|
||||||
Handle<Map> transitioned_map() { return hydrogen()->transitioned_map(); }
|
Handle<Map> transitioned_map() {
|
||||||
|
return hydrogen()->transitioned_map().handle();
|
||||||
|
}
|
||||||
ElementsKind from_kind() { return hydrogen()->from_kind(); }
|
ElementsKind from_kind() { return hydrogen()->from_kind(); }
|
||||||
ElementsKind to_kind() { return hydrogen()->to_kind(); }
|
ElementsKind to_kind() { return hydrogen()->to_kind(); }
|
||||||
};
|
};
|
||||||
|
@ -3133,12 +3133,12 @@ void HStoreKeyedGeneric::PrintDataTo(StringStream* stream) {
|
|||||||
|
|
||||||
void HTransitionElementsKind::PrintDataTo(StringStream* stream) {
|
void HTransitionElementsKind::PrintDataTo(StringStream* stream) {
|
||||||
object()->PrintNameTo(stream);
|
object()->PrintNameTo(stream);
|
||||||
ElementsKind from_kind = original_map()->elements_kind();
|
ElementsKind from_kind = original_map().handle()->elements_kind();
|
||||||
ElementsKind to_kind = transitioned_map()->elements_kind();
|
ElementsKind to_kind = transitioned_map().handle()->elements_kind();
|
||||||
stream->Add(" %p [%s] -> %p [%s]",
|
stream->Add(" %p [%s] -> %p [%s]",
|
||||||
*original_map(),
|
*original_map().handle(),
|
||||||
ElementsAccessor::ForKind(from_kind)->name(),
|
ElementsAccessor::ForKind(from_kind)->name(),
|
||||||
*transitioned_map(),
|
*transitioned_map().handle(),
|
||||||
ElementsAccessor::ForKind(to_kind)->name());
|
ElementsAccessor::ForKind(to_kind)->name());
|
||||||
if (IsSimpleMapChangeTransition(from_kind, to_kind)) stream->Add(" (simple)");
|
if (IsSimpleMapChangeTransition(from_kind, to_kind)) stream->Add(" (simple)");
|
||||||
}
|
}
|
||||||
|
@ -6513,25 +6513,20 @@ class HTransitionElementsKind V8_FINAL : public HTemplateInstruction<2> {
|
|||||||
|
|
||||||
HValue* object() { return OperandAt(0); }
|
HValue* object() { return OperandAt(0); }
|
||||||
HValue* context() { return OperandAt(1); }
|
HValue* context() { return OperandAt(1); }
|
||||||
Handle<Map> original_map() { return original_map_; }
|
Unique<Map> original_map() { return original_map_; }
|
||||||
Handle<Map> transitioned_map() { return transitioned_map_; }
|
Unique<Map> transitioned_map() { return transitioned_map_; }
|
||||||
ElementsKind from_kind() { return from_kind_; }
|
ElementsKind from_kind() { return from_kind_; }
|
||||||
ElementsKind to_kind() { return to_kind_; }
|
ElementsKind to_kind() { return to_kind_; }
|
||||||
|
|
||||||
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
||||||
|
|
||||||
virtual void FinalizeUniqueValueId() V8_OVERRIDE {
|
|
||||||
original_map_unique_id_ = UniqueValueId(original_map_);
|
|
||||||
transitioned_map_unique_id_ = UniqueValueId(transitioned_map_);
|
|
||||||
}
|
|
||||||
|
|
||||||
DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind)
|
DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind)
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool DataEquals(HValue* other) V8_OVERRIDE {
|
virtual bool DataEquals(HValue* other) V8_OVERRIDE {
|
||||||
HTransitionElementsKind* instr = HTransitionElementsKind::cast(other);
|
HTransitionElementsKind* instr = HTransitionElementsKind::cast(other);
|
||||||
return original_map_unique_id_ == instr->original_map_unique_id_ &&
|
return original_map_ == instr->original_map_ &&
|
||||||
transitioned_map_unique_id_ == instr->transitioned_map_unique_id_;
|
transitioned_map_ == instr->transitioned_map_;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -6539,10 +6534,8 @@ class HTransitionElementsKind V8_FINAL : public HTemplateInstruction<2> {
|
|||||||
HValue* object,
|
HValue* object,
|
||||||
Handle<Map> original_map,
|
Handle<Map> original_map,
|
||||||
Handle<Map> transitioned_map)
|
Handle<Map> transitioned_map)
|
||||||
: original_map_(original_map),
|
: original_map_(Unique<Map>(original_map)),
|
||||||
transitioned_map_(transitioned_map),
|
transitioned_map_(Unique<Map>(transitioned_map)),
|
||||||
original_map_unique_id_(),
|
|
||||||
transitioned_map_unique_id_(),
|
|
||||||
from_kind_(original_map->elements_kind()),
|
from_kind_(original_map->elements_kind()),
|
||||||
to_kind_(transitioned_map->elements_kind()) {
|
to_kind_(transitioned_map->elements_kind()) {
|
||||||
SetOperandAt(0, object);
|
SetOperandAt(0, object);
|
||||||
@ -6556,10 +6549,8 @@ class HTransitionElementsKind V8_FINAL : public HTemplateInstruction<2> {
|
|||||||
set_representation(Representation::Tagged());
|
set_representation(Representation::Tagged());
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle<Map> original_map_;
|
Unique<Map> original_map_;
|
||||||
Handle<Map> transitioned_map_;
|
Unique<Map> transitioned_map_;
|
||||||
UniqueValueId original_map_unique_id_;
|
|
||||||
UniqueValueId transitioned_map_unique_id_;
|
|
||||||
ElementsKind from_kind_;
|
ElementsKind from_kind_;
|
||||||
ElementsKind to_kind_;
|
ElementsKind to_kind_;
|
||||||
};
|
};
|
||||||
|
@ -4853,9 +4853,8 @@ void LCodeGen::DoTransitionElementsKind(LTransitionElementsKind* instr) {
|
|||||||
__ j(not_equal, ¬_applicable, branch_distance);
|
__ j(not_equal, ¬_applicable, branch_distance);
|
||||||
if (is_simple_map_transition) {
|
if (is_simple_map_transition) {
|
||||||
Register new_map_reg = ToRegister(instr->new_map_temp());
|
Register new_map_reg = ToRegister(instr->new_map_temp());
|
||||||
Handle<Map> map = instr->hydrogen()->transitioned_map();
|
|
||||||
__ mov(FieldOperand(object_reg, HeapObject::kMapOffset),
|
__ mov(FieldOperand(object_reg, HeapObject::kMapOffset),
|
||||||
Immediate(map));
|
Immediate(to_map));
|
||||||
// Write barrier.
|
// Write barrier.
|
||||||
ASSERT_NE(instr->temp(), NULL);
|
ASSERT_NE(instr->temp(), NULL);
|
||||||
__ RecordWriteForMap(object_reg, to_map, new_map_reg,
|
__ RecordWriteForMap(object_reg, to_map, new_map_reg,
|
||||||
|
@ -2355,8 +2355,10 @@ class LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 2, 2> {
|
|||||||
|
|
||||||
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
||||||
|
|
||||||
Handle<Map> original_map() { return hydrogen()->original_map(); }
|
Handle<Map> original_map() { return hydrogen()->original_map().handle(); }
|
||||||
Handle<Map> transitioned_map() { return hydrogen()->transitioned_map(); }
|
Handle<Map> transitioned_map() {
|
||||||
|
return hydrogen()->transitioned_map().handle();
|
||||||
|
}
|
||||||
ElementsKind from_kind() { return hydrogen()->from_kind(); }
|
ElementsKind from_kind() { return hydrogen()->from_kind(); }
|
||||||
ElementsKind to_kind() { return hydrogen()->to_kind(); }
|
ElementsKind to_kind() { return hydrogen()->to_kind(); }
|
||||||
};
|
};
|
||||||
|
@ -2250,8 +2250,10 @@ class LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 1, 1> {
|
|||||||
|
|
||||||
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
||||||
|
|
||||||
Handle<Map> original_map() { return hydrogen()->original_map(); }
|
Handle<Map> original_map() { return hydrogen()->original_map().handle(); }
|
||||||
Handle<Map> transitioned_map() { return hydrogen()->transitioned_map(); }
|
Handle<Map> transitioned_map() {
|
||||||
|
return hydrogen()->transitioned_map().handle();
|
||||||
|
}
|
||||||
ElementsKind from_kind() { return hydrogen()->from_kind(); }
|
ElementsKind from_kind() { return hydrogen()->from_kind(); }
|
||||||
ElementsKind to_kind() { return hydrogen()->to_kind(); }
|
ElementsKind to_kind() { return hydrogen()->to_kind(); }
|
||||||
};
|
};
|
||||||
|
@ -2201,8 +2201,10 @@ class LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 1, 2> {
|
|||||||
|
|
||||||
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
||||||
|
|
||||||
Handle<Map> original_map() { return hydrogen()->original_map(); }
|
Handle<Map> original_map() { return hydrogen()->original_map().handle(); }
|
||||||
Handle<Map> transitioned_map() { return hydrogen()->transitioned_map(); }
|
Handle<Map> transitioned_map() {
|
||||||
|
return hydrogen()->transitioned_map().handle();
|
||||||
|
}
|
||||||
ElementsKind from_kind() { return hydrogen()->from_kind(); }
|
ElementsKind from_kind() { return hydrogen()->from_kind(); }
|
||||||
ElementsKind to_kind() { return hydrogen()->to_kind(); }
|
ElementsKind to_kind() { return hydrogen()->to_kind(); }
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user