Index: src/code-stubs-hydrogen.cc |
diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc |
index a7e33da54fccab0d3b3f007c110c35159ab6cd8a..57402362e861ff152d74dd0dd931b80ea7ab4d12 100644 |
--- a/src/code-stubs-hydrogen.cc |
+++ b/src/code-stubs-hydrogen.cc |
@@ -1520,99 +1520,6 @@ HValue* CodeStubGraphBuilder<ToBooleanICStub>::BuildCodeInitializedStub() { |
Handle<Code> ToBooleanICStub::GenerateCode() { return DoGenerateCode(this); } |
template <> |
-HValue* CodeStubGraphBuilder<StoreGlobalStub>::BuildCodeInitializedStub() { |
- StoreGlobalStub* stub = casted_stub(); |
- HParameter* value = GetParameter(Descriptor::kValue); |
- if (stub->check_global()) { |
- // Check that the map of the global has not changed: use a placeholder map |
- // that will be replaced later with the global object's map. |
- HParameter* proxy = GetParameter(Descriptor::kReceiver); |
- HValue* proxy_map = |
- Add<HLoadNamedField>(proxy, nullptr, HObjectAccess::ForMap()); |
- HValue* global = |
- Add<HLoadNamedField>(proxy_map, nullptr, HObjectAccess::ForPrototype()); |
- HValue* map_cell = Add<HConstant>(isolate()->factory()->NewWeakCell( |
- StoreGlobalStub::global_map_placeholder(isolate()))); |
- HValue* expected_map = Add<HLoadNamedField>( |
- map_cell, nullptr, HObjectAccess::ForWeakCellValue()); |
- HValue* map = |
- Add<HLoadNamedField>(global, nullptr, HObjectAccess::ForMap()); |
- IfBuilder map_check(this); |
- map_check.IfNot<HCompareObjectEqAndBranch>(expected_map, map); |
- map_check.ThenDeopt(DeoptimizeReason::kUnknownMap); |
- map_check.End(); |
- } |
- |
- HValue* weak_cell = Add<HConstant>(isolate()->factory()->NewWeakCell( |
- StoreGlobalStub::property_cell_placeholder(isolate()))); |
- HValue* cell = Add<HLoadNamedField>(weak_cell, nullptr, |
- HObjectAccess::ForWeakCellValue()); |
- Add<HCheckHeapObject>(cell); |
- HObjectAccess access = HObjectAccess::ForPropertyCellValue(); |
- // Load the payload of the global parameter cell. A hole indicates that the |
- // cell has been invalidated and that the store must be handled by the |
- // runtime. |
- HValue* cell_contents = Add<HLoadNamedField>(cell, nullptr, access); |
- |
- auto cell_type = stub->cell_type(); |
- if (cell_type == PropertyCellType::kConstant || |
- cell_type == PropertyCellType::kUndefined) { |
- // This is always valid for all states a cell can be in. |
- IfBuilder builder(this); |
- builder.If<HCompareObjectEqAndBranch>(cell_contents, value); |
- builder.Then(); |
- builder.ElseDeopt( |
- DeoptimizeReason::kUnexpectedCellContentsInConstantGlobalStore); |
- builder.End(); |
- } else { |
- IfBuilder builder(this); |
- HValue* hole_value = graph()->GetConstantHole(); |
- builder.If<HCompareObjectEqAndBranch>(cell_contents, hole_value); |
- builder.Then(); |
- builder.Deopt(DeoptimizeReason::kUnexpectedCellContentsInGlobalStore); |
- builder.Else(); |
- // When dealing with constant types, the type may be allowed to change, as |
- // long as optimized code remains valid. |
- if (cell_type == PropertyCellType::kConstantType) { |
- switch (stub->constant_type()) { |
- case PropertyCellConstantType::kSmi: |
- access = access.WithRepresentation(Representation::Smi()); |
- break; |
- case PropertyCellConstantType::kStableMap: { |
- // It is sufficient here to check that the value and cell contents |
- // have identical maps, no matter if they are stable or not or if they |
- // are the maps that were originally in the cell or not. If optimized |
- // code will deopt when a cell has a unstable map and if it has a |
- // dependency on a stable map, it will deopt if the map destabilizes. |
- Add<HCheckHeapObject>(value); |
- Add<HCheckHeapObject>(cell_contents); |
- HValue* expected_map = Add<HLoadNamedField>(cell_contents, nullptr, |
- HObjectAccess::ForMap()); |
- HValue* map = |
- Add<HLoadNamedField>(value, nullptr, HObjectAccess::ForMap()); |
- IfBuilder map_check(this); |
- map_check.IfNot<HCompareObjectEqAndBranch>(expected_map, map); |
- map_check.ThenDeopt(DeoptimizeReason::kUnknownMap); |
- map_check.End(); |
- access = access.WithRepresentation(Representation::HeapObject()); |
- break; |
- } |
- } |
- } |
- Add<HStoreNamedField>(cell, access, value); |
- builder.End(); |
- } |
- |
- return value; |
-} |
- |
- |
-Handle<Code> StoreGlobalStub::GenerateCode() { |
- return DoGenerateCode(this); |
-} |
- |
- |
-template <> |
HValue* CodeStubGraphBuilder<ElementsTransitionAndStoreStub>::BuildCodeStub() { |
HValue* object = GetParameter(StoreTransitionHelper::ReceiverIndex()); |
HValue* key = GetParameter(StoreTransitionHelper::NameIndex()); |