diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc index a96ee406ff..3f39888e9b 100644 --- a/src/hydrogen-instructions.cc +++ b/src/hydrogen-instructions.cc @@ -579,6 +579,13 @@ void HBranch::PrintDataTo(StringStream* stream) const { } +void HCompareMapAndBranch::PrintDataTo(StringStream* stream) const { + stream->Add("on "); + value()->PrintNameTo(stream); + stream->Add(" (%p)", *map()); +} + + void HGoto::PrintDataTo(StringStream* stream) const { stream->Add("B%d", FirstSuccessor()->block_id()); } diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h index aafa7a8830..19d2d4852a 100644 --- a/src/hydrogen-instructions.h +++ b/src/hydrogen-instructions.h @@ -905,6 +905,8 @@ class HCompareMapAndBranch: public HUnaryControlInstruction { virtual HBasicBlock* FirstSuccessor() const { return true_destination_; } virtual HBasicBlock* SecondSuccessor() const { return false_destination_; } + virtual void PrintDataTo(StringStream* stream) const; + Handle map() const { return map_; } DECLARE_CONCRETE_INSTRUCTION(CompareMapAndBranch, "compare_map_and_branch") diff --git a/src/hydrogen.cc b/src/hydrogen.cc index 32108dc1cd..eccb489f46 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -3165,6 +3165,9 @@ HInstruction* HGraphBuilder::BuildStoreNamedField(HValue* object, if (lookup->type() == MAP_TRANSITION) { Handle transition(lookup->GetTransitionMapFromMap(*type)); instr->set_transition(transition); + // TODO(fschneider): Record the new map type of the object in the IR to + // enable elimination of redundant checks after the transition store. + instr->SetFlag(HValue::kChangesMaps); } return instr; }