Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index fb9806e44f0889ed7605d600eaf6618a4d9040f7..2975758312c6c1c02e9cd29818fdd0f178c759d2 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -2821,7 +2821,8 @@ HValue* HGraphBuilder::JSArrayBuilder::EmitMapCode() { |
// No need for a context lookup if the kind_ matches the initial |
// map, because we can just load the map in that case. |
HObjectAccess access = HObjectAccess::ForPrototypeOrInitialMap(); |
- return builder()->AddLoadNamedField(constructor_function_, access); |
+ return builder()->Add<HLoadNamedField>( |
+ constructor_function_, static_cast<HValue*>(NULL), access); |
} |
// TODO(mvstanton): we should always have a constructor function if we |
@@ -2846,7 +2847,8 @@ HValue* HGraphBuilder::JSArrayBuilder::EmitMapCode() { |
HValue* HGraphBuilder::JSArrayBuilder::EmitInternalMapCode() { |
// Find the map near the constructor function |
HObjectAccess access = HObjectAccess::ForPrototypeOrInitialMap(); |
- return builder()->AddLoadNamedField(constructor_function_, access); |
+ return builder()->Add<HLoadNamedField>( |
+ constructor_function_, static_cast<HValue*>(NULL), access); |
} |
@@ -4889,8 +4891,9 @@ HValue* HOptimizedGraphBuilder::BuildContextChainWalk(Variable* var) { |
HValue* context = environment()->context(); |
int length = current_info()->scope()->ContextChainLength(var->scope()); |
while (length-- > 0) { |
- context = AddLoadNamedField( |
- context, HObjectAccess::ForContextSlot(Context::PREVIOUS_INDEX)); |
+ context = Add<HLoadNamedField>( |
+ context, static_cast<HValue*>(NULL), |
+ HObjectAccess::ForContextSlot(Context::PREVIOUS_INDEX)); |
} |
return context; |
} |
@@ -5344,6 +5347,24 @@ HCheckMaps* HOptimizedGraphBuilder::AddCheckMap(HValue* object, |
} |
+HInstruction* HOptimizedGraphBuilder::BuildLoadNamedField( |
+ PropertyAccessInfo* info, |
+ HValue* checked_object) { |
+ HObjectAccess access = info->access(); |
+ if (access.representation().IsDouble()) { |
+ // Load the heap number. |
+ checked_object = Add<HLoadNamedField>( |
+ checked_object, static_cast<HValue*>(NULL), |
+ access.WithRepresentation(Representation::Tagged())); |
+ checked_object->set_type(HType::HeapNumber()); |
+ // Load the double value from it. |
+ access = HObjectAccess::ForHeapNumberValue(); |
+ } |
+ return New<HLoadNamedField>( |
+ checked_object, static_cast<HValue*>(NULL), access); |
+} |
+ |
+ |
HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField( |
PropertyAccessInfo* info, |
HValue* checked_object, |
@@ -5354,7 +5375,7 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField( |
info->map(), info->lookup(), info->name()); |
HStoreNamedField *instr; |
- if (FLAG_track_double_fields && field_access.representation().IsDouble()) { |
+ if (field_access.representation().IsDouble()) { |
HObjectAccess heap_number_access = |
field_access.WithRepresentation(Representation::Tagged()); |
if (transition_to_field) { |
@@ -5615,7 +5636,7 @@ HInstruction* HOptimizedGraphBuilder::BuildMonomorphicAccess( |
if (info->lookup()->IsField()) { |
if (info->IsLoad()) { |
- return BuildLoadNamedField(checked_holder, info->access()); |
+ return BuildLoadNamedField(info, checked_holder); |
} else { |
return BuildStoreNamedField(info, checked_object, value); |
} |
@@ -6186,29 +6207,6 @@ void HOptimizedGraphBuilder::VisitThrow(Throw* expr) { |
} |
-HLoadNamedField* HGraphBuilder::BuildLoadNamedField(HValue* object, |
- HObjectAccess access) { |
- if (FLAG_track_double_fields && access.representation().IsDouble()) { |
- // load the heap number |
- HLoadNamedField* heap_number = Add<HLoadNamedField>( |
- object, static_cast<HValue*>(NULL), |
- access.WithRepresentation(Representation::Tagged())); |
- heap_number->set_type(HType::HeapNumber()); |
- // load the double value from it |
- return New<HLoadNamedField>( |
- heap_number, static_cast<HValue*>(NULL), |
- HObjectAccess::ForHeapNumberValue()); |
- } |
- return New<HLoadNamedField>(object, static_cast<HValue*>(NULL), access); |
-} |
- |
- |
-HInstruction* HGraphBuilder::AddLoadNamedField(HValue* object, |
- HObjectAccess access) { |
- return AddInstruction(BuildLoadNamedField(object, access)); |
-} |
- |
- |
HInstruction* HGraphBuilder::AddLoadStringInstanceType(HValue* string) { |
if (string->IsConstant()) { |
HConstant* c_string = HConstant::cast(string); |
@@ -6216,9 +6214,10 @@ HInstruction* HGraphBuilder::AddLoadStringInstanceType(HValue* string) { |
return Add<HConstant>(c_string->StringValue()->map()->instance_type()); |
} |
} |
- return AddLoadNamedField( |
- AddLoadNamedField(string, HObjectAccess::ForMap()), |
- HObjectAccess::ForMapInstanceType()); |
+ return Add<HLoadNamedField>( |
+ Add<HLoadNamedField>(string, static_cast<HValue*>(NULL), |
+ HObjectAccess::ForMap()), |
+ static_cast<HValue*>(NULL), HObjectAccess::ForMapInstanceType()); |
} |
@@ -6229,7 +6228,8 @@ HInstruction* HGraphBuilder::AddLoadStringLength(HValue* string) { |
return Add<HConstant>(c_string->StringValue()->length()); |
} |
} |
- return AddLoadNamedField(string, HObjectAccess::ForStringLength()); |
+ return Add<HLoadNamedField>(string, static_cast<HValue*>(NULL), |
+ HObjectAccess::ForStringLength()); |
} |