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

Unified Diff: src/interpreter/constant-array-builder.cc

Issue 2167763003: [Interpreter] Avoid allocating pairs array in VisitDeclarations. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@int_merge_binary
Patch Set: Rebase Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: src/interpreter/constant-array-builder.cc
diff --git a/src/interpreter/constant-array-builder.cc b/src/interpreter/constant-array-builder.cc
index 7ce50b580e998e0f170f6c8bd29eb237627f1ffd..1643e4c6a8171dc90905e56a5d67d586bfe6709f 100644
--- a/src/interpreter/constant-array-builder.cc
+++ b/src/interpreter/constant-array-builder.cc
@@ -46,6 +46,13 @@ Handle<Object> ConstantArrayBuilder::ConstantArraySlice::At(
return constants_[index - start_index()];
}
+void ConstantArrayBuilder::ConstantArraySlice::InsertAt(size_t index,
+ Handle<Object> object) {
+ DCHECK_GE(index, start_index());
+ DCHECK_LT(index, start_index() + size());
+ constants_[index - start_index()] = object;
+}
+
STATIC_CONST_MEMBER_DEFINITION const size_t ConstantArrayBuilder::k8BitCapacity;
STATIC_CONST_MEMBER_DEFINITION const size_t
ConstantArrayBuilder::k16BitCapacity;
@@ -73,9 +80,9 @@ size_t ConstantArrayBuilder::size() const {
return idx_slice_[0]->size();
}
-const ConstantArrayBuilder::ConstantArraySlice*
-ConstantArrayBuilder::IndexToSlice(size_t index) const {
- for (const ConstantArraySlice* slice : idx_slice_) {
+ConstantArrayBuilder::ConstantArraySlice* ConstantArrayBuilder::IndexToSlice(
+ size_t index) const {
+ for (ConstantArraySlice* slice : idx_slice_) {
if (index <= slice->max_index()) {
return slice;
}
@@ -129,28 +136,21 @@ size_t ConstantArrayBuilder::Insert(Handle<Object> object) {
ConstantArrayBuilder::index_t ConstantArrayBuilder::AllocateEntry(
Handle<Object> object) {
DCHECK(!object->IsOddball());
+ index_t index = AllocateIndex(object);
index_t* entry = constants_map()->Get(object);
- for (size_t i = 0; i < arraysize(idx_slice_); ++i) {
- if (idx_slice_[i]->available() > 0) {
- size_t index = idx_slice_[i]->Allocate(object);
- *entry = static_cast<index_t>(index);
- return *entry;
- break;
- }
- }
- UNREACHABLE();
- return kMaxUInt32;
+ *entry = index;
+ return index;
}
-OperandSize ConstantArrayBuilder::CreateReservedEntry() {
+ConstantArrayBuilder::index_t ConstantArrayBuilder::AllocateIndex(
+ Handle<Object> object) {
for (size_t i = 0; i < arraysize(idx_slice_); ++i) {
if (idx_slice_[i]->available() > 0) {
- idx_slice_[i]->Reserve();
- return idx_slice_[i]->operand_size();
+ return static_cast<index_t>(idx_slice_[i]->Allocate(object));
}
}
UNREACHABLE();
- return OperandSize::kNone;
+ return kMaxUInt32;
}
ConstantArrayBuilder::ConstantArraySlice*
@@ -174,6 +174,28 @@ ConstantArrayBuilder::OperandSizeToSlice(OperandSize operand_size) const {
return slice;
}
+size_t ConstantArrayBuilder::AllocateEntry() {
+ return AllocateIndex(isolate_->factory()->the_hole_value());
+}
+
+void ConstantArrayBuilder::InsertAllocatedEntry(size_t index,
+ Handle<Object> object) {
+ DCHECK_EQ(isolate_->heap()->the_hole_value(), *At(index));
+ ConstantArraySlice* slice = IndexToSlice(index);
+ slice->InsertAt(index, object);
+}
+
+OperandSize ConstantArrayBuilder::CreateReservedEntry() {
+ for (size_t i = 0; i < arraysize(idx_slice_); ++i) {
+ if (idx_slice_[i]->available() > 0) {
+ idx_slice_[i]->Reserve();
+ return idx_slice_[i]->operand_size();
+ }
+ }
+ UNREACHABLE();
+ return OperandSize::kNone;
+}
+
size_t ConstantArrayBuilder::CommitReservedEntry(OperandSize operand_size,
Handle<Object> object) {
DiscardReservedEntry(operand_size);
« no previous file with comments | « src/interpreter/constant-array-builder.h ('k') | test/unittests/interpreter/constant-array-builder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698