OLD | NEW |
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/hydrogen.h" | 5 #include "src/hydrogen.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 | 8 |
9 #include "src/v8.h" | 9 #include "src/v8.h" |
10 | 10 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 predecessors_(2, graph->zone()), | 75 predecessors_(2, graph->zone()), |
76 dominator_(NULL), | 76 dominator_(NULL), |
77 dominated_blocks_(4, graph->zone()), | 77 dominated_blocks_(4, graph->zone()), |
78 last_environment_(NULL), | 78 last_environment_(NULL), |
79 argument_count_(-1), | 79 argument_count_(-1), |
80 first_instruction_index_(-1), | 80 first_instruction_index_(-1), |
81 last_instruction_index_(-1), | 81 last_instruction_index_(-1), |
82 deleted_phis_(4, graph->zone()), | 82 deleted_phis_(4, graph->zone()), |
83 parent_loop_header_(NULL), | 83 parent_loop_header_(NULL), |
84 inlined_entry_block_(NULL), | 84 inlined_entry_block_(NULL), |
85 is_inline_return_target_(false), | 85 bit_field_(IsInlineReturnTargetField::encode(false) | |
86 is_reachable_(true), | 86 IsReachableField::encode(true) | |
87 dominates_loop_successors_(false), | 87 DominatesLoopSuccessorsField::encode(false) | |
88 is_osr_entry_(false), | 88 IsOsrEntryField::encode(false) | |
89 is_ordered_(false) { } | 89 IsOrderedField::encode(false)) {} |
90 | 90 |
91 | 91 |
92 Isolate* HBasicBlock::isolate() const { | 92 Isolate* HBasicBlock::isolate() const { |
93 return graph_->isolate(); | 93 return graph_->isolate(); |
94 } | 94 } |
95 | 95 |
96 | 96 |
97 void HBasicBlock::MarkUnreachable() { | 97 void HBasicBlock::MarkUnreachable() { |
98 is_reachable_ = false; | 98 bit_field_ = IsReachableField::update(bit_field_, false); |
99 } | 99 } |
100 | 100 |
101 | 101 |
102 void HBasicBlock::AttachLoopInformation() { | 102 void HBasicBlock::AttachLoopInformation() { |
103 DCHECK(!IsLoopHeader()); | 103 DCHECK(!IsLoopHeader()); |
104 loop_information_ = new(zone()) HLoopInformation(this, zone()); | 104 loop_information_ = new(zone()) HLoopInformation(this, zone()); |
105 } | 105 } |
106 | 106 |
107 | 107 |
108 void HBasicBlock::DetachLoopInformation() { | 108 void HBasicBlock::DetachLoopInformation() { |
(...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
741 if (IsConstant1(constant)) return true; | 741 if (IsConstant1(constant)) return true; |
742 if (IsConstantMinus1(constant)) return true; | 742 if (IsConstantMinus1(constant)) return true; |
743 if (IsConstantTrue(constant)) return true; | 743 if (IsConstantTrue(constant)) return true; |
744 if (IsConstantFalse(constant)) return true; | 744 if (IsConstantFalse(constant)) return true; |
745 if (IsConstantHole(constant)) return true; | 745 if (IsConstantHole(constant)) return true; |
746 if (IsConstantNull(constant)) return true; | 746 if (IsConstantNull(constant)) return true; |
747 return false; | 747 return false; |
748 } | 748 } |
749 | 749 |
750 | 750 |
751 HGraphBuilder::IfBuilder::IfBuilder() : builder_(NULL), needs_compare_(true) {} | 751 HGraphBuilder::IfBuilder::IfBuilder() |
| 752 : builder_(NULL), bit_field_(NeedsCompareField::encode(true)) {} |
752 | 753 |
753 | 754 |
754 HGraphBuilder::IfBuilder::IfBuilder(HGraphBuilder* builder) | 755 HGraphBuilder::IfBuilder::IfBuilder(HGraphBuilder* builder) |
755 : needs_compare_(true) { | 756 : bit_field_(NeedsCompareField::encode(true)) { |
756 Initialize(builder); | 757 Initialize(builder); |
757 } | 758 } |
758 | 759 |
759 | 760 |
760 HGraphBuilder::IfBuilder::IfBuilder(HGraphBuilder* builder, | 761 HGraphBuilder::IfBuilder::IfBuilder(HGraphBuilder* builder, |
761 HIfContinuation* continuation) | 762 HIfContinuation* continuation) |
762 : needs_compare_(false), first_true_block_(NULL), first_false_block_(NULL) { | 763 : bit_field_(NeedsCompareField::encode(false)), |
| 764 first_true_block_(NULL), |
| 765 first_false_block_(NULL) { |
763 InitializeDontCreateBlocks(builder); | 766 InitializeDontCreateBlocks(builder); |
764 continuation->Continue(&first_true_block_, &first_false_block_); | 767 continuation->Continue(&first_true_block_, &first_false_block_); |
765 } | 768 } |
766 | 769 |
767 | 770 |
768 void HGraphBuilder::IfBuilder::InitializeDontCreateBlocks( | 771 void HGraphBuilder::IfBuilder::InitializeDontCreateBlocks( |
769 HGraphBuilder* builder) { | 772 HGraphBuilder* builder) { |
770 builder_ = builder; | 773 builder_ = builder; |
771 finished_ = false; | 774 bool needs_compare = NeedsCompareField::decode(bit_field_); |
772 did_then_ = false; | 775 bit_field_ = FinishedField::encode(false) | DidThenField::encode(false) | |
773 did_else_ = false; | 776 DidElseField::encode(false) | DidElseIfField::encode(false) | |
774 did_else_if_ = false; | 777 DidAndField::encode(false) | DidOrField::encode(false) | |
775 did_and_ = false; | 778 CapturedField::encode(false) | |
776 did_or_ = false; | 779 NeedsCompareField::encode(needs_compare) | |
777 captured_ = false; | 780 PendingMergeBlockField::encode(false); |
778 pending_merge_block_ = false; | |
779 split_edge_merge_block_ = NULL; | 781 split_edge_merge_block_ = NULL; |
780 merge_at_join_blocks_ = NULL; | 782 merge_at_join_blocks_ = NULL; |
781 normal_merge_at_join_block_count_ = 0; | 783 normal_merge_at_join_block_count_ = 0; |
782 deopt_merge_at_join_block_count_ = 0; | 784 deopt_merge_at_join_block_count_ = 0; |
783 } | 785 } |
784 | 786 |
785 | 787 |
786 void HGraphBuilder::IfBuilder::Initialize(HGraphBuilder* builder) { | 788 void HGraphBuilder::IfBuilder::Initialize(HGraphBuilder* builder) { |
787 InitializeDontCreateBlocks(builder); | 789 InitializeDontCreateBlocks(builder); |
788 HEnvironment* env = builder->environment(); | 790 HEnvironment* env = builder->environment(); |
789 first_true_block_ = builder->CreateBasicBlock(env->Copy()); | 791 first_true_block_ = builder->CreateBasicBlock(env->Copy()); |
790 first_false_block_ = builder->CreateBasicBlock(env->Copy()); | 792 first_false_block_ = builder->CreateBasicBlock(env->Copy()); |
791 } | 793 } |
792 | 794 |
793 | 795 |
794 HControlInstruction* HGraphBuilder::IfBuilder::AddCompare( | 796 HControlInstruction* HGraphBuilder::IfBuilder::AddCompare( |
795 HControlInstruction* compare) { | 797 HControlInstruction* compare) { |
796 DCHECK(did_then_ == did_else_); | 798 DCHECK(did_then() == did_else()); |
797 if (did_else_) { | 799 if (did_else()) { |
798 // Handle if-then-elseif | 800 // Handle if-then-elseif |
799 did_else_if_ = true; | 801 set_did_else_if(true); |
800 did_else_ = false; | 802 set_did_else(false); |
801 did_then_ = false; | 803 set_did_then(false); |
802 did_and_ = false; | 804 set_did_and(false); |
803 did_or_ = false; | 805 set_did_or(false); |
804 pending_merge_block_ = false; | 806 set_pending_merge_block(false); |
805 split_edge_merge_block_ = NULL; | 807 split_edge_merge_block_ = NULL; |
806 HEnvironment* env = builder()->environment(); | 808 HEnvironment* env = builder()->environment(); |
807 first_true_block_ = builder()->CreateBasicBlock(env->Copy()); | 809 first_true_block_ = builder()->CreateBasicBlock(env->Copy()); |
808 first_false_block_ = builder()->CreateBasicBlock(env->Copy()); | 810 first_false_block_ = builder()->CreateBasicBlock(env->Copy()); |
809 } | 811 } |
810 if (split_edge_merge_block_ != NULL) { | 812 if (split_edge_merge_block_ != NULL) { |
811 HEnvironment* env = first_false_block_->last_environment(); | 813 HEnvironment* env = first_false_block_->last_environment(); |
812 HBasicBlock* split_edge = builder()->CreateBasicBlock(env->Copy()); | 814 HBasicBlock* split_edge = builder()->CreateBasicBlock(env->Copy()); |
813 if (did_or_) { | 815 if (did_or()) { |
814 compare->SetSuccessorAt(0, split_edge); | 816 compare->SetSuccessorAt(0, split_edge); |
815 compare->SetSuccessorAt(1, first_false_block_); | 817 compare->SetSuccessorAt(1, first_false_block_); |
816 } else { | 818 } else { |
817 compare->SetSuccessorAt(0, first_true_block_); | 819 compare->SetSuccessorAt(0, first_true_block_); |
818 compare->SetSuccessorAt(1, split_edge); | 820 compare->SetSuccessorAt(1, split_edge); |
819 } | 821 } |
820 builder()->GotoNoSimulate(split_edge, split_edge_merge_block_); | 822 builder()->GotoNoSimulate(split_edge, split_edge_merge_block_); |
821 } else { | 823 } else { |
822 compare->SetSuccessorAt(0, first_true_block_); | 824 compare->SetSuccessorAt(0, first_true_block_); |
823 compare->SetSuccessorAt(1, first_false_block_); | 825 compare->SetSuccessorAt(1, first_false_block_); |
824 } | 826 } |
825 builder()->FinishCurrentBlock(compare); | 827 builder()->FinishCurrentBlock(compare); |
826 needs_compare_ = false; | 828 set_needs_compare(false); |
827 return compare; | 829 return compare; |
828 } | 830 } |
829 | 831 |
830 | 832 |
831 void HGraphBuilder::IfBuilder::Or() { | 833 void HGraphBuilder::IfBuilder::Or() { |
832 DCHECK(!needs_compare_); | 834 DCHECK(!needs_compare()); |
833 DCHECK(!did_and_); | 835 DCHECK(!did_and()); |
834 did_or_ = true; | 836 set_did_or(true); |
835 HEnvironment* env = first_false_block_->last_environment(); | 837 HEnvironment* env = first_false_block_->last_environment(); |
836 if (split_edge_merge_block_ == NULL) { | 838 if (split_edge_merge_block_ == NULL) { |
837 split_edge_merge_block_ = builder()->CreateBasicBlock(env->Copy()); | 839 split_edge_merge_block_ = builder()->CreateBasicBlock(env->Copy()); |
838 builder()->GotoNoSimulate(first_true_block_, split_edge_merge_block_); | 840 builder()->GotoNoSimulate(first_true_block_, split_edge_merge_block_); |
839 first_true_block_ = split_edge_merge_block_; | 841 first_true_block_ = split_edge_merge_block_; |
840 } | 842 } |
841 builder()->set_current_block(first_false_block_); | 843 builder()->set_current_block(first_false_block_); |
842 first_false_block_ = builder()->CreateBasicBlock(env->Copy()); | 844 first_false_block_ = builder()->CreateBasicBlock(env->Copy()); |
843 } | 845 } |
844 | 846 |
845 | 847 |
846 void HGraphBuilder::IfBuilder::And() { | 848 void HGraphBuilder::IfBuilder::And() { |
847 DCHECK(!needs_compare_); | 849 DCHECK(!needs_compare()); |
848 DCHECK(!did_or_); | 850 DCHECK(!did_or()); |
849 did_and_ = true; | 851 set_did_and(true); |
850 HEnvironment* env = first_false_block_->last_environment(); | 852 HEnvironment* env = first_false_block_->last_environment(); |
851 if (split_edge_merge_block_ == NULL) { | 853 if (split_edge_merge_block_ == NULL) { |
852 split_edge_merge_block_ = builder()->CreateBasicBlock(env->Copy()); | 854 split_edge_merge_block_ = builder()->CreateBasicBlock(env->Copy()); |
853 builder()->GotoNoSimulate(first_false_block_, split_edge_merge_block_); | 855 builder()->GotoNoSimulate(first_false_block_, split_edge_merge_block_); |
854 first_false_block_ = split_edge_merge_block_; | 856 first_false_block_ = split_edge_merge_block_; |
855 } | 857 } |
856 builder()->set_current_block(first_true_block_); | 858 builder()->set_current_block(first_true_block_); |
857 first_true_block_ = builder()->CreateBasicBlock(env->Copy()); | 859 first_true_block_ = builder()->CreateBasicBlock(env->Copy()); |
858 } | 860 } |
859 | 861 |
860 | 862 |
861 void HGraphBuilder::IfBuilder::CaptureContinuation( | 863 void HGraphBuilder::IfBuilder::CaptureContinuation( |
862 HIfContinuation* continuation) { | 864 HIfContinuation* continuation) { |
863 DCHECK(!did_else_if_); | 865 DCHECK(!did_else_if()); |
864 DCHECK(!finished_); | 866 DCHECK(!finished()); |
865 DCHECK(!captured_); | 867 DCHECK(!captured()); |
866 | 868 |
867 HBasicBlock* true_block = NULL; | 869 HBasicBlock* true_block = NULL; |
868 HBasicBlock* false_block = NULL; | 870 HBasicBlock* false_block = NULL; |
869 Finish(&true_block, &false_block); | 871 Finish(&true_block, &false_block); |
870 DCHECK(true_block != NULL); | 872 DCHECK(true_block != NULL); |
871 DCHECK(false_block != NULL); | 873 DCHECK(false_block != NULL); |
872 continuation->Capture(true_block, false_block); | 874 continuation->Capture(true_block, false_block); |
873 captured_ = true; | 875 set_captured(); |
874 builder()->set_current_block(NULL); | 876 builder()->set_current_block(NULL); |
875 End(); | 877 End(); |
876 } | 878 } |
877 | 879 |
878 | 880 |
879 void HGraphBuilder::IfBuilder::JoinContinuation(HIfContinuation* continuation) { | 881 void HGraphBuilder::IfBuilder::JoinContinuation(HIfContinuation* continuation) { |
880 DCHECK(!did_else_if_); | 882 DCHECK(!did_else_if()); |
881 DCHECK(!finished_); | 883 DCHECK(!finished()); |
882 DCHECK(!captured_); | 884 DCHECK(!captured()); |
883 HBasicBlock* true_block = NULL; | 885 HBasicBlock* true_block = NULL; |
884 HBasicBlock* false_block = NULL; | 886 HBasicBlock* false_block = NULL; |
885 Finish(&true_block, &false_block); | 887 Finish(&true_block, &false_block); |
886 merge_at_join_blocks_ = NULL; | 888 merge_at_join_blocks_ = NULL; |
887 if (true_block != NULL && !true_block->IsFinished()) { | 889 if (true_block != NULL && !true_block->IsFinished()) { |
888 DCHECK(continuation->IsTrueReachable()); | 890 DCHECK(continuation->IsTrueReachable()); |
889 builder()->GotoNoSimulate(true_block, continuation->true_branch()); | 891 builder()->GotoNoSimulate(true_block, continuation->true_branch()); |
890 } | 892 } |
891 if (false_block != NULL && !false_block->IsFinished()) { | 893 if (false_block != NULL && !false_block->IsFinished()) { |
892 DCHECK(continuation->IsFalseReachable()); | 894 DCHECK(continuation->IsFalseReachable()); |
893 builder()->GotoNoSimulate(false_block, continuation->false_branch()); | 895 builder()->GotoNoSimulate(false_block, continuation->false_branch()); |
894 } | 896 } |
895 captured_ = true; | 897 set_captured(); |
896 End(); | 898 End(); |
897 } | 899 } |
898 | 900 |
899 | 901 |
900 void HGraphBuilder::IfBuilder::Then() { | 902 void HGraphBuilder::IfBuilder::Then() { |
901 DCHECK(!captured_); | 903 DCHECK(!captured()); |
902 DCHECK(!finished_); | 904 DCHECK(!finished()); |
903 did_then_ = true; | 905 set_did_then(true); |
904 if (needs_compare_) { | 906 if (needs_compare()) { |
905 // Handle if's without any expressions, they jump directly to the "else" | 907 // Handle if's without any expressions, they jump directly to the "else" |
906 // branch. However, we must pretend that the "then" branch is reachable, | 908 // branch. However, we must pretend that the "then" branch is reachable, |
907 // so that the graph builder visits it and sees any live range extending | 909 // so that the graph builder visits it and sees any live range extending |
908 // constructs within it. | 910 // constructs within it. |
909 HConstant* constant_false = builder()->graph()->GetConstantFalse(); | 911 HConstant* constant_false = builder()->graph()->GetConstantFalse(); |
910 ToBooleanStub::Types boolean_type = ToBooleanStub::Types(); | 912 ToBooleanStub::Types boolean_type = ToBooleanStub::Types(); |
911 boolean_type.Add(ToBooleanStub::BOOLEAN); | 913 boolean_type.Add(ToBooleanStub::BOOLEAN); |
912 HBranch* branch = builder()->New<HBranch>( | 914 HBranch* branch = builder()->New<HBranch>( |
913 constant_false, boolean_type, first_true_block_, first_false_block_); | 915 constant_false, boolean_type, first_true_block_, first_false_block_); |
914 builder()->FinishCurrentBlock(branch); | 916 builder()->FinishCurrentBlock(branch); |
915 } | 917 } |
916 builder()->set_current_block(first_true_block_); | 918 builder()->set_current_block(first_true_block_); |
917 pending_merge_block_ = true; | 919 set_pending_merge_block(true); |
918 } | 920 } |
919 | 921 |
920 | 922 |
921 void HGraphBuilder::IfBuilder::Else() { | 923 void HGraphBuilder::IfBuilder::Else() { |
922 DCHECK(did_then_); | 924 DCHECK(did_then()); |
923 DCHECK(!captured_); | 925 DCHECK(!captured()); |
924 DCHECK(!finished_); | 926 DCHECK(!finished()); |
925 AddMergeAtJoinBlock(false); | 927 AddMergeAtJoinBlock(false); |
926 builder()->set_current_block(first_false_block_); | 928 builder()->set_current_block(first_false_block_); |
927 pending_merge_block_ = true; | 929 set_pending_merge_block(true); |
928 did_else_ = true; | 930 set_did_else(true); |
929 } | 931 } |
930 | 932 |
931 | 933 |
932 void HGraphBuilder::IfBuilder::Deopt(const char* reason) { | 934 void HGraphBuilder::IfBuilder::Deopt(const char* reason) { |
933 DCHECK(did_then_); | 935 DCHECK(did_then()); |
934 builder()->Add<HDeoptimize>(reason, Deoptimizer::EAGER); | 936 builder()->Add<HDeoptimize>(reason, Deoptimizer::EAGER); |
935 AddMergeAtJoinBlock(true); | 937 AddMergeAtJoinBlock(true); |
936 } | 938 } |
937 | 939 |
938 | 940 |
939 void HGraphBuilder::IfBuilder::Return(HValue* value) { | 941 void HGraphBuilder::IfBuilder::Return(HValue* value) { |
940 HValue* parameter_count = builder()->graph()->GetConstantMinus1(); | 942 HValue* parameter_count = builder()->graph()->GetConstantMinus1(); |
941 builder()->FinishExitCurrentBlock( | 943 builder()->FinishExitCurrentBlock( |
942 builder()->New<HReturn>(value, parameter_count)); | 944 builder()->New<HReturn>(value, parameter_count)); |
943 AddMergeAtJoinBlock(false); | 945 AddMergeAtJoinBlock(false); |
944 } | 946 } |
945 | 947 |
946 | 948 |
947 void HGraphBuilder::IfBuilder::AddMergeAtJoinBlock(bool deopt) { | 949 void HGraphBuilder::IfBuilder::AddMergeAtJoinBlock(bool deopt) { |
948 if (!pending_merge_block_) return; | 950 if (!pending_merge_block()) return; |
949 HBasicBlock* block = builder()->current_block(); | 951 HBasicBlock* block = builder()->current_block(); |
950 DCHECK(block == NULL || !block->IsFinished()); | 952 DCHECK(block == NULL || !block->IsFinished()); |
951 MergeAtJoinBlock* record = new (builder()->zone()) | 953 MergeAtJoinBlock* record = new (builder()->zone()) |
952 MergeAtJoinBlock(block, deopt, merge_at_join_blocks_); | 954 MergeAtJoinBlock(block, deopt, merge_at_join_blocks_); |
953 merge_at_join_blocks_ = record; | 955 merge_at_join_blocks_ = record; |
954 if (block != NULL) { | 956 if (block != NULL) { |
955 DCHECK(block->end() == NULL); | 957 DCHECK(block->end() == NULL); |
956 if (deopt) { | 958 if (deopt) { |
957 normal_merge_at_join_block_count_++; | 959 normal_merge_at_join_block_count_++; |
958 } else { | 960 } else { |
959 deopt_merge_at_join_block_count_++; | 961 deopt_merge_at_join_block_count_++; |
960 } | 962 } |
961 } | 963 } |
962 builder()->set_current_block(NULL); | 964 builder()->set_current_block(NULL); |
963 pending_merge_block_ = false; | 965 set_pending_merge_block(false); |
964 } | 966 } |
965 | 967 |
966 | 968 |
967 void HGraphBuilder::IfBuilder::Finish() { | 969 void HGraphBuilder::IfBuilder::Finish() { |
968 DCHECK(!finished_); | 970 DCHECK(!finished()); |
969 if (!did_then_) { | 971 if (!did_then()) { |
970 Then(); | 972 Then(); |
971 } | 973 } |
972 AddMergeAtJoinBlock(false); | 974 AddMergeAtJoinBlock(false); |
973 if (!did_else_) { | 975 if (!did_else()) { |
974 Else(); | 976 Else(); |
975 AddMergeAtJoinBlock(false); | 977 AddMergeAtJoinBlock(false); |
976 } | 978 } |
977 finished_ = true; | 979 set_finished(); |
978 } | 980 } |
979 | 981 |
980 | 982 |
981 void HGraphBuilder::IfBuilder::Finish(HBasicBlock** then_continuation, | 983 void HGraphBuilder::IfBuilder::Finish(HBasicBlock** then_continuation, |
982 HBasicBlock** else_continuation) { | 984 HBasicBlock** else_continuation) { |
983 Finish(); | 985 Finish(); |
984 | 986 |
985 MergeAtJoinBlock* else_record = merge_at_join_blocks_; | 987 MergeAtJoinBlock* else_record = merge_at_join_blocks_; |
986 if (else_continuation != NULL) { | 988 if (else_continuation != NULL) { |
987 *else_continuation = else_record->block_; | 989 *else_continuation = else_record->block_; |
988 } | 990 } |
989 MergeAtJoinBlock* then_record = else_record->next_; | 991 MergeAtJoinBlock* then_record = else_record->next_; |
990 if (then_continuation != NULL) { | 992 if (then_continuation != NULL) { |
991 *then_continuation = then_record->block_; | 993 *then_continuation = then_record->block_; |
992 } | 994 } |
993 DCHECK(then_record->next_ == NULL); | 995 DCHECK(then_record->next_ == NULL); |
994 } | 996 } |
995 | 997 |
996 | 998 |
997 void HGraphBuilder::IfBuilder::End() { | 999 void HGraphBuilder::IfBuilder::End() { |
998 if (captured_) return; | 1000 if (captured()) return; |
999 Finish(); | 1001 Finish(); |
1000 | 1002 |
1001 int total_merged_blocks = normal_merge_at_join_block_count_ + | 1003 int total_merged_blocks = normal_merge_at_join_block_count_ + |
1002 deopt_merge_at_join_block_count_; | 1004 deopt_merge_at_join_block_count_; |
1003 DCHECK(total_merged_blocks >= 1); | 1005 DCHECK(total_merged_blocks >= 1); |
1004 HBasicBlock* merge_block = | 1006 HBasicBlock* merge_block = |
1005 total_merged_blocks == 1 ? NULL : builder()->graph()->CreateBasicBlock(); | 1007 total_merged_blocks == 1 ? NULL : builder()->graph()->CreateBasicBlock(); |
1006 | 1008 |
1007 // Merge non-deopt blocks first to ensure environment has right size for | 1009 // Merge non-deopt blocks first to ensure environment has right size for |
1008 // padding. | 1010 // padding. |
(...skipping 11663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12672 if (ShouldProduceTraceOutput()) { | 12674 if (ShouldProduceTraceOutput()) { |
12673 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 12675 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
12674 } | 12676 } |
12675 | 12677 |
12676 #ifdef DEBUG | 12678 #ifdef DEBUG |
12677 graph_->Verify(false); // No full verify. | 12679 graph_->Verify(false); // No full verify. |
12678 #endif | 12680 #endif |
12679 } | 12681 } |
12680 | 12682 |
12681 } } // namespace v8::internal | 12683 } } // namespace v8::internal |
OLD | NEW |