OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 private: | 598 private: |
599 BreakAndContinueInfo* info_; | 599 BreakAndContinueInfo* info_; |
600 HGraphBuilder* owner_; | 600 HGraphBuilder* owner_; |
601 BreakAndContinueScope* next_; | 601 BreakAndContinueScope* next_; |
602 }; | 602 }; |
603 | 603 |
604 explicit HGraphBuilder(TypeFeedbackOracle* oracle) | 604 explicit HGraphBuilder(TypeFeedbackOracle* oracle) |
605 : oracle_(oracle), | 605 : oracle_(oracle), |
606 graph_(NULL), | 606 graph_(NULL), |
607 current_subgraph_(NULL), | 607 current_subgraph_(NULL), |
608 peeled_statement_(NULL), | |
609 ast_context_(NULL), | 608 ast_context_(NULL), |
610 call_context_(NULL), | 609 call_context_(NULL), |
611 function_return_(NULL), | 610 function_return_(NULL), |
612 inlined_count_(0), | 611 inlined_count_(0), |
613 break_scope_(NULL) { | 612 break_scope_(NULL) { |
614 } | 613 } |
615 | 614 |
616 HGraph* CreateGraph(CompilationInfo* info); | 615 HGraph* CreateGraph(CompilationInfo* info); |
617 | 616 |
618 // Simple accessors. | 617 // Simple accessors. |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 INLINE_RUNTIME_FUNCTION_LIST(INLINE_FUNCTION_GENERATOR_DECLARATION) | 668 INLINE_RUNTIME_FUNCTION_LIST(INLINE_FUNCTION_GENERATOR_DECLARATION) |
670 #undef INLINE_FUNCTION_GENERATOR_DECLARATION | 669 #undef INLINE_FUNCTION_GENERATOR_DECLARATION |
671 | 670 |
672 void Bailout(const char* reason); | 671 void Bailout(const char* reason); |
673 | 672 |
674 void PreProcessOsrEntry(IterationStatement* statement); | 673 void PreProcessOsrEntry(IterationStatement* statement); |
675 | 674 |
676 HBasicBlock* CreateJoin(HBasicBlock* first, | 675 HBasicBlock* CreateJoin(HBasicBlock* first, |
677 HBasicBlock* second, | 676 HBasicBlock* second, |
678 int join_id); | 677 int join_id); |
679 HBasicBlock* CreateWhile(IterationStatement* statement, | 678 |
680 HBasicBlock* loop_entry, | 679 // Create a back edge in the flow graph. body_exit is the predecessor |
681 HBasicBlock* cond_false, | 680 // block and loop_entry is the successor block. loop_successor is the |
682 HBasicBlock* body_exit, | 681 // block where control flow exits the loop normally (e.g., via failure of |
683 HBasicBlock* break_block); | 682 // the condition) and break_block is the block where control flow breaks |
684 HBasicBlock* CreateDoWhile(IterationStatement* statement, | 683 // from the loop. All blocks except loop_entry can be NULL. The return |
685 HBasicBlock* body_entry, | 684 // value is the new successor block which is the join of loop_successor |
686 HBasicBlock* go_back, | 685 // and break_block, or NULL. |
687 HBasicBlock* exit_block, | 686 HBasicBlock* CreateLoop(IterationStatement* statement, |
688 HBasicBlock* break_block); | 687 HBasicBlock* loop_entry, |
689 HBasicBlock* CreateEndless(IterationStatement* statement, | 688 HBasicBlock* body_exit, |
690 HBasicBlock* body_entry, | 689 HBasicBlock* loop_successor, |
691 HBasicBlock* body_exit, | 690 HBasicBlock* break_block); |
692 HBasicBlock* break_block); | 691 |
693 HBasicBlock* JoinContinue(IterationStatement* statement, | 692 HBasicBlock* JoinContinue(IterationStatement* statement, |
694 HBasicBlock* exit_block, | 693 HBasicBlock* exit_block, |
695 HBasicBlock* continue_block); | 694 HBasicBlock* continue_block); |
696 | 695 |
697 | |
698 void AddToSubgraph(HSubgraph* graph, ZoneList<Statement*>* stmts); | 696 void AddToSubgraph(HSubgraph* graph, ZoneList<Statement*>* stmts); |
699 void AddToSubgraph(HSubgraph* graph, Statement* stmt); | 697 void AddToSubgraph(HSubgraph* graph, Statement* stmt); |
700 void AddToSubgraph(HSubgraph* graph, Expression* expr); | 698 void AddToSubgraph(HSubgraph* graph, Expression* expr); |
701 | 699 |
702 HValue* Top() const { return environment()->Top(); } | 700 HValue* Top() const { return environment()->Top(); } |
703 void Drop(int n) { environment()->Drop(n); } | 701 void Drop(int n) { environment()->Drop(n); } |
704 void Bind(Variable* var, HValue* value) { environment()->Bind(var, value); } | 702 void Bind(Variable* var, HValue* value) { environment()->Bind(var, value); } |
705 | 703 |
706 void VisitForValue(Expression* expr); | 704 void VisitForValue(Expression* expr); |
707 void VisitForEffect(Expression* expr); | 705 void VisitForEffect(Expression* expr); |
(...skipping 22 matching lines...) Expand all Loading... |
730 | 728 |
731 void SetupScope(Scope* scope); | 729 void SetupScope(Scope* scope); |
732 virtual void VisitStatements(ZoneList<Statement*>* statements); | 730 virtual void VisitStatements(ZoneList<Statement*>* statements); |
733 | 731 |
734 #define DECLARE_VISIT(type) virtual void Visit##type(type* node); | 732 #define DECLARE_VISIT(type) virtual void Visit##type(type* node); |
735 AST_NODE_LIST(DECLARE_VISIT) | 733 AST_NODE_LIST(DECLARE_VISIT) |
736 #undef DECLARE_VISIT | 734 #undef DECLARE_VISIT |
737 | 735 |
738 HBasicBlock* CreateBasicBlock(HEnvironment* env); | 736 HBasicBlock* CreateBasicBlock(HEnvironment* env); |
739 HSubgraph* CreateEmptySubgraph(); | 737 HSubgraph* CreateEmptySubgraph(); |
740 HSubgraph* CreateGotoSubgraph(HEnvironment* env); | |
741 HSubgraph* CreateBranchSubgraph(HEnvironment* env); | 738 HSubgraph* CreateBranchSubgraph(HEnvironment* env); |
742 HBasicBlock* CreateLoopHeader(); | 739 HBasicBlock* CreateLoopHeaderBlock(); |
743 HSubgraph* CreateInlinedSubgraph(HEnvironment* outer, | 740 HSubgraph* CreateInlinedSubgraph(HEnvironment* outer, |
744 Handle<JSFunction> target, | 741 Handle<JSFunction> target, |
745 FunctionLiteral* function); | 742 FunctionLiteral* function); |
746 | 743 |
747 // Helpers for flow graph construction. | 744 // Helpers for flow graph construction. |
748 void LookupGlobalPropertyCell(Variable* var, | 745 void LookupGlobalPropertyCell(Variable* var, |
749 LookupResult* lookup, | 746 LookupResult* lookup, |
750 bool is_store); | 747 bool is_store); |
751 | 748 |
752 bool TryArgumentsAccess(Property* expr); | 749 bool TryArgumentsAccess(Property* expr); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
844 | 841 |
845 HBasicBlock* BuildTypeSwitch(HValue* receiver, | 842 HBasicBlock* BuildTypeSwitch(HValue* receiver, |
846 ZoneMapList* maps, | 843 ZoneMapList* maps, |
847 ZoneList<HSubgraph*>* body_graphs, | 844 ZoneList<HSubgraph*>* body_graphs, |
848 HSubgraph* default_graph, | 845 HSubgraph* default_graph, |
849 int join_id); | 846 int join_id); |
850 | 847 |
851 TypeFeedbackOracle* oracle_; | 848 TypeFeedbackOracle* oracle_; |
852 HGraph* graph_; | 849 HGraph* graph_; |
853 HSubgraph* current_subgraph_; | 850 HSubgraph* current_subgraph_; |
854 IterationStatement* peeled_statement_; | |
855 // Expression context of the currently visited subexpression. NULL when | 851 // Expression context of the currently visited subexpression. NULL when |
856 // visiting statements. | 852 // visiting statements. |
857 AstContext* ast_context_; | 853 AstContext* ast_context_; |
858 | 854 |
859 // During function inlining, expression context of the call being | 855 // During function inlining, expression context of the call being |
860 // inlined. NULL when not inlining. | 856 // inlined. NULL when not inlining. |
861 AstContext* call_context_; | 857 AstContext* call_context_; |
862 | 858 |
863 // When inlining a call in an effect or value context, the return | 859 // When inlining a call in an effect or value context, the return |
864 // block. NULL otherwise. When inlining a call in a test context, there | 860 // block. NULL otherwise. When inlining a call in a test context, there |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1082 const char* filename_; | 1078 const char* filename_; |
1083 HeapStringAllocator string_allocator_; | 1079 HeapStringAllocator string_allocator_; |
1084 StringStream trace_; | 1080 StringStream trace_; |
1085 int indent_; | 1081 int indent_; |
1086 }; | 1082 }; |
1087 | 1083 |
1088 | 1084 |
1089 } } // namespace v8::internal | 1085 } } // namespace v8::internal |
1090 | 1086 |
1091 #endif // V8_HYDROGEN_H_ | 1087 #endif // V8_HYDROGEN_H_ |
OLD | NEW |