| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index e46fa966b24290a3d270091b99c69bae1b4cd167..bd3e84b48f47c52bd0a7baff39f562ff5d5b0e71 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -1194,8 +1194,8 @@ void HGraphBuilder::FinishExitCurrentBlock(HControlInstruction* instruction) {
|
| void HGraphBuilder::AddIncrementCounter(StatsCounter* counter) {
|
| if (FLAG_native_code_counters && counter->Enabled()) {
|
| HValue* reference = Add<HConstant>(ExternalReference(counter));
|
| - HValue* old_value = Add<HLoadNamedField>(reference,
|
| - HObjectAccess::ForCounter());
|
| + HValue* old_value = Add<HLoadNamedField>(
|
| + reference, static_cast<HValue*>(NULL), HObjectAccess::ForCounter());
|
| HValue* new_value = AddUncasted<HAdd>(old_value, graph()->GetConstant1());
|
| new_value->ClearFlag(HValue::kCanOverflow); // Ignore counter overflow
|
| Add<HStoreNamedField>(reference, HObjectAccess::ForCounter(),
|
| @@ -1413,7 +1413,8 @@ void HGraphBuilder::BuildTransitionElementsKind(HValue* object,
|
| HInstruction* elements_length = AddLoadFixedArrayLength(elements);
|
|
|
| HInstruction* array_length = is_jsarray
|
| - ? Add<HLoadNamedField>(object, HObjectAccess::ForArrayLength(from_kind))
|
| + ? Add<HLoadNamedField>(object, static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForArrayLength(from_kind))
|
| : elements_length;
|
|
|
| BuildGrowElementsCapacity(object, elements, from_kind, to_kind,
|
| @@ -1615,15 +1616,17 @@ HValue* HGraphBuilder::BuildNumberToString(HValue* object, Type* type) {
|
| } else {
|
| // Check if the object is a heap number.
|
| IfBuilder if_objectisnumber(this);
|
| - if_objectisnumber.If<HCompareMap>(
|
| + HValue* objectisnumber = if_objectisnumber.If<HCompareMap>(
|
| object, isolate()->factory()->heap_number_map());
|
| if_objectisnumber.Then();
|
| {
|
| // Compute hash for heap number similar to double_get_hash().
|
| HValue* low = Add<HLoadNamedField>(
|
| - object, HObjectAccess::ForHeapNumberValueLowestBits());
|
| + object, objectisnumber,
|
| + HObjectAccess::ForHeapNumberValueLowestBits());
|
| HValue* high = Add<HLoadNamedField>(
|
| - object, HObjectAccess::ForHeapNumberValueHighestBits());
|
| + object, objectisnumber,
|
| + HObjectAccess::ForHeapNumberValueHighestBits());
|
| HValue* hash = AddUncasted<HBitwise>(Token::BIT_XOR, low, high);
|
| hash = AddUncasted<HBitwise>(Token::BIT_AND, hash, mask);
|
|
|
| @@ -1636,14 +1639,16 @@ HValue* HGraphBuilder::BuildNumberToString(HValue* object, Type* type) {
|
| // Check if key is a heap number (the number string cache contains only
|
| // SMIs and heap number, so it is sufficient to do a SMI check here).
|
| IfBuilder if_keyisnotsmi(this);
|
| - if_keyisnotsmi.IfNot<HIsSmiAndBranch>(key);
|
| + HValue* keyisnotsmi = if_keyisnotsmi.IfNot<HIsSmiAndBranch>(key);
|
| if_keyisnotsmi.Then();
|
| {
|
| // Check if values of key and object match.
|
| IfBuilder if_keyeqobject(this);
|
| if_keyeqobject.If<HCompareNumericAndBranch>(
|
| - Add<HLoadNamedField>(key, HObjectAccess::ForHeapNumberValue()),
|
| - Add<HLoadNamedField>(object, HObjectAccess::ForHeapNumberValue()),
|
| + Add<HLoadNamedField>(key, keyisnotsmi,
|
| + HObjectAccess::ForHeapNumberValue()),
|
| + Add<HLoadNamedField>(object, objectisnumber,
|
| + HObjectAccess::ForHeapNumberValue()),
|
| Token::EQ);
|
| if_keyeqobject.Then();
|
| {
|
| @@ -2111,7 +2116,8 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
|
| HInstruction* length = NULL;
|
| if (is_js_array) {
|
| length = Add<HLoadNamedField>(
|
| - checked_object, HObjectAccess::ForArrayLength(elements_kind));
|
| + checked_object, static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForArrayLength(elements_kind));
|
| } else {
|
| length = AddLoadFixedArrayLength(elements);
|
| }
|
| @@ -2122,7 +2128,8 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
|
| HValue* backing_store;
|
| if (IsExternalArrayElementsKind(elements_kind)) {
|
| backing_store = Add<HLoadNamedField>(
|
| - elements, HObjectAccess::ForExternalArrayExternalPointer());
|
| + elements, static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForExternalArrayExternalPointer());
|
| } else {
|
| backing_store = elements;
|
| }
|
| @@ -2355,13 +2362,14 @@ HInstruction* HGraphBuilder::AddElementAccess(
|
|
|
|
|
| HLoadNamedField* HGraphBuilder::AddLoadElements(HValue* object) {
|
| - return Add<HLoadNamedField>(object, HObjectAccess::ForElementsPointer());
|
| + return Add<HLoadNamedField>(
|
| + object, static_cast<HValue*>(NULL), HObjectAccess::ForElementsPointer());
|
| }
|
|
|
|
|
| HLoadNamedField* HGraphBuilder::AddLoadFixedArrayLength(HValue* object) {
|
| - return Add<HLoadNamedField>(object,
|
| - HObjectAccess::ForFixedArrayLength());
|
| + return Add<HLoadNamedField>(
|
| + object, static_cast<HValue*>(NULL), HObjectAccess::ForFixedArrayLength());
|
| }
|
|
|
|
|
| @@ -2548,9 +2556,10 @@ HValue* HGraphBuilder::BuildCloneShallowArray(HValue* boilerplate,
|
| for (int i = 0; i < JSArray::kSize; i += kPointerSize) {
|
| if ((i != JSArray::kElementsOffset) || (length == 0)) {
|
| HObjectAccess access = HObjectAccess::ForJSArrayOffset(i);
|
| - Add<HStoreNamedField>(object, access,
|
| - Add<HLoadNamedField>(boilerplate, access),
|
| - INITIALIZING_STORE);
|
| + Add<HStoreNamedField>(
|
| + object, access, Add<HLoadNamedField>(
|
| + boilerplate, static_cast<HValue*>(NULL), access),
|
| + INITIALIZING_STORE);
|
| }
|
| }
|
|
|
| @@ -2578,9 +2587,10 @@ HValue* HGraphBuilder::BuildCloneShallowArray(HValue* boilerplate,
|
| // Copy the elements array header.
|
| for (int i = 0; i < FixedArrayBase::kHeaderSize; i += kPointerSize) {
|
| HObjectAccess access = HObjectAccess::ForFixedArrayHeader(i);
|
| - Add<HStoreNamedField>(object_elements, access,
|
| - Add<HLoadNamedField>(boilerplate_elements, access),
|
| - INITIALIZING_STORE);
|
| + Add<HStoreNamedField>(
|
| + object_elements, access, Add<HLoadNamedField>(
|
| + boilerplate_elements, static_cast<HValue*>(NULL), access),
|
| + INITIALIZING_STORE);
|
| }
|
|
|
| // Copy the elements array contents.
|
| @@ -2666,7 +2676,8 @@ void HGraphBuilder::BuildCreateAllocationMemento(
|
| allocation_site, INITIALIZING_STORE);
|
| if (FLAG_allocation_site_pretenuring) {
|
| HValue* memento_create_count = Add<HLoadNamedField>(
|
| - allocation_site, HObjectAccess::ForAllocationSiteOffset(
|
| + allocation_site, static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForAllocationSiteOffset(
|
| AllocationSite::kPretenureCreateCountOffset));
|
| memento_create_count = AddUncasted<HAdd>(
|
| memento_create_count, graph()->GetConstant1());
|
| @@ -2686,22 +2697,26 @@ void HGraphBuilder::BuildCreateAllocationMemento(
|
| HInstruction* HGraphBuilder::BuildGetNativeContext(HValue* closure) {
|
| // Get the global context, then the native context
|
| HInstruction* context =
|
| - Add<HLoadNamedField>(closure, HObjectAccess::ForFunctionContextPointer());
|
| - HInstruction* global_object = Add<HLoadNamedField>(context,
|
| + Add<HLoadNamedField>(closure, static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForFunctionContextPointer());
|
| + HInstruction* global_object = Add<HLoadNamedField>(
|
| + context, static_cast<HValue*>(NULL),
|
| HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| HObjectAccess access = HObjectAccess::ForJSObjectOffset(
|
| GlobalObject::kNativeContextOffset);
|
| - return Add<HLoadNamedField>(global_object, access);
|
| + return Add<HLoadNamedField>(
|
| + global_object, static_cast<HValue*>(NULL), access);
|
| }
|
|
|
|
|
| HInstruction* HGraphBuilder::BuildGetNativeContext() {
|
| // Get the global context, then the native context
|
| HValue* global_object = Add<HLoadNamedField>(
|
| - context(), HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| + context(), static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| return Add<HLoadNamedField>(
|
| - global_object, HObjectAccess::ForJSObjectOffset(
|
| - GlobalObject::kNativeContextOffset));
|
| + global_object, static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForJSObjectOffset(GlobalObject::kNativeContextOffset));
|
| }
|
|
|
|
|
| @@ -2898,13 +2913,16 @@ HStoreNamedField* HGraphBuilder::AddStoreMapConstant(HValue *object,
|
|
|
| HValue* HGraphBuilder::AddLoadJSBuiltin(Builtins::JavaScript builtin) {
|
| HValue* global_object = Add<HLoadNamedField>(
|
| - context(), HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| + context(), static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| HObjectAccess access = HObjectAccess::ForJSObjectOffset(
|
| GlobalObject::kBuiltinsOffset);
|
| - HValue* builtins = Add<HLoadNamedField>(global_object, access);
|
| + HValue* builtins = Add<HLoadNamedField>(
|
| + global_object, static_cast<HValue*>(NULL), access);
|
| HObjectAccess function_access = HObjectAccess::ForJSObjectOffset(
|
| JSBuiltinsObject::OffsetOfFunctionWithId(builtin));
|
| - return Add<HLoadNamedField>(builtins, function_access);
|
| + return Add<HLoadNamedField>(
|
| + builtins, static_cast<HValue*>(NULL), function_access);
|
| }
|
|
|
|
|
| @@ -4780,8 +4798,8 @@ void HOptimizedGraphBuilder::VisitVariableProxy(VariableProxy* expr) {
|
| }
|
| } else {
|
| HValue* global_object = Add<HLoadNamedField>(
|
| - context(), HObjectAccess::ForContextSlot(
|
| - Context::GLOBAL_OBJECT_INDEX));
|
| + context(), static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| HLoadGlobalGeneric* instr =
|
| New<HLoadGlobalGeneric>(global_object,
|
| variable->name(),
|
| @@ -5306,8 +5324,8 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField(
|
| heap_number, INITIALIZING_STORE);
|
| } else {
|
| // Already holds a HeapNumber; load the box and write its value field.
|
| - HInstruction* heap_number = Add<HLoadNamedField>(checked_object,
|
| - heap_number_access);
|
| + HInstruction* heap_number = Add<HLoadNamedField>(
|
| + checked_object, static_cast<HValue*>(NULL), heap_number_access);
|
| heap_number->set_type(HType::HeapNumber());
|
| instr = New<HStoreNamedField>(heap_number,
|
| HObjectAccess::ForHeapNumberValue(),
|
| @@ -5526,7 +5544,8 @@ HInstruction* HOptimizedGraphBuilder::BuildLoadMonomorphic(
|
|
|
| HObjectAccess access = HObjectAccess::ForMap(); // bogus default
|
| if (info->GetJSObjectFieldAccess(&access)) {
|
| - return New<HLoadNamedField>(checked_object, access);
|
| + return New<HLoadNamedField>(
|
| + checked_object, static_cast<HValue*>(NULL), access);
|
| }
|
|
|
| HValue* checked_holder = checked_object;
|
| @@ -5906,7 +5925,8 @@ void HOptimizedGraphBuilder::HandleGlobalVariableAssignment(
|
| }
|
| } else {
|
| HValue* global_object = Add<HLoadNamedField>(
|
| - context(), HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| + context(), static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| HStoreNamedGeneric* instr =
|
| Add<HStoreNamedGeneric>(global_object, var->name(),
|
| value, function_strict_mode_flag());
|
| @@ -6181,13 +6201,15 @@ HLoadNamedField* HGraphBuilder::BuildLoadNamedField(HValue* object,
|
| if (FLAG_track_double_fields && access.representation().IsDouble()) {
|
| // load the heap number
|
| HLoadNamedField* heap_number = Add<HLoadNamedField>(
|
| - object, access.WithRepresentation(Representation::Tagged()));
|
| + 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, HObjectAccess::ForHeapNumberValue());
|
| + heap_number, static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForHeapNumberValue());
|
| }
|
| - return New<HLoadNamedField>(object, access);
|
| + return New<HLoadNamedField>(object, static_cast<HValue*>(NULL), access);
|
| }
|
|
|
|
|
| @@ -6840,7 +6862,8 @@ HInstruction* HOptimizedGraphBuilder::BuildCallConstantFunction(
|
| return NewPlainFunctionCall(target, argument_count, dont_adapt_arguments);
|
| } else {
|
| HValue* param_count_value = Add<HConstant>(formal_parameter_count);
|
| - HValue* context = Add<HLoadNamedField>(target,
|
| + HValue* context = Add<HLoadNamedField>(
|
| + target, static_cast<HValue*>(NULL),
|
| HObjectAccess::ForFunctionContextPointer());
|
| return NewArgumentAdaptorCall(target, context,
|
| argument_count, param_count_value);
|
| @@ -7673,7 +7696,8 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
|
| elements, isolate()->factory()->fixed_array_map(), top_info());
|
| }
|
| HValue* length = Add<HLoadNamedField>(
|
| - checked_object, HObjectAccess::ForArrayLength(elements_kind));
|
| + checked_object, static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForArrayLength(elements_kind));
|
| reduced_length = AddUncasted<HSub>(length, graph()->GetConstant1());
|
| HValue* bounds_check = Add<HBoundsCheck>(
|
| graph()->GetConstant0(), length);
|
| @@ -7831,13 +7855,13 @@ HValue* HOptimizedGraphBuilder::ImplicitReceiverFor(HValue* function,
|
| SharedFunctionInfo* shared = target->shared();
|
| if (shared->is_classic_mode() && !shared->native()) {
|
| HValue* context = Add<HLoadNamedField>(
|
| - function,
|
| + function, static_cast<HValue*>(NULL),
|
| HObjectAccess::ForJSObjectOffset(JSFunction::kContextOffset));
|
| HValue* global_object = Add<HLoadNamedField>(
|
| - context,
|
| + context, static_cast<HValue*>(NULL),
|
| HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| return Add<HLoadNamedField>(
|
| - global_object,
|
| + global_object, static_cast<HValue*>(NULL),
|
| HObjectAccess::ForJSObjectOffset(
|
| GlobalObject::kGlobalReceiverOffset));
|
| }
|
| @@ -7960,8 +7984,8 @@ void HOptimizedGraphBuilder::VisitCall(Call* expr) {
|
| // Push the global object instead of the global receiver because
|
| // code generated by the full code generator expects it.
|
| HValue* global_object = Add<HLoadNamedField>(
|
| - context(), HObjectAccess::ForContextSlot(
|
| - Context::GLOBAL_OBJECT_INDEX));
|
| + context(), static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| Push(global_object);
|
|
|
| CHECK_ALIVE(VisitExpressions(expr->arguments()));
|
| @@ -7993,8 +8017,8 @@ void HOptimizedGraphBuilder::VisitCall(Call* expr) {
|
| // We're about to install a contextual IC, which expects the global
|
| // object as receiver rather than the global proxy.
|
| HValue* global_object = Add<HLoadNamedField>(
|
| - context(), HObjectAccess::ForContextSlot(
|
| - Context::GLOBAL_OBJECT_INDEX));
|
| + context(), static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| const int receiver_index = argument_count - 1;
|
| environment()->SetExpressionStackAt(receiver_index, global_object);
|
| // When the target has a custom call IC generator, use the IC,
|
| @@ -8007,8 +8031,8 @@ void HOptimizedGraphBuilder::VisitCall(Call* expr) {
|
| }
|
| } else {
|
| HValue* receiver = Add<HLoadNamedField>(
|
| - context(), HObjectAccess::ForContextSlot(
|
| - Context::GLOBAL_OBJECT_INDEX));
|
| + context(), static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| Push(Add<HPushArgument>(receiver));
|
| CHECK_ALIVE(VisitArgumentList(expr->arguments()));
|
|
|
| @@ -8227,8 +8251,9 @@ void HOptimizedGraphBuilder::VisitCallNew(CallNew* expr) {
|
| // Load the initial map from the constructor.
|
| HValue* constructor_value = Add<HConstant>(constructor);
|
| HValue* initial_map_value =
|
| - Add<HLoadNamedField>(constructor_value, HObjectAccess::ForJSObjectOffset(
|
| - JSFunction::kPrototypeOrInitialMapOffset));
|
| + Add<HLoadNamedField>(constructor_value, static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForJSObjectOffset(
|
| + JSFunction::kPrototypeOrInitialMapOffset));
|
|
|
| // Initialize map and fields of the newly allocated object.
|
| { NoObservableSideEffectsScope no_effects(this);
|
| @@ -8353,7 +8378,8 @@ void HGraphBuilder::BuildArrayBufferViewInitialization(
|
| HObjectAccess::ForJSArrayBufferWeakFirstView();
|
| Add<HStoreNamedField>(obj,
|
| HObjectAccess::ForJSArrayBufferViewWeakNext(),
|
| - Add<HLoadNamedField>(buffer, weak_first_view_access),
|
| + Add<HLoadNamedField>(buffer, static_cast<HValue*>(NULL),
|
| + weak_first_view_access),
|
| INITIALIZING_STORE);
|
| Add<HStoreNamedField>(
|
| buffer, weak_first_view_access, obj, INITIALIZING_STORE);
|
| @@ -8460,7 +8486,8 @@ void HOptimizedGraphBuilder::VisitTypedArrayInitialize(
|
| AddStoreMapConstant(elements, external_array_map);
|
|
|
| HValue* backing_store = Add<HLoadNamedField>(
|
| - buffer, HObjectAccess::ForJSArrayBufferBackingStore());
|
| + buffer, static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForJSArrayBufferBackingStore());
|
|
|
| HValue* typed_array_start;
|
| if (is_zero_byte_offset) {
|
|
|