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

Side by Side Diff: src/ast/ast.cc

Issue 2570843002: Fix usage of literal cloning for large double arrays. (Closed)
Patch Set: Addressed comments. Created 4 years 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/ast/ast.h ('k') | src/code-stubs.h » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/ast/ast.h" 5 #include "src/ast/ast.h"
6 6
7 #include <cmath> // For isfinite. 7 #include <cmath> // For isfinite.
8 8
9 #include "src/ast/compile-time-value.h" 9 #include "src/ast/compile-time-value.h"
10 #include "src/ast/prettyprinter.h" 10 #include "src/ast/prettyprinter.h"
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 constant_properties_ = constant_properties; 567 constant_properties_ = constant_properties;
568 bit_field_ = FastElementsField::update( 568 bit_field_ = FastElementsField::update(
569 bit_field_, 569 bit_field_,
570 (max_element_index <= 32) || ((2 * elements) >= max_element_index)); 570 (max_element_index <= 32) || ((2 * elements) >= max_element_index));
571 bit_field_ = HasElementsField::update(bit_field_, elements > 0); 571 bit_field_ = HasElementsField::update(bit_field_, elements > 0);
572 572
573 set_is_simple(is_simple); 573 set_is_simple(is_simple);
574 set_depth(depth_acc); 574 set_depth(depth_acc);
575 } 575 }
576 576
577 bool ObjectLiteral::IsFastCloningSupported() const {
578 // FastCloneShallowObjectStub doesn't copy elements, and object literals don't
579 // support copy-on-write (COW) elements for now.
580 // TODO(mvstanton): make object literals support COW elements.
581 return fast_elements() && has_shallow_properties() &&
582 properties_count() <=
583 FastCloneShallowObjectStub::kMaximumClonedProperties;
584 }
577 585
578 void ArrayLiteral::BuildConstantElements(Isolate* isolate) { 586 void ArrayLiteral::BuildConstantElements(Isolate* isolate) {
579 DCHECK_LT(first_spread_index_, 0); 587 DCHECK_LT(first_spread_index_, 0);
580 588
581 if (!constant_elements_.is_null()) return; 589 if (!constant_elements_.is_null()) return;
582 590
583 int constants_length = values()->length(); 591 int constants_length = values()->length();
584 ElementsKind kind = FIRST_FAST_ELEMENTS_KIND; 592 ElementsKind kind = FIRST_FAST_ELEMENTS_KIND;
585 Handle<FixedArray> fixed_array = 593 Handle<FixedArray> fixed_array =
586 isolate->factory()->NewFixedArrayWithHoles(constants_length); 594 isolate->factory()->NewFixedArrayWithHoles(constants_length);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 // in a 2-element FixedArray. 649 // in a 2-element FixedArray.
642 Handle<FixedArray> literals = isolate->factory()->NewFixedArray(2, TENURED); 650 Handle<FixedArray> literals = isolate->factory()->NewFixedArray(2, TENURED);
643 literals->set(0, Smi::FromInt(kind)); 651 literals->set(0, Smi::FromInt(kind));
644 literals->set(1, *elements); 652 literals->set(1, *elements);
645 653
646 constant_elements_ = literals; 654 constant_elements_ = literals;
647 set_is_simple(is_simple); 655 set_is_simple(is_simple);
648 set_depth(depth_acc); 656 set_depth(depth_acc);
649 } 657 }
650 658
659 bool ArrayLiteral::IsFastCloningSupported() const {
660 return depth() <= 1 &&
661 values()->length() <=
662 FastCloneShallowArrayStub::kMaximumClonedElements;
663 }
651 664
652 void ArrayLiteral::AssignFeedbackVectorSlots(Isolate* isolate, 665 void ArrayLiteral::AssignFeedbackVectorSlots(Isolate* isolate,
653 FeedbackVectorSpec* spec, 666 FeedbackVectorSpec* spec,
654 FeedbackVectorSlotCache* cache) { 667 FeedbackVectorSlotCache* cache) {
655 // This logic that computes the number of slots needed for vector store 668 // This logic that computes the number of slots needed for vector store
656 // ics must mirror FullCodeGenerator::VisitArrayLiteral. 669 // ics must mirror FullCodeGenerator::VisitArrayLiteral.
657 for (int array_index = 0; array_index < values()->length(); array_index++) { 670 for (int array_index = 0; array_index < values()->length(); array_index++) {
658 Expression* subexpr = values()->at(array_index); 671 Expression* subexpr = values()->at(array_index);
659 DCHECK(!subexpr->IsSpread()); 672 DCHECK(!subexpr->IsSpread());
660 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue; 673 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue;
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 // static 960 // static
948 bool Literal::Match(void* literal1, void* literal2) { 961 bool Literal::Match(void* literal1, void* literal2) {
949 const AstValue* x = static_cast<Literal*>(literal1)->raw_value(); 962 const AstValue* x = static_cast<Literal*>(literal1)->raw_value();
950 const AstValue* y = static_cast<Literal*>(literal2)->raw_value(); 963 const AstValue* y = static_cast<Literal*>(literal2)->raw_value();
951 return (x->IsString() && y->IsString() && x->AsString() == y->AsString()) || 964 return (x->IsString() && y->IsString() && x->AsString() == y->AsString()) ||
952 (x->IsNumber() && y->IsNumber() && x->AsNumber() == y->AsNumber()); 965 (x->IsNumber() && y->IsNumber() && x->AsNumber() == y->AsNumber());
953 } 966 }
954 967
955 } // namespace internal 968 } // namespace internal
956 } // namespace v8 969 } // namespace v8
OLDNEW
« no previous file with comments | « src/ast/ast.h ('k') | src/code-stubs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698