Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(543)

Side by Side Diff: src/crankshaft/hydrogen.cc

Issue 1984043002: Remove now-incorrect DataView accessor optimization (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/crankshaft/hydrogen.h ('k') | src/ic/ic.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/crankshaft/hydrogen.h" 5 #include "src/crankshaft/hydrogen.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/allocation-site-scopes.h" 9 #include "src/allocation-site-scopes.h"
10 #include "src/ast/ast-numbering.h" 10 #include "src/ast/ast-numbering.h"
(...skipping 6541 matching lines...) Expand 10 before | Expand all | Expand 10 after
6552 bool HOptimizedGraphBuilder::PropertyAccessInfo::IsIntegerIndexedExotic() { 6552 bool HOptimizedGraphBuilder::PropertyAccessInfo::IsIntegerIndexedExotic() {
6553 InstanceType instance_type = map_->instance_type(); 6553 InstanceType instance_type = map_->instance_type();
6554 return instance_type == JS_TYPED_ARRAY_TYPE && name_->IsString() && 6554 return instance_type == JS_TYPED_ARRAY_TYPE && name_->IsString() &&
6555 IsSpecialIndex(isolate()->unicode_cache(), String::cast(*name_)); 6555 IsSpecialIndex(isolate()->unicode_cache(), String::cast(*name_));
6556 } 6556 }
6557 6557
6558 6558
6559 bool HOptimizedGraphBuilder::PropertyAccessInfo::CanAccessMonomorphic() { 6559 bool HOptimizedGraphBuilder::PropertyAccessInfo::CanAccessMonomorphic() {
6560 if (!CanInlinePropertyAccess(map_)) return false; 6560 if (!CanInlinePropertyAccess(map_)) return false;
6561 if (IsJSObjectFieldAccessor()) return IsLoad(); 6561 if (IsJSObjectFieldAccessor()) return IsLoad();
6562 if (IsJSArrayBufferViewFieldAccessor()) return IsLoad();
6563 if (map_->IsJSFunctionMap() && map_->is_constructor() && 6562 if (map_->IsJSFunctionMap() && map_->is_constructor() &&
6564 !map_->has_non_instance_prototype() && 6563 !map_->has_non_instance_prototype() &&
6565 name_.is_identical_to(isolate()->factory()->prototype_string())) { 6564 name_.is_identical_to(isolate()->factory()->prototype_string())) {
6566 return IsLoad(); 6565 return IsLoad();
6567 } 6566 }
6568 if (!LookupDescriptor()) return false; 6567 if (!LookupDescriptor()) return false;
6569 if (IsFound()) return IsLoad() || !IsReadOnly(); 6568 if (IsFound()) return IsLoad() || !IsReadOnly();
6570 if (IsIntegerIndexedExotic()) return false; 6569 if (IsIntegerIndexedExotic()) return false;
6571 if (!LookupInPrototypes()) return false; 6570 if (!LookupInPrototypes()) return false;
6572 if (IsLoad()) return true; 6571 if (IsLoad()) return true;
(...skipping 27 matching lines...) Expand all
6600 HObjectAccess access = HObjectAccess::ForMap(); // bogus default 6599 HObjectAccess access = HObjectAccess::ForMap(); // bogus default
6601 if (GetJSObjectFieldAccess(&access)) { 6600 if (GetJSObjectFieldAccess(&access)) {
6602 for (int i = 1; i < maps->length(); ++i) { 6601 for (int i = 1; i < maps->length(); ++i) {
6603 PropertyAccessInfo test_info(builder_, access_type_, maps->at(i), name_); 6602 PropertyAccessInfo test_info(builder_, access_type_, maps->at(i), name_);
6604 HObjectAccess test_access = HObjectAccess::ForMap(); // bogus default 6603 HObjectAccess test_access = HObjectAccess::ForMap(); // bogus default
6605 if (!test_info.GetJSObjectFieldAccess(&test_access)) return false; 6604 if (!test_info.GetJSObjectFieldAccess(&test_access)) return false;
6606 if (!access.Equals(test_access)) return false; 6605 if (!access.Equals(test_access)) return false;
6607 } 6606 }
6608 return true; 6607 return true;
6609 } 6608 }
6610 if (GetJSArrayBufferViewFieldAccess(&access)) {
6611 for (int i = 1; i < maps->length(); ++i) {
6612 PropertyAccessInfo test_info(builder_, access_type_, maps->at(i), name_);
6613 HObjectAccess test_access = HObjectAccess::ForMap(); // bogus default
6614 if (!test_info.GetJSArrayBufferViewFieldAccess(&test_access)) {
6615 return false;
6616 }
6617 if (!access.Equals(test_access)) return false;
6618 }
6619 return true;
6620 }
6621 6609
6622 // Currently only handle numbers as a polymorphic case. 6610 // Currently only handle numbers as a polymorphic case.
6623 // TODO(verwaest): Support monomorphic handling of numbers with a HCheckNumber 6611 // TODO(verwaest): Support monomorphic handling of numbers with a HCheckNumber
6624 // instruction. 6612 // instruction.
6625 if (IsNumberType()) return false; 6613 if (IsNumberType()) return false;
6626 6614
6627 // Multiple maps cannot transition to the same target map. 6615 // Multiple maps cannot transition to the same target map.
6628 DCHECK(!IsLoad() || !IsTransition()); 6616 DCHECK(!IsLoad() || !IsTransition());
6629 if (IsTransition() && maps->length() > 1) return false; 6617 if (IsTransition() && maps->length() > 1) return false;
6630 6618
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
6664 HValue* HOptimizedGraphBuilder::BuildMonomorphicAccess( 6652 HValue* HOptimizedGraphBuilder::BuildMonomorphicAccess(
6665 PropertyAccessInfo* info, HValue* object, HValue* checked_object, 6653 PropertyAccessInfo* info, HValue* object, HValue* checked_object,
6666 HValue* value, BailoutId ast_id, BailoutId return_id, 6654 HValue* value, BailoutId ast_id, BailoutId return_id,
6667 bool can_inline_accessor) { 6655 bool can_inline_accessor) {
6668 HObjectAccess access = HObjectAccess::ForMap(); // bogus default 6656 HObjectAccess access = HObjectAccess::ForMap(); // bogus default
6669 if (info->GetJSObjectFieldAccess(&access)) { 6657 if (info->GetJSObjectFieldAccess(&access)) {
6670 DCHECK(info->IsLoad()); 6658 DCHECK(info->IsLoad());
6671 return New<HLoadNamedField>(object, checked_object, access); 6659 return New<HLoadNamedField>(object, checked_object, access);
6672 } 6660 }
6673 6661
6674 if (info->GetJSArrayBufferViewFieldAccess(&access)) {
6675 DCHECK(info->IsLoad());
6676 checked_object = Add<HCheckArrayBufferNotNeutered>(checked_object);
6677 return New<HLoadNamedField>(object, checked_object, access);
6678 }
6679
6680 if (info->name().is_identical_to(isolate()->factory()->prototype_string()) && 6662 if (info->name().is_identical_to(isolate()->factory()->prototype_string()) &&
6681 info->map()->IsJSFunctionMap() && info->map()->is_constructor()) { 6663 info->map()->IsJSFunctionMap() && info->map()->is_constructor()) {
6682 DCHECK(!info->map()->has_non_instance_prototype()); 6664 DCHECK(!info->map()->has_non_instance_prototype());
6683 return New<HLoadFunctionPrototype>(checked_object); 6665 return New<HLoadFunctionPrototype>(checked_object);
6684 } 6666 }
6685 6667
6686 HValue* checked_holder = checked_object; 6668 HValue* checked_holder = checked_object;
6687 if (info->has_holder()) { 6669 if (info->has_holder()) {
6688 Handle<JSObject> prototype(JSObject::cast(info->map()->prototype())); 6670 Handle<JSObject> prototype(JSObject::cast(info->map()->prototype()));
6689 checked_holder = BuildCheckPrototypeMaps(prototype, info->holder()); 6671 checked_holder = BuildCheckPrototypeMaps(prototype, info->holder());
(...skipping 7053 matching lines...) Expand 10 before | Expand all | Expand 10 after
13743 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13725 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13744 } 13726 }
13745 13727
13746 #ifdef DEBUG 13728 #ifdef DEBUG
13747 graph_->Verify(false); // No full verify. 13729 graph_->Verify(false); // No full verify.
13748 #endif 13730 #endif
13749 } 13731 }
13750 13732
13751 } // namespace internal 13733 } // namespace internal
13752 } // namespace v8 13734 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/hydrogen.h ('k') | src/ic/ic.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698