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

Unified Diff: src/compiler/ast-graph-builder.cc

Issue 1198263004: [turbofan] Avoid embedding type feedback vector into code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments. Created 5 years, 6 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
« no previous file with comments | « src/compiler/ast-graph-builder.h ('k') | test/cctest/compiler/test-run-jscalls.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/ast-graph-builder.cc
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc
index 44f2276ee6513231af2bcdd29fa6023323fbcd52..57eb79a7cb73a46207118d5b8a003fb5ff8291cf 100644
--- a/src/compiler/ast-graph-builder.cc
+++ b/src/compiler/ast-graph-builder.cc
@@ -479,16 +479,6 @@ Node* AstGraphBuilder::GetFunctionClosure() {
}
-Node* AstGraphBuilder::GetFeedbackVector() {
- if (!feedback_vector_.is_set()) {
- Node* vector =
- jsgraph()->Constant(handle(info()->shared_info()->feedback_vector()));
- feedback_vector_.set(vector);
- }
- return feedback_vector_.get();
-}
-
-
void AstGraphBuilder::CreateFunctionContext(bool constant_context) {
function_context_.set(constant_context
? jsgraph()->HeapConstant(info()->context())
@@ -3293,7 +3283,7 @@ Node* AstGraphBuilder::BuildVariableLoad(Variable* variable,
uint32_t check_bitset = ComputeBitsetForDynamicGlobal(variable);
const Operator* op = javascript()->LoadDynamicGlobal(
name, check_bitset, feedback, contextual_mode);
- value = NewNode(op, GetFeedbackVector(), current_context());
+ value = NewNode(op, BuildLoadFeedbackVector(), current_context());
states.AddToNode(value, bailout_id, combine);
} else if (mode == DYNAMIC_LOCAL) {
Variable* local = variable->local_if_not_shadowed();
@@ -3317,7 +3307,7 @@ Node* AstGraphBuilder::BuildVariableLoad(Variable* variable,
uint32_t check_bitset = DynamicGlobalAccess::kFullCheckRequired;
const Operator* op = javascript()->LoadDynamicGlobal(
name, check_bitset, feedback, contextual_mode);
- value = NewNode(op, GetFeedbackVector(), current_context());
+ value = NewNode(op, BuildLoadFeedbackVector(), current_context());
states.AddToNode(value, bailout_id, combine);
}
return value;
@@ -3491,8 +3481,8 @@ static inline Node* Record(JSTypeFeedbackTable* js_type_feedback, Node* node,
Node* AstGraphBuilder::BuildKeyedLoad(Node* object, Node* key,
const VectorSlotPair& feedback) {
const Operator* op = javascript()->LoadProperty(feedback);
- return Record(js_type_feedback_,
- NewNode(op, object, key, GetFeedbackVector()), feedback.slot());
+ Node* node = NewNode(op, object, key, BuildLoadFeedbackVector());
+ return Record(js_type_feedback_, node, feedback.slot());
}
@@ -3501,8 +3491,8 @@ Node* AstGraphBuilder::BuildNamedLoad(Node* object, Handle<Name> name,
ContextualMode mode) {
const Operator* op =
javascript()->LoadNamed(MakeUnique(name), feedback, mode);
- return Record(js_type_feedback_, NewNode(op, object, GetFeedbackVector()),
- feedback.slot());
+ Node* node = NewNode(op, object, BuildLoadFeedbackVector());
+ return Record(js_type_feedback_, node, feedback.slot());
}
@@ -3510,7 +3500,8 @@ Node* AstGraphBuilder::BuildKeyedStore(Node* object, Node* key, Node* value,
const VectorSlotPair& feedback,
TypeFeedbackId id) {
const Operator* op = javascript()->StoreProperty(language_mode(), feedback);
- return Record(js_type_feedback_, NewNode(op, object, key, value), id);
+ Node* node = NewNode(op, object, key, value);
+ return Record(js_type_feedback_, node, id);
}
@@ -3520,7 +3511,8 @@ Node* AstGraphBuilder::BuildNamedStore(Node* object, Handle<Name> name,
TypeFeedbackId id) {
const Operator* op =
javascript()->StoreNamed(language_mode(), MakeUnique(name), feedback);
- return Record(js_type_feedback_, NewNode(op, object, value), id);
+ Node* node = NewNode(op, object, value);
+ return Record(js_type_feedback_, node, id);
}
@@ -3529,8 +3521,8 @@ Node* AstGraphBuilder::BuildNamedSuperLoad(Node* receiver, Node* home_object,
const VectorSlotPair& feedback) {
Node* name_node = jsgraph()->Constant(name);
const Operator* op = javascript()->CallRuntime(Runtime::kLoadFromSuper, 3);
- Node* value = NewNode(op, receiver, home_object, name_node);
- return Record(js_type_feedback_, value, feedback.slot());
+ Node* node = NewNode(op, receiver, home_object, name_node);
+ return Record(js_type_feedback_, node, feedback.slot());
}
@@ -3539,8 +3531,8 @@ Node* AstGraphBuilder::BuildKeyedSuperLoad(Node* receiver, Node* home_object,
const VectorSlotPair& feedback) {
const Operator* op =
javascript()->CallRuntime(Runtime::kLoadKeyedFromSuper, 3);
- Node* value = NewNode(op, receiver, home_object, key);
- return Record(js_type_feedback_, value, feedback.slot());
+ Node* node = NewNode(op, receiver, home_object, key);
+ return Record(js_type_feedback_, node, feedback.slot());
}
@@ -3551,8 +3543,8 @@ Node* AstGraphBuilder::BuildKeyedSuperStore(Node* receiver, Node* home_object,
? Runtime::kStoreKeyedToSuper_Strict
: Runtime::kStoreKeyedToSuper_Sloppy;
const Operator* op = javascript()->CallRuntime(function_id, 4);
- Node* result = NewNode(op, receiver, home_object, key, value);
- return Record(js_type_feedback_, result, id);
+ Node* node = NewNode(op, receiver, home_object, key, value);
+ return Record(js_type_feedback_, node, id);
}
@@ -3564,8 +3556,8 @@ Node* AstGraphBuilder::BuildNamedSuperStore(Node* receiver, Node* home_object,
? Runtime::kStoreToSuper_Strict
: Runtime::kStoreToSuper_Sloppy;
const Operator* op = javascript()->CallRuntime(function_id, 4);
- Node* result = NewNode(op, receiver, home_object, name_node, value);
- return Record(js_type_feedback_, result, id);
+ Node* node = NewNode(op, receiver, home_object, name_node, value);
+ return Record(js_type_feedback_, node, id);
}
@@ -3575,6 +3567,13 @@ Node* AstGraphBuilder::BuildLoadObjectField(Node* object, int offset) {
}
+Node* AstGraphBuilder::BuildLoadImmutableObjectField(Node* object, int offset) {
+ return graph()->NewNode(jsgraph()->machine()->Load(kMachAnyTagged), object,
+ jsgraph()->IntPtrConstant(offset - kHeapObjectTag),
+ graph()->start(), graph()->start());
+}
+
+
Node* AstGraphBuilder::BuildLoadBuiltinsObject() {
Node* global = BuildLoadGlobalObject();
Node* builtins =
@@ -3598,6 +3597,19 @@ Node* AstGraphBuilder::BuildLoadGlobalProxy() {
}
+Node* AstGraphBuilder::BuildLoadFeedbackVector() {
+ if (!feedback_vector_.is_set()) {
+ Node* closure = GetFunctionClosure();
+ Node* shared = BuildLoadImmutableObjectField(
+ closure, JSFunction::kSharedFunctionInfoOffset);
+ Node* vector = BuildLoadImmutableObjectField(
+ shared, SharedFunctionInfo::kFeedbackVectorOffset);
+ feedback_vector_.set(vector);
+ }
+ return feedback_vector_.get();
+}
+
+
Node* AstGraphBuilder::BuildLoadExternal(ExternalReference reference,
MachineType type) {
return NewNode(jsgraph()->machine()->Load(type),
« no previous file with comments | « src/compiler/ast-graph-builder.h ('k') | test/cctest/compiler/test-run-jscalls.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698