OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 25 matching lines...) Expand all Loading... |
36 #include "hydrogen-bce.h" | 36 #include "hydrogen-bce.h" |
37 #include "hydrogen-bch.h" | 37 #include "hydrogen-bch.h" |
38 #include "hydrogen-canonicalize.h" | 38 #include "hydrogen-canonicalize.h" |
39 #include "hydrogen-dce.h" | 39 #include "hydrogen-dce.h" |
40 #include "hydrogen-dehoist.h" | 40 #include "hydrogen-dehoist.h" |
41 #include "hydrogen-deoptimizing-mark.h" | 41 #include "hydrogen-deoptimizing-mark.h" |
42 #include "hydrogen-environment-liveness.h" | 42 #include "hydrogen-environment-liveness.h" |
43 #include "hydrogen-escape-analysis.h" | 43 #include "hydrogen-escape-analysis.h" |
44 #include "hydrogen-infer-representation.h" | 44 #include "hydrogen-infer-representation.h" |
45 #include "hydrogen-infer-types.h" | 45 #include "hydrogen-infer-types.h" |
46 #include "hydrogen-load-elimination.h" | |
47 #include "hydrogen-gvn.h" | 46 #include "hydrogen-gvn.h" |
48 #include "hydrogen-mark-deoptimize.h" | 47 #include "hydrogen-mark-deoptimize.h" |
49 #include "hydrogen-minus-zero.h" | 48 #include "hydrogen-minus-zero.h" |
50 #include "hydrogen-osr.h" | 49 #include "hydrogen-osr.h" |
51 #include "hydrogen-range-analysis.h" | 50 #include "hydrogen-range-analysis.h" |
52 #include "hydrogen-redundant-phi.h" | 51 #include "hydrogen-redundant-phi.h" |
53 #include "hydrogen-removable-simulates.h" | 52 #include "hydrogen-removable-simulates.h" |
54 #include "hydrogen-representation-changes.h" | 53 #include "hydrogen-representation-changes.h" |
55 #include "hydrogen-sce.h" | 54 #include "hydrogen-sce.h" |
56 #include "hydrogen-uint32-analysis.h" | 55 #include "hydrogen-uint32-analysis.h" |
(...skipping 969 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1026 HInstruction* HGraphBuilder::AddInstruction(HInstruction* instr) { | 1025 HInstruction* HGraphBuilder::AddInstruction(HInstruction* instr) { |
1027 ASSERT(current_block() != NULL); | 1026 ASSERT(current_block() != NULL); |
1028 current_block()->AddInstruction(instr); | 1027 current_block()->AddInstruction(instr); |
1029 if (graph()->IsInsideNoSideEffectsScope()) { | 1028 if (graph()->IsInsideNoSideEffectsScope()) { |
1030 instr->SetFlag(HValue::kHasNoObservableSideEffects); | 1029 instr->SetFlag(HValue::kHasNoObservableSideEffects); |
1031 } | 1030 } |
1032 return instr; | 1031 return instr; |
1033 } | 1032 } |
1034 | 1033 |
1035 | 1034 |
1036 void HGraphBuilder::AddIncrementCounter(StatsCounter* counter) { | 1035 void HGraphBuilder::AddIncrementCounter(StatsCounter* counter, |
| 1036 HValue* context) { |
1037 if (FLAG_native_code_counters && counter->Enabled()) { | 1037 if (FLAG_native_code_counters && counter->Enabled()) { |
1038 HValue* reference = Add<HConstant>(ExternalReference(counter)); | 1038 HValue* reference = Add<HConstant>(ExternalReference(counter)); |
1039 HValue* old_value = Add<HLoadNamedField>(reference, | 1039 HValue* old_value = Add<HLoadNamedField>(reference, |
1040 HObjectAccess::ForCounter()); | 1040 HObjectAccess::ForCounter()); |
1041 HValue* new_value = Add<HAdd>(old_value, graph()->GetConstant1()); | 1041 HValue* new_value = Add<HAdd>(old_value, graph()->GetConstant1()); |
1042 new_value->ClearFlag(HValue::kCanOverflow); // Ignore counter overflow | 1042 new_value->ClearFlag(HValue::kCanOverflow); // Ignore counter overflow |
1043 Add<HStoreNamedField>(reference, HObjectAccess::ForCounter(), | 1043 Add<HStoreNamedField>(reference, HObjectAccess::ForCounter(), |
1044 new_value); | 1044 new_value); |
1045 } | 1045 } |
1046 } | 1046 } |
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1817 } | 1817 } |
1818 } | 1818 } |
1819 | 1819 |
1820 if_nil.CaptureContinuation(continuation); | 1820 if_nil.CaptureContinuation(continuation); |
1821 } | 1821 } |
1822 | 1822 |
1823 | 1823 |
1824 HValue* HGraphBuilder::BuildCreateAllocationMemento(HValue* previous_object, | 1824 HValue* HGraphBuilder::BuildCreateAllocationMemento(HValue* previous_object, |
1825 int previous_object_size, | 1825 int previous_object_size, |
1826 HValue* alloc_site) { | 1826 HValue* alloc_site) { |
1827 ASSERT(alloc_site != NULL); | 1827 // TODO(mvstanton): ASSERT altered to CHECK to diagnose chromium bug 284577 |
| 1828 CHECK(alloc_site != NULL); |
1828 HInnerAllocatedObject* alloc_memento = Add<HInnerAllocatedObject>( | 1829 HInnerAllocatedObject* alloc_memento = Add<HInnerAllocatedObject>( |
1829 previous_object, previous_object_size); | 1830 previous_object, previous_object_size); |
1830 Handle<Map> alloc_memento_map( | 1831 Handle<Map> alloc_memento_map( |
1831 isolate()->heap()->allocation_memento_map()); | 1832 isolate()->heap()->allocation_memento_map()); |
1832 AddStoreMapConstant(alloc_memento, alloc_memento_map); | 1833 AddStoreMapConstant(alloc_memento, alloc_memento_map); |
1833 HObjectAccess access = HObjectAccess::ForAllocationMementoSite(); | 1834 HObjectAccess access = HObjectAccess::ForAllocationMementoSite(); |
1834 Add<HStoreNamedField>(alloc_memento, access, alloc_site); | 1835 Add<HStoreNamedField>(alloc_memento, access, alloc_site); |
1835 return alloc_memento; | 1836 return alloc_memento; |
1836 } | 1837 } |
1837 | 1838 |
(...skipping 1127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2965 if (!CheckArgumentsPhiUses()) { | 2966 if (!CheckArgumentsPhiUses()) { |
2966 *bailout_reason = kUnsupportedPhiUseOfArguments; | 2967 *bailout_reason = kUnsupportedPhiUseOfArguments; |
2967 return false; | 2968 return false; |
2968 } | 2969 } |
2969 | 2970 |
2970 // Remove dead code and phis | 2971 // Remove dead code and phis |
2971 if (FLAG_dead_code_elimination) Run<HDeadCodeEliminationPhase>(); | 2972 if (FLAG_dead_code_elimination) Run<HDeadCodeEliminationPhase>(); |
2972 | 2973 |
2973 if (FLAG_use_escape_analysis) Run<HEscapeAnalysisPhase>(); | 2974 if (FLAG_use_escape_analysis) Run<HEscapeAnalysisPhase>(); |
2974 | 2975 |
2975 if (FLAG_load_elimination) Run<HLoadEliminationPhase>(); | |
2976 | |
2977 CollectPhis(); | 2976 CollectPhis(); |
2978 | 2977 |
2979 if (has_osr()) osr()->FinishOsrValues(); | 2978 if (has_osr()) osr()->FinishOsrValues(); |
2980 | 2979 |
2981 Run<HInferRepresentationPhase>(); | 2980 Run<HInferRepresentationPhase>(); |
2982 | 2981 |
2983 // Remove HSimulate instructions that have turned out not to be needed | 2982 // Remove HSimulate instructions that have turned out not to be needed |
2984 // after all by folding them into the following HSimulate. | 2983 // after all by folding them into the following HSimulate. |
2985 // This must happen after inferring representations. | 2984 // This must happen after inferring representations. |
2986 Run<HMergeRemovableSimulatesPhase>(); | 2985 Run<HMergeRemovableSimulatesPhase>(); |
(...skipping 1179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4166 HInstruction* literal; | 4165 HInstruction* literal; |
4167 | 4166 |
4168 // Check whether to use fast or slow deep-copying for boilerplate. | 4167 // Check whether to use fast or slow deep-copying for boilerplate. |
4169 int max_properties = kMaxFastLiteralProperties; | 4168 int max_properties = kMaxFastLiteralProperties; |
4170 Handle<Object> boilerplate(closure->literals()->get( | 4169 Handle<Object> boilerplate(closure->literals()->get( |
4171 expr->literal_index()), isolate()); | 4170 expr->literal_index()), isolate()); |
4172 if (boilerplate->IsJSObject() && | 4171 if (boilerplate->IsJSObject() && |
4173 IsFastLiteral(Handle<JSObject>::cast(boilerplate), | 4172 IsFastLiteral(Handle<JSObject>::cast(boilerplate), |
4174 kMaxFastLiteralDepth, | 4173 kMaxFastLiteralDepth, |
4175 &max_properties)) { | 4174 &max_properties)) { |
4176 Handle<JSObject> boilerplate_object = Handle<JSObject>::cast(boilerplate); | 4175 Handle<JSObject> boilerplate_object = |
| 4176 Handle<JSObject>::cast(boilerplate); |
4177 | 4177 |
4178 literal = BuildFastLiteral(boilerplate_object, | 4178 literal = BuildFastLiteral(boilerplate_object, |
4179 Handle<Object>::null(), | 4179 Handle<Object>::null(), |
4180 DONT_TRACK_ALLOCATION_SITE); | 4180 DONT_TRACK_ALLOCATION_SITE); |
4181 } else { | 4181 } else { |
4182 NoObservableSideEffectsScope no_effects(this); | 4182 NoObservableSideEffectsScope no_effects(this); |
4183 Handle<FixedArray> closure_literals(closure->literals(), isolate()); | 4183 Handle<FixedArray> closure_literals(closure->literals(), isolate()); |
4184 Handle<FixedArray> constant_properties = expr->constant_properties(); | 4184 Handle<FixedArray> constant_properties = expr->constant_properties(); |
4185 int literal_index = expr->literal_index(); | 4185 int literal_index = expr->literal_index(); |
4186 int flags = expr->fast_elements() | 4186 int flags = expr->fast_elements() |
(...skipping 942 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5129 | 5129 |
5130 case Variable::LOOKUP: | 5130 case Variable::LOOKUP: |
5131 return Bailout(kCompoundAssignmentToLookupSlot); | 5131 return Bailout(kCompoundAssignmentToLookupSlot); |
5132 } | 5132 } |
5133 return ast_context()->ReturnValue(Pop()); | 5133 return ast_context()->ReturnValue(Pop()); |
5134 | 5134 |
5135 } else if (prop != NULL) { | 5135 } else if (prop != NULL) { |
5136 CHECK_ALIVE(VisitForValue(prop->obj())); | 5136 CHECK_ALIVE(VisitForValue(prop->obj())); |
5137 HValue* object = Top(); | 5137 HValue* object = Top(); |
5138 HValue* key = NULL; | 5138 HValue* key = NULL; |
5139 if ((!prop->IsFunctionPrototype() && !prop->key()->IsPropertyName()) || | 5139 if ((!prop->IsStringLength() && |
| 5140 !prop->IsFunctionPrototype() && |
| 5141 !prop->key()->IsPropertyName()) || |
5140 prop->IsStringAccess()) { | 5142 prop->IsStringAccess()) { |
5141 CHECK_ALIVE(VisitForValue(prop->key())); | 5143 CHECK_ALIVE(VisitForValue(prop->key())); |
5142 key = Top(); | 5144 key = Top(); |
5143 } | 5145 } |
5144 | 5146 |
5145 CHECK_ALIVE(PushLoad(prop, object, key, expr->position())); | 5147 CHECK_ALIVE(PushLoad(prop, object, key, expr->position())); |
5146 | 5148 |
5147 CHECK_ALIVE(VisitForValue(expr->value())); | 5149 CHECK_ALIVE(VisitForValue(expr->value())); |
5148 HValue* right = Pop(); | 5150 HValue* right = Pop(); |
5149 HValue* left = Pop(); | 5151 HValue* left = Pop(); |
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5819 HValue* object, | 5821 HValue* object, |
5820 HValue* key, | 5822 HValue* key, |
5821 int position) { | 5823 int position) { |
5822 ValueContext for_value(this, ARGUMENTS_NOT_ALLOWED); | 5824 ValueContext for_value(this, ARGUMENTS_NOT_ALLOWED); |
5823 Push(object); | 5825 Push(object); |
5824 if (key != NULL) Push(key); | 5826 if (key != NULL) Push(key); |
5825 BuildLoad(expr, position, expr->LoadId()); | 5827 BuildLoad(expr, position, expr->LoadId()); |
5826 } | 5828 } |
5827 | 5829 |
5828 | 5830 |
5829 static bool AreStringTypes(SmallMapList* types) { | |
5830 if (types == NULL || types->length() == 0) return false; | |
5831 for (int i = 0; i < types->length(); i++) { | |
5832 if (types->at(i)->instance_type() >= FIRST_NONSTRING_TYPE) return false; | |
5833 } | |
5834 return true; | |
5835 } | |
5836 | |
5837 | |
5838 void HOptimizedGraphBuilder::BuildLoad(Property* expr, | 5831 void HOptimizedGraphBuilder::BuildLoad(Property* expr, |
5839 int position, | 5832 int position, |
5840 BailoutId ast_id) { | 5833 BailoutId ast_id) { |
5841 HInstruction* instr = NULL; | 5834 HInstruction* instr = NULL; |
5842 if (expr->IsStringAccess()) { | 5835 if (expr->IsStringLength()) { |
| 5836 HValue* string = Pop(); |
| 5837 BuildCheckHeapObject(string); |
| 5838 HInstruction* checkstring = |
| 5839 AddInstruction(HCheckInstanceType::NewIsString(string, zone())); |
| 5840 instr = BuildLoadStringLength(string, checkstring); |
| 5841 } else if (expr->IsStringAccess()) { |
5843 HValue* index = Pop(); | 5842 HValue* index = Pop(); |
5844 HValue* string = Pop(); | 5843 HValue* string = Pop(); |
5845 HValue* context = environment()->context(); | 5844 HValue* context = environment()->context(); |
5846 HInstruction* char_code = | 5845 HInstruction* char_code = |
5847 BuildStringCharCodeAt(string, index); | 5846 BuildStringCharCodeAt(string, index); |
5848 AddInstruction(char_code); | 5847 AddInstruction(char_code); |
5849 instr = HStringCharFromCode::New(zone(), context, char_code); | 5848 instr = HStringCharFromCode::New(zone(), context, char_code); |
5850 | 5849 |
5851 } else if (expr->IsFunctionPrototype()) { | 5850 } else if (expr->IsFunctionPrototype()) { |
5852 HValue* function = Pop(); | 5851 HValue* function = Pop(); |
(...skipping 15 matching lines...) Expand all Loading... |
5868 AddCheckConstantFunction(holder, Top(), map); | 5867 AddCheckConstantFunction(holder, Top(), map); |
5869 if (FLAG_inline_accessors && | 5868 if (FLAG_inline_accessors && |
5870 TryInlineGetter(getter, ast_id, expr->LoadId())) { | 5869 TryInlineGetter(getter, ast_id, expr->LoadId())) { |
5871 return; | 5870 return; |
5872 } | 5871 } |
5873 Add<HPushArgument>(Pop()); | 5872 Add<HPushArgument>(Pop()); |
5874 instr = new(zone()) HCallConstantFunction(getter, 1); | 5873 instr = new(zone()) HCallConstantFunction(getter, 1); |
5875 } else { | 5874 } else { |
5876 instr = BuildLoadNamedMonomorphic(Pop(), name, map); | 5875 instr = BuildLoadNamedMonomorphic(Pop(), name, map); |
5877 } | 5876 } |
5878 } else if (AreStringTypes(types) && | |
5879 name->Equals(isolate()->heap()->length_string())) { | |
5880 BuildCheckHeapObject(Pop()); | |
5881 HValue* checked_object = | |
5882 AddInstruction(HCheckInstanceType::NewIsString(object, zone())); | |
5883 instr = BuildLoadStringLength(object, checked_object); | |
5884 } else if (types != NULL && types->length() > 1) { | 5877 } else if (types != NULL && types->length() > 1) { |
5885 return HandlePolymorphicLoadNamedField( | 5878 return HandlePolymorphicLoadNamedField( |
5886 position, ast_id, Pop(), types, name); | 5879 position, ast_id, Pop(), types, name); |
5887 } else { | 5880 } else { |
5888 instr = BuildLoadNamedGeneric(Pop(), name, expr); | 5881 instr = BuildLoadNamedGeneric(Pop(), name, expr); |
5889 } | 5882 } |
5890 | 5883 |
5891 } else { | 5884 } else { |
5892 HValue* key = Pop(); | 5885 HValue* key = Pop(); |
5893 HValue* obj = Pop(); | 5886 HValue* obj = Pop(); |
(...skipping 20 matching lines...) Expand all Loading... |
5914 | 5907 |
5915 | 5908 |
5916 void HOptimizedGraphBuilder::VisitProperty(Property* expr) { | 5909 void HOptimizedGraphBuilder::VisitProperty(Property* expr) { |
5917 ASSERT(!HasStackOverflow()); | 5910 ASSERT(!HasStackOverflow()); |
5918 ASSERT(current_block() != NULL); | 5911 ASSERT(current_block() != NULL); |
5919 ASSERT(current_block()->HasPredecessor()); | 5912 ASSERT(current_block()->HasPredecessor()); |
5920 | 5913 |
5921 if (TryArgumentsAccess(expr)) return; | 5914 if (TryArgumentsAccess(expr)) return; |
5922 | 5915 |
5923 CHECK_ALIVE(VisitForValue(expr->obj())); | 5916 CHECK_ALIVE(VisitForValue(expr->obj())); |
5924 if ((!expr->IsFunctionPrototype() && !expr->key()->IsPropertyName()) || | 5917 if ((!expr->IsStringLength() && |
| 5918 !expr->IsFunctionPrototype() && |
| 5919 !expr->key()->IsPropertyName()) || |
5925 expr->IsStringAccess()) { | 5920 expr->IsStringAccess()) { |
5926 CHECK_ALIVE(VisitForValue(expr->key())); | 5921 CHECK_ALIVE(VisitForValue(expr->key())); |
5927 } | 5922 } |
5928 | 5923 |
5929 BuildLoad(expr, expr->position(), expr->id()); | 5924 BuildLoad(expr, expr->position(), expr->id()); |
5930 } | 5925 } |
5931 | 5926 |
5932 | 5927 |
5933 HInstruction* HGraphBuilder::BuildConstantMapCheck(Handle<JSObject> constant, | 5928 HInstruction* HGraphBuilder::BuildConstantMapCheck(Handle<JSObject> constant, |
5934 CompilationInfo* info) { | 5929 CompilationInfo* info) { |
(...skipping 1630 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7565 } | 7560 } |
7566 | 7561 |
7567 // Argument of the count operation is a property. | 7562 // Argument of the count operation is a property. |
7568 ASSERT(prop != NULL); | 7563 ASSERT(prop != NULL); |
7569 if (returns_original_input) Push(graph()->GetConstantUndefined()); | 7564 if (returns_original_input) Push(graph()->GetConstantUndefined()); |
7570 | 7565 |
7571 CHECK_ALIVE(VisitForValue(prop->obj())); | 7566 CHECK_ALIVE(VisitForValue(prop->obj())); |
7572 HValue* object = Top(); | 7567 HValue* object = Top(); |
7573 | 7568 |
7574 HValue* key = NULL; | 7569 HValue* key = NULL; |
7575 if ((!prop->IsFunctionPrototype() && !prop->key()->IsPropertyName()) || | 7570 if ((!prop->IsStringLength() && |
| 7571 !prop->IsFunctionPrototype() && |
| 7572 !prop->key()->IsPropertyName()) || |
7576 prop->IsStringAccess()) { | 7573 prop->IsStringAccess()) { |
7577 CHECK_ALIVE(VisitForValue(prop->key())); | 7574 CHECK_ALIVE(VisitForValue(prop->key())); |
7578 key = Top(); | 7575 key = Top(); |
7579 } | 7576 } |
7580 | 7577 |
7581 CHECK_ALIVE(PushLoad(prop, object, key, expr->position())); | 7578 CHECK_ALIVE(PushLoad(prop, object, key, expr->position())); |
7582 | 7579 |
7583 after = BuildIncrement(returns_original_input, expr); | 7580 after = BuildIncrement(returns_original_input, expr); |
7584 | 7581 |
7585 if (returns_original_input) { | 7582 if (returns_original_input) { |
(...skipping 29 matching lines...) Expand all Loading... |
7615 BuildCheckHeapObject(string); | 7612 BuildCheckHeapObject(string); |
7616 HValue* checkstring = | 7613 HValue* checkstring = |
7617 AddInstruction(HCheckInstanceType::NewIsString(string, zone())); | 7614 AddInstruction(HCheckInstanceType::NewIsString(string, zone())); |
7618 HInstruction* length = BuildLoadStringLength(string, checkstring); | 7615 HInstruction* length = BuildLoadStringLength(string, checkstring); |
7619 AddInstruction(length); | 7616 AddInstruction(length); |
7620 HInstruction* checked_index = Add<HBoundsCheck>(index, length); | 7617 HInstruction* checked_index = Add<HBoundsCheck>(index, length); |
7621 return New<HStringCharCodeAt>(string, checked_index); | 7618 return New<HStringCharCodeAt>(string, checked_index); |
7622 } | 7619 } |
7623 | 7620 |
7624 | 7621 |
7625 // Checks if the given shift amounts have following forms: | 7622 // Checks if the given shift amounts have form: (sa) and (32 - sa). |
7626 // (N1) and (N2) with N1 + N2 = 32; (sa) and (32 - sa). | |
7627 static bool ShiftAmountsAllowReplaceByRotate(HValue* sa, | 7623 static bool ShiftAmountsAllowReplaceByRotate(HValue* sa, |
7628 HValue* const32_minus_sa) { | 7624 HValue* const32_minus_sa) { |
7629 if (sa->IsConstant() && const32_minus_sa->IsConstant()) { | |
7630 const HConstant* c1 = HConstant::cast(sa); | |
7631 const HConstant* c2 = HConstant::cast(const32_minus_sa); | |
7632 return c1->HasInteger32Value() && c2->HasInteger32Value() && | |
7633 (c1->Integer32Value() + c2->Integer32Value() == 32); | |
7634 } | |
7635 if (!const32_minus_sa->IsSub()) return false; | 7625 if (!const32_minus_sa->IsSub()) return false; |
7636 HSub* sub = HSub::cast(const32_minus_sa); | 7626 HSub* sub = HSub::cast(const32_minus_sa); |
7637 if (sa != sub->right()) return false; | 7627 if (sa != sub->right()) return false; |
7638 HValue* const32 = sub->left(); | 7628 HValue* const32 = sub->left(); |
7639 if (!const32->IsConstant() || | 7629 if (!const32->IsConstant() || |
7640 HConstant::cast(const32)->Integer32Value() != 32) { | 7630 HConstant::cast(const32)->Integer32Value() != 32) { |
7641 return false; | 7631 return false; |
7642 } | 7632 } |
7643 return (sub->right() == sa); | 7633 return (sub->right() == sa); |
7644 } | 7634 } |
(...skipping 2055 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9700 if (ShouldProduceTraceOutput()) { | 9690 if (ShouldProduceTraceOutput()) { |
9701 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 9691 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
9702 } | 9692 } |
9703 | 9693 |
9704 #ifdef DEBUG | 9694 #ifdef DEBUG |
9705 graph_->Verify(false); // No full verify. | 9695 graph_->Verify(false); // No full verify. |
9706 #endif | 9696 #endif |
9707 } | 9697 } |
9708 | 9698 |
9709 } } // namespace v8::internal | 9699 } } // namespace v8::internal |
OLD | NEW |