Reviewers: Jakob,
Message:
Hi Jakob,
Here is a short follow-up to the CL that allocates vector slots for store
ics.
There is an additional work item to be done in the numbering phase,
otherwise we
over-allocate ic slots. Thanks for the look!
--Michael
Description:
Build ObjectLiteral constant properties in the numbering phase.
It's necessary to do this in order to know how many type feedback vector
slots
we should allocate for the object literal.
BUG=
Please review this at https://codereview.chromium.org/1165463007/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+2, -8 lines):
M src/arm/full-codegen-arm.cc
M src/arm64/full-codegen-arm64.cc
M src/ast-numbering.cc
M src/compiler/ast-graph-builder.cc
M src/hydrogen.cc
M src/ia32/full-codegen-ia32.cc
M src/mips/full-codegen-mips.cc
M src/mips64/full-codegen-mips64.cc
M src/x64/full-codegen-x64.cc
Index: src/arm/full-codegen-arm.cc
diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc
index
7a0d9b658e96bee32369b65c588bbbc6366d2e1b..83acf9ef5b87162a337395cf282c216a4678f0cd
100644
--- a/src/arm/full-codegen-arm.cc
+++ b/src/arm/full-codegen-arm.cc
@@ -1656,7 +1656,6 @@ void FullCodeGenerator::EmitAccessor(Expression*
expression) {
void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
Comment cmnt(masm_, "[ ObjectLiteral");
- expr->BuildConstantProperties(isolate());
Handle<FixedArray> constant_properties = expr->constant_properties();
__ ldr(r3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
__ ldr(r3, FieldMemOperand(r3, JSFunction::kLiteralsOffset));
Index: src/arm64/full-codegen-arm64.cc
diff --git a/src/arm64/full-codegen-arm64.cc
b/src/arm64/full-codegen-arm64.cc
index
0e6391f8eb3f53439915cd53a89fe6dd3ed2cd1c..2ee5e4de1142836d1efd5eb9d6564cf8371c30d3
100644
--- a/src/arm64/full-codegen-arm64.cc
+++ b/src/arm64/full-codegen-arm64.cc
@@ -1629,7 +1629,6 @@ void FullCodeGenerator::EmitAccessor(Expression*
expression) {
void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
Comment cmnt(masm_, "[ ObjectLiteral");
- expr->BuildConstantProperties(isolate());
Handle<FixedArray> constant_properties = expr->constant_properties();
__ Ldr(x3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
__ Ldr(x3, FieldMemOperand(x3, JSFunction::kLiteralsOffset));
Index: src/ast-numbering.cc
diff --git a/src/ast-numbering.cc b/src/ast-numbering.cc
index
da23aad98a5249b2838046686ec1e6e80969e588..3cb221485fc6f26aa081b251234a73efa9274d79
100644
--- a/src/ast-numbering.cc
+++ b/src/ast-numbering.cc
@@ -224,6 +224,7 @@ void
AstNumberingVisitor::VisitCountOperation(CountOperation* node) {
IncrementNodeCount();
node->set_base_id(ReserveIdRange(CountOperation::num_ids()));
Visit(node->expression());
+ ReserveFeedbackSlots(node);
}
@@ -434,6 +435,7 @@ void
AstNumberingVisitor::VisitObjectLiteral(ObjectLiteral* node) {
for (int i = 0; i < node->properties()->length(); i++) {
VisitObjectLiteralProperty(node->properties()->at(i));
}
+ node->BuildConstantProperties(isolate());
// Mark all computed expressions that are bound to a key that
// is shadowed by a later occurrence of the same key. For the
// marked expressions, no store code will be is emitted.
Index: src/compiler/ast-graph-builder.cc
diff --git a/src/compiler/ast-graph-builder.cc
b/src/compiler/ast-graph-builder.cc
index
b648495fdfd5d13cabefadec159ff16e442e07d2..d84cca6487ac1768ef004da119ced941be7e9133
100644
--- a/src/compiler/ast-graph-builder.cc
+++ b/src/compiler/ast-graph-builder.cc
@@ -1696,7 +1696,6 @@ void
AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
Node* closure = GetFunctionClosure();
// Create node to deep-copy the literal boilerplate.
- expr->BuildConstantProperties(isolate());
Node* literals_array =
BuildLoadObjectField(closure, JSFunction::kLiteralsOffset);
Node* literal_index = jsgraph()->Constant(expr->literal_index());
Index: src/hydrogen.cc
diff --git a/src/hydrogen.cc b/src/hydrogen.cc
index
30406d656c3ee4d293877ab96ec36eaee7168e09..0ea4e4e543b1d71bb9e3f5997bbeaa84019e35d3
100644
--- a/src/hydrogen.cc
+++ b/src/hydrogen.cc
@@ -5644,7 +5644,6 @@ void
HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
DCHECK(current_block() != NULL);
DCHECK(current_block()->HasPredecessor());
- expr->BuildConstantProperties(isolate());
Handle<JSFunction> closure =
function_state()->compilation_info()->closure();
HInstruction* literal;
Index: src/ia32/full-codegen-ia32.cc
diff --git a/src/ia32/full-codegen-ia32.cc b/src/ia32/full-codegen-ia32.cc
index
573ca702d62437181c6173c4af6cce4a2dd827a2..282a0e2056c8ea36520a606e64a529745563ad82
100644
--- a/src/ia32/full-codegen-ia32.cc
+++ b/src/ia32/full-codegen-ia32.cc
@@ -1583,7 +1583,6 @@ void FullCodeGenerator::EmitAccessor(Expression*
expression) {
void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
Comment cmnt(masm_, "[ ObjectLiteral");
- expr->BuildConstantProperties(isolate());
Handle<FixedArray> constant_properties = expr->constant_properties();
int flags = expr->ComputeFlags();
// If any of the keys would store to the elements array, then we
shouldn't
Index: src/mips/full-codegen-mips.cc
diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc
index
c81f346d13cc86a87c4fcb95d105ce9f673f68b0..9d9af8d1bd3a91f1937fceb481c781cbdd7f761c
100644
--- a/src/mips/full-codegen-mips.cc
+++ b/src/mips/full-codegen-mips.cc
@@ -1642,7 +1642,6 @@ void FullCodeGenerator::EmitAccessor(Expression*
expression) {
void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
Comment cmnt(masm_, "[ ObjectLiteral");
- expr->BuildConstantProperties(isolate());
Handle<FixedArray> constant_properties = expr->constant_properties();
__ lw(a3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
__ lw(a3, FieldMemOperand(a3, JSFunction::kLiteralsOffset));
Index: src/mips64/full-codegen-mips64.cc
diff --git a/src/mips64/full-codegen-mips64.cc
b/src/mips64/full-codegen-mips64.cc
index
29caab4adf4a2a8174c147d30ff43f8dd0a35e79..bc014c2baddd80ce32e9d63879c03eed85e2301b
100644
--- a/src/mips64/full-codegen-mips64.cc
+++ b/src/mips64/full-codegen-mips64.cc
@@ -1641,7 +1641,6 @@ void FullCodeGenerator::EmitAccessor(Expression*
expression) {
void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
Comment cmnt(masm_, "[ ObjectLiteral");
- expr->BuildConstantProperties(isolate());
Handle<FixedArray> constant_properties = expr->constant_properties();
__ ld(a3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
__ ld(a3, FieldMemOperand(a3, JSFunction::kLiteralsOffset));
Index: src/x64/full-codegen-x64.cc
diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc
index
947de32072f0e0a1a9bb6d620746184fc91b16c6..5d3770be97e3b773c1b7ab4953b2338eee95fd43
100644
--- a/src/x64/full-codegen-x64.cc
+++ b/src/x64/full-codegen-x64.cc
@@ -1617,7 +1617,6 @@ void FullCodeGenerator::EmitAccessor(Expression*
expression) {
void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
Comment cmnt(masm_, "[ ObjectLiteral");
- expr->BuildConstantProperties(isolate());
Handle<FixedArray> constant_properties = expr->constant_properties();
int flags = expr->ComputeFlags();
if (MustCreateObjectLiteralWithRuntime(expr)) {
--
--
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.