Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index 537b791d7006ebf17d78dac8cb5fb7e866b583a5..f50a2d5796c3880b0a3a0fc3d4b4d3e327d690da 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -7218,67 +7218,6 @@ void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField( |
HValue* value, |
SmallMapList* types, |
Handle<String> name) { |
- // Use monomorphic store if property lookup results in the same field index |
- // and compatible representation for all maps. Requires special map check on |
- // the set of all handled maps. |
- if (types->length() <= kMaxStorePolymorphism) { |
- int previous_field_offset = 0; |
- bool previous_field_is_in_object = false; |
- Representation previous_representation = Representation::None(); |
- |
- Handle<Map> map; |
- LookupResult lookup(isolate()); |
- int count; |
- for (count = 0; count < types->length(); ++count) { |
- map = types->at(count); |
- if (!ComputeLoadStoreField(map, name, &lookup, false) || |
- lookup.IsTransition()) { |
- break; |
- } |
- Representation representation = lookup.representation(); |
- int index = ComputeLoadStoreFieldIndex(map, &lookup); |
- bool is_in_object = index < 0; |
- int offset = index * kPointerSize; |
- if (index < 0) { |
- offset += map->instance_size(); |
- } else { |
- offset += FixedArray::kHeaderSize; |
- } |
- if (count == 0) { |
- previous_field_offset = offset; |
- previous_field_is_in_object = is_in_object; |
- previous_representation = representation; |
- } else if (offset != previous_field_offset || |
- is_in_object != previous_field_is_in_object || |
- !representation.IsCompatibleForStore( |
- previous_representation)) { |
- break; |
- } |
- } |
- |
- if (types->length() == count) { |
- AddInstruction(new(zone()) HCheckNonSmi(object)); |
- AddInstruction(HCheckMaps::New(object, types, zone())); |
- HInstruction* instr = BuildStoreNamedField( |
- object, name, value, map, &lookup); |
- AddInstruction(instr); |
- instr->set_position(expr->position()); |
- // The HSimulate for the store should not see the stored value in |
- // effect contexts (it is not materialized at expr->id() in the |
- // unoptimized code). |
- if (instr->HasObservableSideEffects()) { |
- if (ast_context()->IsEffect()) { |
- AddSimulate(expr->id(), REMOVABLE_SIMULATE); |
- } else { |
- Push(value); |
- AddSimulate(expr->id(), REMOVABLE_SIMULATE); |
- Drop(1); |
- } |
- } |
- return ast_context()->ReturnValue(value); |
- } |
- } |
- |
// TODO(ager): We should recognize when the prototype chains for different |
// maps are identical. In that case we can avoid repeatedly generating the |
// same prototype map checks. |