Commit 5c7b7b91 authored by titzer's avatar titzer Committed by Commit bot

Remove RecordTypeFeedback() methods from some AST classes and move into typing.cc.

R=mvstanton@chromium.org
BUG=

Review URL: https://codereview.chromium.org/955243002

Cr-Commit-Position: refs/heads/master@{#26890}
parent 4c80924d
...@@ -611,29 +611,6 @@ bool Call::ComputeGlobalTarget(Handle<GlobalObject> global, ...@@ -611,29 +611,6 @@ bool Call::ComputeGlobalTarget(Handle<GlobalObject> global,
} }
void CallNew::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
FeedbackVectorSlot allocation_site_feedback_slot =
FLAG_pretenuring_call_new ? AllocationSiteFeedbackSlot()
: CallNewFeedbackSlot();
allocation_site_ =
oracle->GetCallNewAllocationSite(allocation_site_feedback_slot);
is_monomorphic_ = oracle->CallNewIsMonomorphic(CallNewFeedbackSlot());
if (is_monomorphic_) {
target_ = oracle->GetCallNewTarget(CallNewFeedbackSlot());
}
}
void ObjectLiteral::Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
DCHECK(!is_computed_name());
TypeFeedbackId id = key()->AsLiteral()->LiteralFeedbackId();
SmallMapList maps;
oracle->CollectReceiverTypes(id, &maps);
receiver_type_ = maps.length() == 1 ? maps.at(0)
: Handle<Map>::null();
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Implementation of AstVisitor // Implementation of AstVisitor
......
...@@ -1414,7 +1414,6 @@ class ObjectLiteralProperty FINAL : public ZoneObject { ...@@ -1414,7 +1414,6 @@ class ObjectLiteralProperty FINAL : public ZoneObject {
Kind kind() { return kind_; } Kind kind() { return kind_; }
// Type feedback information. // Type feedback information.
void RecordTypeFeedback(TypeFeedbackOracle* oracle);
bool IsMonomorphic() { return !receiver_type_.is_null(); } bool IsMonomorphic() { return !receiver_type_.is_null(); }
Handle<Map> GetReceiverType() { return receiver_type_; } Handle<Map> GetReceiverType() { return receiver_type_; }
...@@ -1426,6 +1425,8 @@ class ObjectLiteralProperty FINAL : public ZoneObject { ...@@ -1426,6 +1425,8 @@ class ObjectLiteralProperty FINAL : public ZoneObject {
bool is_static() const { return is_static_; } bool is_static() const { return is_static_; }
bool is_computed_name() const { return is_computed_name_; } bool is_computed_name() const { return is_computed_name_; }
void set_receiver_type(Handle<Map> map) { receiver_type_ = map; }
protected: protected:
friend class AstNodeFactory; friend class AstNodeFactory;
...@@ -1918,7 +1919,6 @@ class CallNew FINAL : public Expression { ...@@ -1918,7 +1919,6 @@ class CallNew FINAL : public Expression {
return CallNewFeedbackSlot().next(); return CallNewFeedbackSlot().next();
} }
void RecordTypeFeedback(TypeFeedbackOracle* oracle);
bool IsMonomorphic() OVERRIDE { return is_monomorphic_; } bool IsMonomorphic() OVERRIDE { return is_monomorphic_; }
Handle<JSFunction> target() const { return target_; } Handle<JSFunction> target() const { return target_; }
Handle<AllocationSite> allocation_site() const { Handle<AllocationSite> allocation_site() const {
...@@ -1929,6 +1929,12 @@ class CallNew FINAL : public Expression { ...@@ -1929,6 +1929,12 @@ class CallNew FINAL : public Expression {
static int feedback_slots() { return 1; } static int feedback_slots() { return 1; }
BailoutId ReturnId() const { return BailoutId(local_id(0)); } BailoutId ReturnId() const { return BailoutId(local_id(0)); }
void set_allocation_site(Handle<AllocationSite> site) {
allocation_site_ = site;
}
void set_is_monomorphic(bool monomorphic) { is_monomorphic_ = monomorphic; }
void set_target(Handle<JSFunction> target) { target_ = target; }
protected: protected:
CallNew(Zone* zone, Expression* expression, ZoneList<Expression*>* arguments, CallNew(Zone* zone, Expression* expression, ZoneList<Expression*>* arguments,
int pos) int pos)
......
...@@ -410,7 +410,12 @@ void AstTyper::VisitObjectLiteral(ObjectLiteral* expr) { ...@@ -410,7 +410,12 @@ void AstTyper::VisitObjectLiteral(ObjectLiteral* expr) {
if (!prop->is_computed_name() && if (!prop->is_computed_name() &&
prop->key()->AsLiteral()->value()->IsInternalizedString() && prop->key()->AsLiteral()->value()->IsInternalizedString() &&
prop->emit_store()) { prop->emit_store()) {
prop->RecordTypeFeedback(oracle()); // Record type feed back for the property.
TypeFeedbackId id = prop->key()->AsLiteral()->LiteralFeedbackId();
SmallMapList maps;
oracle()->CollectReceiverTypes(id, &maps);
prop->set_receiver_type(maps.length() == 1 ? maps.at(0)
: Handle<Map>::null());
} }
} }
...@@ -562,7 +567,17 @@ void AstTyper::VisitCall(Call* expr) { ...@@ -562,7 +567,17 @@ void AstTyper::VisitCall(Call* expr) {
void AstTyper::VisitCallNew(CallNew* expr) { void AstTyper::VisitCallNew(CallNew* expr) {
// Collect type feedback. // Collect type feedback.
expr->RecordTypeFeedback(oracle()); FeedbackVectorSlot allocation_site_feedback_slot =
FLAG_pretenuring_call_new ? expr->AllocationSiteFeedbackSlot()
: expr->CallNewFeedbackSlot();
expr->set_allocation_site(
oracle()->GetCallNewAllocationSite(allocation_site_feedback_slot));
bool monomorphic =
oracle()->CallNewIsMonomorphic(expr->CallNewFeedbackSlot());
expr->set_is_monomorphic(monomorphic);
if (monomorphic) {
expr->set_target(oracle()->GetCallNewTarget(expr->CallNewFeedbackSlot()));
}
RECURSE(Visit(expr->expression())); RECURSE(Visit(expr->expression()));
ZoneList<Expression*>* args = expr->arguments(); ZoneList<Expression*>* args = expr->arguments();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment