| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 54ae31f0f20196c8e4b61e4e4a28e2d72d1695fe..6bbcfe02b236182368295473e425302e43a621c2 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -603,19 +603,6 @@ HConstant* HGraph::GetConstantInt32(SetOncePointer<HConstant>* pointer,
|
| }
|
|
|
|
|
| -HConstant* HGraph::GetConstantSmi(SetOncePointer<HConstant>* pointer,
|
| - int32_t value) {
|
| - if (!pointer->is_set()) {
|
| - HConstant* constant =
|
| - new(zone()) HConstant(Handle<Object>(Smi::FromInt(value), isolate()),
|
| - Representation::Tagged());
|
| - constant->InsertAfter(GetConstantUndefined());
|
| - pointer->set(constant);
|
| - }
|
| - return pointer->get();
|
| -}
|
| -
|
| -
|
| HConstant* HGraph::GetConstant0() {
|
| return GetConstantInt32(&constant_0_, 0);
|
| }
|
| @@ -655,16 +642,6 @@ DEFINE_GET_CONSTANT(Hole, the_hole, HType::Tagged(), false)
|
| DEFINE_GET_CONSTANT(Null, null, HType::Tagged(), false)
|
|
|
|
|
| -HConstant* HGraph::GetConstantSmi0() {
|
| - return GetConstantSmi(&constant_smi_0_, 0);
|
| -}
|
| -
|
| -
|
| -HConstant* HGraph::GetConstantSmi1() {
|
| - return GetConstantSmi(&constant_smi_1_, 1);
|
| -}
|
| -
|
| -
|
| #undef DEFINE_GET_CONSTANT
|
|
|
|
|
| @@ -1562,6 +1539,12 @@ void HGraphBuilder::BuildFillElementsWithHole(HValue* context,
|
| }
|
| }
|
|
|
| + // Since we're about to store a hole value, the store instruction below must
|
| + // assume an elements kind that supports heap object values.
|
| + if (IsFastSmiOrObjectElementsKind(elements_kind)) {
|
| + elements_kind = FAST_HOLEY_ELEMENTS;
|
| + }
|
| +
|
| if (unfold_loop) {
|
| for (int i = 0; i < initial_capacity; i++) {
|
| HInstruction* key = AddInstruction(new(zone)
|
| @@ -1608,8 +1591,11 @@ void HGraphBuilder::BuildCopyElements(HValue* context,
|
| from_elements_kind,
|
| ALLOW_RETURN_HOLE));
|
|
|
| - AddInstruction(new(zone()) HStoreKeyed(to_elements, key, element,
|
| - to_elements_kind));
|
| + ElementsKind holey_kind = IsFastSmiElementsKind(to_elements_kind)
|
| + ? FAST_HOLEY_ELEMENTS : to_elements_kind;
|
| + HInstruction* holey_store = AddInstruction(
|
| + new(zone()) HStoreKeyed(to_elements, key, element, holey_kind));
|
| + holey_store->ClearFlag(HValue::kDeoptimizeOnUndefined);
|
|
|
| builder.EndBody();
|
|
|
|
|