Reviewers: Yang,
Message:
PTAL. I'll use this later in refactoring of dependent code.
Description:
Cache WeakCell for optimized code.
BUG=
Please review this at https://codereview.chromium.org/873233002/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+33, -1 lines):
M src/arm/lithium-codegen-arm.cc
M src/arm64/lithium-codegen-arm64.cc
M src/ia32/lithium-codegen-ia32.cc
M src/mips/lithium-codegen-mips.cc
M src/mips64/lithium-codegen-mips64.cc
M src/objects.h
M src/objects.cc
M src/x64/lithium-codegen-x64.cc
M src/x87/lithium-codegen-x87.cc
Index: src/arm/lithium-codegen-arm.cc
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
index
7c2ba974eb2993f12466a3ef5c5cc0b00c8b1acf..cd93679bd085a42a99dc568a4b081d26163f6851
100644
--- a/src/arm/lithium-codegen-arm.cc
+++ b/src/arm/lithium-codegen-arm.cc
@@ -944,6 +944,7 @@ void LCodeGen::PopulateDeoptimizationData(Handle<Code>
code) {
} else {
data->SetSharedFunctionInfo(Smi::FromInt(0));
}
+ data->SetWeakCellCache(Smi::FromInt(0));
Handle<FixedArray> literals =
factory()->NewFixedArray(deoptimization_literals_.length(), TENURED);
Index: src/arm64/lithium-codegen-arm64.cc
diff --git a/src/arm64/lithium-codegen-arm64.cc
b/src/arm64/lithium-codegen-arm64.cc
index
53793f8a1cf43e719c4909bacb675409b725bf82..3b7c29645068824c6887fe51bf615bd0c34f0922
100644
--- a/src/arm64/lithium-codegen-arm64.cc
+++ b/src/arm64/lithium-codegen-arm64.cc
@@ -941,6 +941,7 @@ void LCodeGen::PopulateDeoptimizationData(Handle<Code>
code) {
} else {
data->SetSharedFunctionInfo(Smi::FromInt(0));
}
+ data->SetWeakCellCache(Smi::FromInt(0));
Handle<FixedArray> literals =
factory()->NewFixedArray(deoptimization_literals_.length(), TENURED);
Index: src/ia32/lithium-codegen-ia32.cc
diff --git a/src/ia32/lithium-codegen-ia32.cc
b/src/ia32/lithium-codegen-ia32.cc
index
ff35b8a318fadae93f84339206062442c611afbc..0fcb000aa69e41c64245a389e441107cc245b158
100644
--- a/src/ia32/lithium-codegen-ia32.cc
+++ b/src/ia32/lithium-codegen-ia32.cc
@@ -913,6 +913,7 @@ void LCodeGen::PopulateDeoptimizationData(Handle<Code>
code) {
} else {
data->SetSharedFunctionInfo(Smi::FromInt(0));
}
+ data->SetWeakCellCache(Smi::FromInt(0));
Handle<FixedArray> literals =
factory()->NewFixedArray(deoptimization_literals_.length(), TENURED);
Index: src/mips/lithium-codegen-mips.cc
diff --git a/src/mips/lithium-codegen-mips.cc
b/src/mips/lithium-codegen-mips.cc
index
7711cc725a97d269a0ad56bf39b1950fe4deb2f0..c22243d9588fbb6d836dfb47a8842e2d9852ecfb
100644
--- a/src/mips/lithium-codegen-mips.cc
+++ b/src/mips/lithium-codegen-mips.cc
@@ -908,6 +908,7 @@ void LCodeGen::PopulateDeoptimizationData(Handle<Code>
code) {
} else {
data->SetSharedFunctionInfo(Smi::FromInt(0));
}
+ data->SetWeakCellCache(Smi::FromInt(0));
Handle<FixedArray> literals =
factory()->NewFixedArray(deoptimization_literals_.length(), TENURED);
Index: src/mips64/lithium-codegen-mips64.cc
diff --git a/src/mips64/lithium-codegen-mips64.cc
b/src/mips64/lithium-codegen-mips64.cc
index
c7fe98a12f5c1b10b79303b12194e7ab8871353b..f51822d547c8efc2d304ff94d1dd36e58a1bd056
100644
--- a/src/mips64/lithium-codegen-mips64.cc
+++ b/src/mips64/lithium-codegen-mips64.cc
@@ -858,6 +858,7 @@ void LCodeGen::PopulateDeoptimizationData(Handle<Code>
code) {
} else {
data->SetSharedFunctionInfo(Smi::FromInt(0));
}
+ data->SetWeakCellCache(Smi::FromInt(0));
Handle<FixedArray> literals =
factory()->NewFixedArray(deoptimization_literals_.length(), TENURED);
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index
9ec776ddafdbe4b463ce158307192bbd97948479..ab09eea1d1e4239027fb8e4663b2038998d20c55
100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -11033,6 +11033,26 @@ const char* Code::Kind2String(Kind kind) {
}
+Handle<WeakCell> Code::WeakCellFor(Handle<Code> code) {
+ DCHECK(code->kind() == OPTIMIZED_FUNCTION);
+ WeakCell* raw_cell = code->CachedWeakCell();
+ if (raw_cell != NULL) return Handle<WeakCell>(raw_cell);
+ Handle<WeakCell> cell = code->GetIsolate()->factory()->NewWeakCell(code);
+ DeoptimizationInputData::cast(code->deoptimization_data())
+ ->SetWeakCellCache(*cell);
+ return cell;
+}
+
+
+WeakCell* Code::CachedWeakCell() {
+ DCHECK(kind() == OPTIMIZED_FUNCTION);
+ Object* weak_cell_cache =
+
DeoptimizationInputData::cast(deoptimization_data())->WeakCellCache();
+ if (weak_cell_cache->IsWeakCell()) return
WeakCell::cast(weak_cell_cache);
+ return NULL;
+}
+
+
#ifdef ENABLE_DISASSEMBLER
void DeoptimizationInputData::DeoptimizationInputDataPrint(
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index
332d1ed92c42f4e3f75f759cc9d2d7ce7f76ecd4..51755054cb00a3513faae0b6c5684ce5473f105e
100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -4852,7 +4852,8 @@ class DeoptimizationInputData: public FixedArray {
static const int kOsrPcOffsetIndex = 4;
static const int kOptimizationIdIndex = 5;
static const int kSharedFunctionInfoIndex = 6;
- static const int kFirstDeoptEntryIndex = 7;
+ static const int kWeakCellCacheIndex = 7;
+ static const int kFirstDeoptEntryIndex = 8;
// Offsets of deopt entry elements relative to the start of the entry.
static const int kAstIdRawOffset = 0;
@@ -4877,6 +4878,7 @@ class DeoptimizationInputData: public FixedArray {
DEFINE_ELEMENT_ACCESSORS(OsrPcOffset, Smi)
DEFINE_ELEMENT_ACCESSORS(OptimizationId, Smi)
DEFINE_ELEMENT_ACCESSORS(SharedFunctionInfo, Object)
+ DEFINE_ELEMENT_ACCESSORS(WeakCellCache, Object)
#undef DEFINE_ELEMENT_ACCESSORS
@@ -5407,6 +5409,9 @@ class Code: public HeapObject {
static inline bool IsWeakObjectInOptimizedCode(Object* object);
+ static Handle<WeakCell> WeakCellFor(Handle<Code> code);
+ WeakCell* CachedWeakCell();
+
// Max loop nesting marker used to postpose OSR. We don't take loop
// nesting that is deeper than 5 levels into account.
static const int kMaxLoopNestingMarker = 6;
Index: src/x64/lithium-codegen-x64.cc
diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc
index
c9ac471a00bff72173802ec73bb3f8059a4e687a..383795c8a0784134880d27122f34d13510931b3d
100644
--- a/src/x64/lithium-codegen-x64.cc
+++ b/src/x64/lithium-codegen-x64.cc
@@ -823,6 +823,7 @@ void LCodeGen::PopulateDeoptimizationData(Handle<Code>
code) {
} else {
data->SetSharedFunctionInfo(Smi::FromInt(0));
}
+ data->SetWeakCellCache(Smi::FromInt(0));
Handle<FixedArray> literals =
factory()->NewFixedArray(deoptimization_literals_.length(), TENURED);
Index: src/x87/lithium-codegen-x87.cc
diff --git a/src/x87/lithium-codegen-x87.cc b/src/x87/lithium-codegen-x87.cc
index
5cd70b15fceb696a695c405eebec10daa5578139..c9c8a47593200a01ef005ad6c52bac8e37aa1f6c
100644
--- a/src/x87/lithium-codegen-x87.cc
+++ b/src/x87/lithium-codegen-x87.cc
@@ -1195,6 +1195,7 @@ void
LCodeGen::PopulateDeoptimizationData(Handle<Code> code) {
} else {
data->SetSharedFunctionInfo(Smi::FromInt(0));
}
+ data->SetWeakCellCache(Smi::FromInt(0));
Handle<FixedArray> literals =
factory()->NewFixedArray(deoptimization_literals_.length(), TENURED);
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.