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;
|
||||
|
||||
Handle<Map> original_map() { return hydrogen()->original_map(); }
|
||||
Handle<Map> transitioned_map() { return hydrogen()->transitioned_map(); }
|
||||
Handle<Map> original_map() { return hydrogen()->original_map().handle(); }
|
||||
Handle<Map> transitioned_map() {
|
||||
return hydrogen()->transitioned_map().handle();
|
||||
}
|
||||
ElementsKind from_kind() { return hydrogen()->from_kind(); }
|
||||
ElementsKind to_kind() { return hydrogen()->to_kind(); }
|
||||
};
|
||||
|
@ -3133,12 +3133,12 @@ void HStoreKeyedGeneric::PrintDataTo(StringStream* stream) {
|
||||
|
||||
void HTransitionElementsKind::PrintDataTo(StringStream* stream) {
|
||||
object()->PrintNameTo(stream);
|
||||
ElementsKind from_kind = original_map()->elements_kind();
|
||||
ElementsKind to_kind = transitioned_map()->elements_kind();
|
||||
ElementsKind from_kind = original_map().handle()->elements_kind();
|
||||
ElementsKind to_kind = transitioned_map().handle()->elements_kind();
|
||||
stream->Add(" %p [%s] -> %p [%s]",
|
||||
*original_map(),
|
||||
*original_map().handle(),
|
||||
ElementsAccessor::ForKind(from_kind)->name(),
|
||||
*transitioned_map(),
|
||||
*transitioned_map().handle(),
|
||||
ElementsAccessor::ForKind(to_kind)->name());
|
||||
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* context() { return OperandAt(1); }
|
||||
Handle<Map> original_map() { return original_map_; }
|
||||
Handle<Map> transitioned_map() { return transitioned_map_; }
|
||||
Unique<Map> original_map() { return original_map_; }
|
||||
Unique<Map> transitioned_map() { return transitioned_map_; }
|
||||
ElementsKind from_kind() { return from_kind_; }
|
||||
ElementsKind to_kind() { return to_kind_; }
|
||||
|
||||
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)
|
||||
|
||||
protected:
|
||||
virtual bool DataEquals(HValue* other) V8_OVERRIDE {
|
||||
HTransitionElementsKind* instr = HTransitionElementsKind::cast(other);
|
||||
return original_map_unique_id_ == instr->original_map_unique_id_ &&
|
||||
transitioned_map_unique_id_ == instr->transitioned_map_unique_id_;
|
||||
return original_map_ == instr->original_map_ &&
|
||||
transitioned_map_ == instr->transitioned_map_;
|
||||
}
|
||||
|
||||
private:
|
||||
@ -6539,10 +6534,8 @@ class HTransitionElementsKind V8_FINAL : public HTemplateInstruction<2> {
|
||||
HValue* object,
|
||||
Handle<Map> original_map,
|
||||
Handle<Map> transitioned_map)
|
||||
: original_map_(original_map),
|
||||
transitioned_map_(transitioned_map),
|
||||
original_map_unique_id_(),
|
||||
transitioned_map_unique_id_(),
|
||||
: original_map_(Unique<Map>(original_map)),
|
||||
transitioned_map_(Unique<Map>(transitioned_map)),
|
||||
from_kind_(original_map->elements_kind()),
|
||||
to_kind_(transitioned_map->elements_kind()) {
|
||||
SetOperandAt(0, object);
|
||||
@ -6556,10 +6549,8 @@ class HTransitionElementsKind V8_FINAL : public HTemplateInstruction<2> {
|
||||
set_representation(Representation::Tagged());
|
||||
}
|
||||
|
||||
Handle<Map> original_map_;
|
||||
Handle<Map> transitioned_map_;
|
||||
UniqueValueId original_map_unique_id_;
|
||||
UniqueValueId transitioned_map_unique_id_;
|
||||
Unique<Map> original_map_;
|
||||
Unique<Map> transitioned_map_;
|
||||
ElementsKind from_kind_;
|
||||
ElementsKind to_kind_;
|
||||
};
|
||||
|
@ -4853,9 +4853,8 @@ void LCodeGen::DoTransitionElementsKind(LTransitionElementsKind* instr) {
|
||||
__ j(not_equal, ¬_applicable, branch_distance);
|
||||
if (is_simple_map_transition) {
|
||||
Register new_map_reg = ToRegister(instr->new_map_temp());
|
||||
Handle<Map> map = instr->hydrogen()->transitioned_map();
|
||||
__ mov(FieldOperand(object_reg, HeapObject::kMapOffset),
|
||||
Immediate(map));
|
||||
Immediate(to_map));
|
||||
// Write barrier.
|
||||
ASSERT_NE(instr->temp(), NULL);
|
||||
__ 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;
|
||||
|
||||
Handle<Map> original_map() { return hydrogen()->original_map(); }
|
||||
Handle<Map> transitioned_map() { return hydrogen()->transitioned_map(); }
|
||||
Handle<Map> original_map() { return hydrogen()->original_map().handle(); }
|
||||
Handle<Map> transitioned_map() {
|
||||
return hydrogen()->transitioned_map().handle();
|
||||
}
|
||||
ElementsKind from_kind() { return hydrogen()->from_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;
|
||||
|
||||
Handle<Map> original_map() { return hydrogen()->original_map(); }
|
||||
Handle<Map> transitioned_map() { return hydrogen()->transitioned_map(); }
|
||||
Handle<Map> original_map() { return hydrogen()->original_map().handle(); }
|
||||
Handle<Map> transitioned_map() {
|
||||
return hydrogen()->transitioned_map().handle();
|
||||
}
|
||||
ElementsKind from_kind() { return hydrogen()->from_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;
|
||||
|
||||
Handle<Map> original_map() { return hydrogen()->original_map(); }
|
||||
Handle<Map> transitioned_map() { return hydrogen()->transitioned_map(); }
|
||||
Handle<Map> original_map() { return hydrogen()->original_map().handle(); }
|
||||
Handle<Map> transitioned_map() {
|
||||
return hydrogen()->transitioned_map().handle();
|
||||
}
|
||||
ElementsKind from_kind() { return hydrogen()->from_kind(); }
|
||||
ElementsKind to_kind() { return hydrogen()->to_kind(); }
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user