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

Side by Side Diff: src/crankshaft/typing.cc

Issue 2361043002: [Ignition] Use binary operation feedback from Ignition to Crankshaft. (Closed)
Patch Set: Removed iostream from type-info.cc Created 4 years, 2 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 unified diff | Download patch
« no previous file with comments | « no previous file | src/type-feedback-vector-inl.h » ('j') | src/type-info.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/crankshaft/typing.h" 5 #include "src/crankshaft/typing.h"
6 6
7 #include "src/ast/compile-time-value.h" 7 #include "src/ast/compile-time-value.h"
8 #include "src/ast/scopes.h" 8 #include "src/ast/scopes.h"
9 #include "src/ast/variables.h" 9 #include "src/ast/variables.h"
10 #include "src/frames-inl.h" 10 #include "src/frames-inl.h"
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 204
205 Effects clause_effects = EnterEffects(); 205 Effects clause_effects = EnterEffects();
206 206
207 if (!clause->is_default()) { 207 if (!clause->is_default()) {
208 Expression* label = clause->label(); 208 Expression* label = clause->label();
209 // Collect type feedback. 209 // Collect type feedback.
210 AstType* tag_type; 210 AstType* tag_type;
211 AstType* label_type; 211 AstType* label_type;
212 AstType* combined_type; 212 AstType* combined_type;
213 oracle()->CompareType(clause->CompareId(), 213 oracle()->CompareType(clause->CompareId(),
214 &tag_type, &label_type, &combined_type); 214 clause->CompareOperationFeedbackSlot(), &tag_type,
215 &label_type, &combined_type);
215 NarrowLowerType(stmt->tag(), tag_type); 216 NarrowLowerType(stmt->tag(), tag_type);
216 NarrowLowerType(label, label_type); 217 NarrowLowerType(label, label_type);
217 clause->set_compare_type(combined_type); 218 clause->set_compare_type(combined_type);
218 219
219 RECURSE(Visit(label)); 220 RECURSE(Visit(label));
220 if (!clause_effects.IsEmpty()) complex_effects = true; 221 if (!clause_effects.IsEmpty()) complex_effects = true;
221 } 222 }
222 223
223 ZoneList<Statement*>* stmts = clause->statements(); 224 ZoneList<Statement*>* stmts = clause->statements();
224 RECURSE(VisitStatements(stmts)); 225 RECURSE(VisitStatements(stmts));
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 608
608 void AstTyper::VisitCountOperation(CountOperation* expr) { 609 void AstTyper::VisitCountOperation(CountOperation* expr) {
609 // Collect type feedback. 610 // Collect type feedback.
610 FeedbackVectorSlot slot = expr->CountSlot(); 611 FeedbackVectorSlot slot = expr->CountSlot();
611 KeyedAccessStoreMode store_mode; 612 KeyedAccessStoreMode store_mode;
612 IcCheckType key_type; 613 IcCheckType key_type;
613 oracle()->GetStoreModeAndKeyType(slot, &store_mode, &key_type); 614 oracle()->GetStoreModeAndKeyType(slot, &store_mode, &key_type);
614 oracle()->CountReceiverTypes(slot, expr->GetReceiverTypes()); 615 oracle()->CountReceiverTypes(slot, expr->GetReceiverTypes());
615 expr->set_store_mode(store_mode); 616 expr->set_store_mode(store_mode);
616 expr->set_key_type(key_type); 617 expr->set_key_type(key_type);
617 expr->set_type(oracle()->CountType(expr->CountBinOpFeedbackId())); 618 expr->set_type(oracle()->CountType(expr->CountBinOpFeedbackId(),
619 expr->CountBinaryOpFeedbackSlot()));
618 // TODO(rossberg): merge the count type with the generic expression type. 620 // TODO(rossberg): merge the count type with the generic expression type.
619 621
620 RECURSE(Visit(expr->expression())); 622 RECURSE(Visit(expr->expression()));
621 623
622 NarrowType(expr, AstBounds(AstType::SignedSmall(), AstType::Number())); 624 NarrowType(expr, AstBounds(AstType::SignedSmall(), AstType::Number()));
623 625
624 VariableProxy* proxy = expr->expression()->AsVariableProxy(); 626 VariableProxy* proxy = expr->expression()->AsVariableProxy();
625 if (proxy != NULL && proxy->var()->IsStackAllocated()) { 627 if (proxy != NULL && proxy->var()->IsStackAllocated()) {
626 store_.Seq(variable_index(proxy->var()), Effect(bounds_->get(expr))); 628 store_.Seq(variable_index(proxy->var()), Effect(bounds_->get(expr)));
627 } 629 }
628 } 630 }
629 631
630
631 void AstTyper::VisitBinaryOperation(BinaryOperation* expr) { 632 void AstTyper::VisitBinaryOperation(BinaryOperation* expr) {
632 // Collect type feedback. 633 // Collect type feedback.
633 AstType* type; 634 AstType* type;
634 AstType* left_type; 635 AstType* left_type;
635 AstType* right_type; 636 AstType* right_type;
636 Maybe<int> fixed_right_arg = Nothing<int>(); 637 Maybe<int> fixed_right_arg = Nothing<int>();
637 Handle<AllocationSite> allocation_site; 638 Handle<AllocationSite> allocation_site;
638 oracle()->BinaryType(expr->BinaryOperationFeedbackId(), 639 oracle()->BinaryType(expr->BinaryOperationFeedbackId(),
639 &left_type, &right_type, &type, &fixed_right_arg, 640 expr->BinaryOperationFeedbackSlot(), &left_type,
640 &allocation_site, expr->op()); 641 &right_type, &type, &fixed_right_arg, &allocation_site,
642 expr->op());
643
641 NarrowLowerType(expr, type); 644 NarrowLowerType(expr, type);
642 NarrowLowerType(expr->left(), left_type); 645 NarrowLowerType(expr->left(), left_type);
643 NarrowLowerType(expr->right(), right_type); 646 NarrowLowerType(expr->right(), right_type);
644 expr->set_allocation_site(allocation_site); 647 expr->set_allocation_site(allocation_site);
645 expr->set_fixed_right_arg(fixed_right_arg); 648 expr->set_fixed_right_arg(fixed_right_arg);
646 if (expr->op() == Token::OR || expr->op() == Token::AND) { 649 if (expr->op() == Token::OR || expr->op() == Token::AND) {
647 expr->left()->RecordToBooleanTypeFeedback(oracle()); 650 expr->left()->RecordToBooleanTypeFeedback(oracle());
648 } 651 }
649 652
650 switch (expr->op()) { 653 switch (expr->op()) {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 } 735 }
733 } 736 }
734 737
735 738
736 void AstTyper::VisitCompareOperation(CompareOperation* expr) { 739 void AstTyper::VisitCompareOperation(CompareOperation* expr) {
737 // Collect type feedback. 740 // Collect type feedback.
738 AstType* left_type; 741 AstType* left_type;
739 AstType* right_type; 742 AstType* right_type;
740 AstType* combined_type; 743 AstType* combined_type;
741 oracle()->CompareType(expr->CompareOperationFeedbackId(), 744 oracle()->CompareType(expr->CompareOperationFeedbackId(),
742 &left_type, &right_type, &combined_type); 745 expr->CompareOperationFeedbackSlot(), &left_type,
746 &right_type, &combined_type);
743 NarrowLowerType(expr->left(), left_type); 747 NarrowLowerType(expr->left(), left_type);
744 NarrowLowerType(expr->right(), right_type); 748 NarrowLowerType(expr->right(), right_type);
745 expr->set_combined_type(combined_type); 749 expr->set_combined_type(combined_type);
746 750
747 RECURSE(Visit(expr->left())); 751 RECURSE(Visit(expr->left()));
748 RECURSE(Visit(expr->right())); 752 RECURSE(Visit(expr->right()));
749 753
750 NarrowType(expr, AstBounds(AstType::Boolean())); 754 NarrowType(expr, AstBounds(AstType::Boolean()));
751 } 755 }
752 756
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 } 797 }
794 798
795 799
796 void AstTyper::VisitFunctionDeclaration(FunctionDeclaration* declaration) { 800 void AstTyper::VisitFunctionDeclaration(FunctionDeclaration* declaration) {
797 RECURSE(Visit(declaration->fun())); 801 RECURSE(Visit(declaration->fun()));
798 } 802 }
799 803
800 804
801 } // namespace internal 805 } // namespace internal
802 } // namespace v8 806 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/type-feedback-vector-inl.h » ('j') | src/type-info.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698