Index: src/crankshaft/typing.cc |
diff --git a/src/crankshaft/typing.cc b/src/crankshaft/typing.cc |
index bf2c8037ea5ed2e7521caf051da3540122989a62..70d77084d5b6a4364ec49b5f90934d0f4c4f6c36 100644 |
--- a/src/crankshaft/typing.cc |
+++ b/src/crankshaft/typing.cc |
@@ -17,7 +17,8 @@ namespace internal { |
AstTyper::AstTyper(Isolate* isolate, Zone* zone, Handle<JSFunction> closure, |
DeclarationScope* scope, BailoutId osr_ast_id, |
- FunctionLiteral* root, AstTypeBounds* bounds) |
+ FunctionLiteral* root, AstTypeBounds* bounds, |
+ bool ignition_feedback) |
: isolate_(isolate), |
zone_(zone), |
closure_(closure), |
@@ -28,7 +29,8 @@ AstTyper::AstTyper(Isolate* isolate, Zone* zone, Handle<JSFunction> closure, |
handle(closure->feedback_vector()), |
handle(closure->context()->native_context())), |
store_(zone), |
- bounds_(bounds) { |
+ bounds_(bounds), |
+ ignition_feedback_(ignition_feedback) { |
InitializeAstVisitor(isolate); |
} |
@@ -211,7 +213,8 @@ void AstTyper::VisitSwitchStatement(SwitchStatement* stmt) { |
AstType* label_type; |
AstType* combined_type; |
oracle()->CompareType(clause->CompareId(), |
- &tag_type, &label_type, &combined_type); |
+ clause->CompareOperationFeedbackSlot(), &tag_type, |
+ &label_type, &combined_type, ignition_feedback_); |
NarrowLowerType(stmt->tag(), tag_type); |
NarrowLowerType(label, label_type); |
clause->set_compare_type(combined_type); |
@@ -614,7 +617,9 @@ void AstTyper::VisitCountOperation(CountOperation* expr) { |
oracle()->CountReceiverTypes(slot, expr->GetReceiverTypes()); |
expr->set_store_mode(store_mode); |
expr->set_key_type(key_type); |
- expr->set_type(oracle()->CountType(expr->CountBinOpFeedbackId())); |
+ expr->set_type(oracle()->CountType(expr->CountBinOpFeedbackId(), |
+ expr->CountBinaryOpFeedbackSlot(), |
+ ignition_feedback_)); |
// TODO(rossberg): merge the count type with the generic expression type. |
RECURSE(Visit(expr->expression())); |
@@ -627,7 +632,6 @@ void AstTyper::VisitCountOperation(CountOperation* expr) { |
} |
} |
- |
void AstTyper::VisitBinaryOperation(BinaryOperation* expr) { |
// Collect type feedback. |
AstType* type; |
@@ -636,8 +640,10 @@ void AstTyper::VisitBinaryOperation(BinaryOperation* expr) { |
Maybe<int> fixed_right_arg = Nothing<int>(); |
Handle<AllocationSite> allocation_site; |
oracle()->BinaryType(expr->BinaryOperationFeedbackId(), |
- &left_type, &right_type, &type, &fixed_right_arg, |
- &allocation_site, expr->op()); |
+ expr->BinaryOperationFeedbackSlot(), &left_type, |
+ &right_type, &type, &fixed_right_arg, &allocation_site, |
+ expr->op(), ignition_feedback_); |
+ |
NarrowLowerType(expr, type); |
NarrowLowerType(expr->left(), left_type); |
NarrowLowerType(expr->right(), right_type); |
@@ -739,7 +745,8 @@ void AstTyper::VisitCompareOperation(CompareOperation* expr) { |
AstType* right_type; |
AstType* combined_type; |
oracle()->CompareType(expr->CompareOperationFeedbackId(), |
- &left_type, &right_type, &combined_type); |
+ expr->CompareOperationFeedbackSlot(), &left_type, |
+ &right_type, &combined_type, ignition_feedback_); |
NarrowLowerType(expr->left(), left_type); |
NarrowLowerType(expr->right(), right_type); |
expr->set_combined_type(combined_type); |