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

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

Issue 2311203002: Move kMaxRegularHeapObjectSize into globals (Closed)
Patch Set: Saving the file helps... Created 4 years, 3 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 | « src/crankshaft/arm64/lithium-codegen-arm64.cc ('k') | src/crankshaft/hydrogen-instructions.cc » ('j') | no next file with comments »
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/hydrogen.h" 5 #include "src/crankshaft/hydrogen.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "src/allocation-site-scopes.h" 10 #include "src/allocation-site-scopes.h"
(...skipping 2633 matching lines...) Expand 10 before | Expand all | Expand 10 after
2644 if_onebyte.End(); 2644 if_onebyte.End();
2645 HValue* map = Pop(); 2645 HValue* map = Pop();
2646 2646
2647 // Calculate the number of bytes needed for the characters in the 2647 // Calculate the number of bytes needed for the characters in the
2648 // string while observing object alignment. 2648 // string while observing object alignment.
2649 STATIC_ASSERT((SeqString::kHeaderSize & kObjectAlignmentMask) == 0); 2649 STATIC_ASSERT((SeqString::kHeaderSize & kObjectAlignmentMask) == 0);
2650 HValue* size = BuildObjectSizeAlignment(Pop(), SeqString::kHeaderSize); 2650 HValue* size = BuildObjectSizeAlignment(Pop(), SeqString::kHeaderSize);
2651 2651
2652 IfBuilder if_size(this); 2652 IfBuilder if_size(this);
2653 if_size.If<HCompareNumericAndBranch>( 2653 if_size.If<HCompareNumericAndBranch>(
2654 size, Add<HConstant>(Page::kMaxRegularHeapObjectSize), Token::LT); 2654 size, Add<HConstant>(kMaxRegularHeapObjectSize), Token::LT);
2655 if_size.Then(); 2655 if_size.Then();
2656 { 2656 {
2657 // Allocate the string object. HAllocate does not care whether we pass 2657 // Allocate the string object. HAllocate does not care whether we pass
2658 // STRING_TYPE or ONE_BYTE_STRING_TYPE here, so we just use STRING_TYPE. 2658 // STRING_TYPE or ONE_BYTE_STRING_TYPE here, so we just use STRING_TYPE.
2659 HAllocate* result = 2659 HAllocate* result =
2660 BuildAllocate(size, HType::String(), STRING_TYPE, allocation_mode); 2660 BuildAllocate(size, HType::String(), STRING_TYPE, allocation_mode);
2661 Add<HStoreNamedField>(result, HObjectAccess::ForMap(), map); 2661 Add<HStoreNamedField>(result, HObjectAccess::ForMap(), map);
2662 2662
2663 // Initialize the string fields. 2663 // Initialize the string fields.
2664 Add<HStoreNamedField>(result, HObjectAccess::ForStringHashField(), 2664 Add<HStoreNamedField>(result, HObjectAccess::ForStringHashField(),
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
3067 return new_capacity; 3067 return new_capacity;
3068 } 3068 }
3069 3069
3070 3070
3071 HValue* HGraphBuilder::BuildGrowElementsCapacity(HValue* object, 3071 HValue* HGraphBuilder::BuildGrowElementsCapacity(HValue* object,
3072 HValue* elements, 3072 HValue* elements,
3073 ElementsKind kind, 3073 ElementsKind kind,
3074 ElementsKind new_kind, 3074 ElementsKind new_kind,
3075 HValue* length, 3075 HValue* length,
3076 HValue* new_capacity) { 3076 HValue* new_capacity) {
3077 Add<HBoundsCheck>(new_capacity, Add<HConstant>( 3077 Add<HBoundsCheck>(
3078 (Page::kMaxRegularHeapObjectSize - FixedArray::kHeaderSize) >> 3078 new_capacity,
3079 ElementsKindToShiftSize(new_kind))); 3079 Add<HConstant>((kMaxRegularHeapObjectSize - FixedArray::kHeaderSize) >>
3080 ElementsKindToShiftSize(new_kind)));
3080 3081
3081 HValue* new_elements = 3082 HValue* new_elements =
3082 BuildAllocateAndInitializeArray(new_kind, new_capacity); 3083 BuildAllocateAndInitializeArray(new_kind, new_capacity);
3083 3084
3084 BuildCopyElements(elements, kind, new_elements, 3085 BuildCopyElements(elements, kind, new_elements,
3085 new_kind, length, new_capacity); 3086 new_kind, length, new_capacity);
3086 3087
3087 Add<HStoreNamedField>(object, HObjectAccess::ForElementsPointer(), 3088 Add<HStoreNamedField>(object, HObjectAccess::ForElementsPointer(),
3088 new_elements); 3089 new_elements);
3089 3090
(...skipping 6844 matching lines...) Expand 10 before | Expand all | Expand 10 after
9934 // objects we construct, and an int32-to-smi HChange could deopt. Accept 9935 // objects we construct, and an int32-to-smi HChange could deopt. Accept
9935 // the deopt possibility now, before allocation occurs. 9936 // the deopt possibility now, before allocation occurs.
9936 length = AddUncasted<HForceRepresentation>(length, Representation::Smi()); 9937 length = AddUncasted<HForceRepresentation>(length, Representation::Smi());
9937 capacity = AddUncasted<HForceRepresentation>(capacity, Representation::Smi()); 9938 capacity = AddUncasted<HForceRepresentation>(capacity, Representation::Smi());
9938 9939
9939 // Generate size calculation code here in order to make it dominate 9940 // Generate size calculation code here in order to make it dominate
9940 // the JSArray allocation. 9941 // the JSArray allocation.
9941 HValue* elements_size = BuildCalculateElementsSize(kind, capacity); 9942 HValue* elements_size = BuildCalculateElementsSize(kind, capacity);
9942 9943
9943 // Bail out for large objects. 9944 // Bail out for large objects.
9944 HValue* max_size = Add<HConstant>(Page::kMaxRegularHeapObjectSize); 9945 HValue* max_size = Add<HConstant>(kMaxRegularHeapObjectSize);
9945 Add<HBoundsCheck>(elements_size, max_size); 9946 Add<HBoundsCheck>(elements_size, max_size);
9946 9947
9947 // Allocate (dealing with failure appropriately). 9948 // Allocate (dealing with failure appropriately).
9948 AllocationSiteMode mode = DONT_TRACK_ALLOCATION_SITE; 9949 AllocationSiteMode mode = DONT_TRACK_ALLOCATION_SITE;
9949 HAllocate* new_object = AllocateJSArrayObject(mode); 9950 HAllocate* new_object = AllocateJSArrayObject(mode);
9950 9951
9951 // Fill in the fields: map, properties, length. 9952 // Fill in the fields: map, properties, length.
9952 Handle<Map> map_constant(isolate()->get_initial_js_array_map(kind)); 9953 Handle<Map> map_constant(isolate()->get_initial_js_array_map(kind));
9953 HValue* map = Add<HConstant>(map_constant); 9954 HValue* map = Add<HConstant>(map_constant);
9954 9955
(...skipping 1879 matching lines...) Expand 10 before | Expand all | Expand 10 after
11834 if (*top_site == *current_site) { 11835 if (*top_site == *current_site) {
11835 // We install a dependency for pretenuring only on the outermost literal. 11836 // We install a dependency for pretenuring only on the outermost literal.
11836 top_info()->dependencies()->AssumeTenuringDecision(top_site); 11837 top_info()->dependencies()->AssumeTenuringDecision(top_site);
11837 } 11838 }
11838 top_info()->dependencies()->AssumeTransitionStable(current_site); 11839 top_info()->dependencies()->AssumeTransitionStable(current_site);
11839 11840
11840 HInstruction* object = 11841 HInstruction* object =
11841 Add<HAllocate>(object_size_constant, type, pretenure_flag, instance_type, 11842 Add<HAllocate>(object_size_constant, type, pretenure_flag, instance_type,
11842 graph()->GetConstant0(), top_site); 11843 graph()->GetConstant0(), top_site);
11843 11844
11844 // If allocation folding reaches Page::kMaxRegularHeapObjectSize the 11845 // If allocation folding reaches kMaxRegularHeapObjectSize the
11845 // elements array may not get folded into the object. Hence, we set the 11846 // elements array may not get folded into the object. Hence, we set the
11846 // elements pointer to empty fixed array and let store elimination remove 11847 // elements pointer to empty fixed array and let store elimination remove
11847 // this store in the folding case. 11848 // this store in the folding case.
11848 HConstant* empty_fixed_array = Add<HConstant>( 11849 HConstant* empty_fixed_array = Add<HConstant>(
11849 isolate()->factory()->empty_fixed_array()); 11850 isolate()->factory()->empty_fixed_array());
11850 Add<HStoreNamedField>(object, HObjectAccess::ForElementsPointer(), 11851 Add<HStoreNamedField>(object, HObjectAccess::ForElementsPointer(),
11851 empty_fixed_array); 11852 empty_fixed_array);
11852 11853
11853 BuildEmitObjectHeader(boilerplate_object, object); 11854 BuildEmitObjectHeader(boilerplate_object, object);
11854 11855
(...skipping 1539 matching lines...) Expand 10 before | Expand all | Expand 10 after
13394 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13395 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13395 } 13396 }
13396 13397
13397 #ifdef DEBUG 13398 #ifdef DEBUG
13398 graph_->Verify(false); // No full verify. 13399 graph_->Verify(false); // No full verify.
13399 #endif 13400 #endif
13400 } 13401 }
13401 13402
13402 } // namespace internal 13403 } // namespace internal
13403 } // namespace v8 13404 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/arm64/lithium-codegen-arm64.cc ('k') | src/crankshaft/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698