Chromium Code Reviews| 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 12630 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 12641 HValue* receiver = Pop(); | 12641 HValue* receiver = Pop(); |
| 12642 HValue* table = Add<HLoadNamedField>(receiver, static_cast<HValue*>(NULL), | 12642 HValue* table = Add<HLoadNamedField>(receiver, static_cast<HValue*>(NULL), |
| 12643 HObjectAccess::ForJSCollectionTable()); | 12643 HObjectAccess::ForJSCollectionTable()); |
| 12644 HInstruction* result = New<HLoadNamedField>( | 12644 HInstruction* result = New<HLoadNamedField>( |
| 12645 table, static_cast<HValue*>(NULL), | 12645 table, static_cast<HValue*>(NULL), |
| 12646 HObjectAccess::ForOrderedHashTableNumberOfElements<OrderedHashMap>()); | 12646 HObjectAccess::ForOrderedHashTableNumberOfElements<OrderedHashMap>()); |
| 12647 return ast_context()->ReturnInstruction(result, call->id()); | 12647 return ast_context()->ReturnInstruction(result, call->id()); |
| 12648 } | 12648 } |
| 12649 | 12649 |
| 12650 | 12650 |
| 12651 template <typename CollectionType> | |
| 12652 HValue* HOptimizedGraphBuilder::BuildAllocateOrderedHashTable() { | |
| 12653 static const int kInitialCapacity = CollectionType::kMinCapacity; | |
| 12654 static const int kInitialNumBuckets = | |
| 12655 kInitialCapacity / CollectionType::kLoadFactor; | |
| 12656 HValue* size = Add<HConstant>( | |
| 12657 FixedArray::kHeaderSize + CollectionType::kHashTableStartIndex + | |
| 12658 kInitialNumBuckets + (kInitialCapacity * CollectionType::kEntrySize)); | |
| 12659 HValue* table = | |
| 12660 Add<HAllocate>(size, HType::HeapObject(), NOT_TENURED, FIXED_ARRAY_TYPE); | |
|
adamk
2014/12/08 21:41:14
One question about HAllocate: do I need to add cod
Dmitry Lomov (no reviews)
2014/12/09 12:05:39
Yes. See HOGB::BuildAllocateFixedTypedArray for in
adamk
2014/12/09 19:24:23
Added a bunch of proper initialization. Now the co
| |
| 12661 Add<HStoreNamedField>( | |
| 12662 table, HObjectAccess::ForMap(), | |
| 12663 Add<HConstant>(isolate()->factory()->ordered_hash_table_map())); | |
| 12664 HValue* not_found = Add<HConstant>(CollectionType::kNotFound); | |
| 12665 for (int i = 0; i < kInitialNumBuckets; ++i) { | |
| 12666 Add<HStoreKeyed>(table, | |
| 12667 Add<HConstant>(CollectionType::kHashTableStartIndex + i), | |
| 12668 not_found, FAST_ELEMENTS); | |
| 12669 } | |
| 12670 Add<HStoreNamedField>( | |
| 12671 table, | |
| 12672 HObjectAccess::ForOrderedHashTableNumberOfBuckets<CollectionType>(), | |
| 12673 Add<HConstant>(kInitialNumBuckets)); | |
| 12674 Add<HStoreNamedField>( | |
| 12675 table, | |
| 12676 HObjectAccess::ForOrderedHashTableNumberOfElements<CollectionType>(), | |
| 12677 graph()->GetConstant0()); | |
| 12678 Add<HStoreNamedField>( | |
| 12679 table, HObjectAccess::ForOrderedHashTableNumberOfDeletedElements< | |
| 12680 CollectionType>(), | |
| 12681 graph()->GetConstant0()); | |
| 12682 return table; | |
| 12683 } | |
| 12684 | |
| 12685 | |
| 12686 void HOptimizedGraphBuilder::GenerateSetInitialize(CallRuntime* call) { | |
| 12687 DCHECK(call->arguments()->length() == 1); | |
| 12688 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); | |
| 12689 HValue* receiver = Pop(); | |
| 12690 HValue* table = BuildAllocateOrderedHashTable<OrderedHashSet>(); | |
| 12691 Add<HStoreNamedField>(receiver, HObjectAccess::ForJSCollectionTable(), table); | |
| 12692 return ast_context()->ReturnValue(receiver); | |
| 12693 } | |
| 12694 | |
| 12695 | |
| 12696 void HOptimizedGraphBuilder::GenerateMapInitialize(CallRuntime* call) { | |
| 12697 DCHECK(call->arguments()->length() == 1); | |
| 12698 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); | |
| 12699 HValue* receiver = Pop(); | |
| 12700 HValue* table = BuildAllocateOrderedHashTable<OrderedHashMap>(); | |
| 12701 Add<HStoreNamedField>(receiver, HObjectAccess::ForJSCollectionTable(), table); | |
| 12702 return ast_context()->ReturnValue(receiver); | |
| 12703 } | |
| 12704 | |
| 12705 | |
| 12651 void HOptimizedGraphBuilder::GenerateGetCachedArrayIndex(CallRuntime* call) { | 12706 void HOptimizedGraphBuilder::GenerateGetCachedArrayIndex(CallRuntime* call) { |
| 12652 DCHECK(call->arguments()->length() == 1); | 12707 DCHECK(call->arguments()->length() == 1); |
| 12653 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); | 12708 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
| 12654 HValue* value = Pop(); | 12709 HValue* value = Pop(); |
| 12655 HGetCachedArrayIndex* result = New<HGetCachedArrayIndex>(value); | 12710 HGetCachedArrayIndex* result = New<HGetCachedArrayIndex>(value); |
| 12656 return ast_context()->ReturnInstruction(result, call->id()); | 12711 return ast_context()->ReturnInstruction(result, call->id()); |
| 12657 } | 12712 } |
| 12658 | 12713 |
| 12659 | 12714 |
| 12660 void HOptimizedGraphBuilder::GenerateFastOneByteArrayJoin(CallRuntime* call) { | 12715 void HOptimizedGraphBuilder::GenerateFastOneByteArrayJoin(CallRuntime* call) { |
| (...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 13368 if (ShouldProduceTraceOutput()) { | 13423 if (ShouldProduceTraceOutput()) { |
| 13369 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 13424 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
| 13370 } | 13425 } |
| 13371 | 13426 |
| 13372 #ifdef DEBUG | 13427 #ifdef DEBUG |
| 13373 graph_->Verify(false); // No full verify. | 13428 graph_->Verify(false); // No full verify. |
| 13374 #endif | 13429 #endif |
| 13375 } | 13430 } |
| 13376 | 13431 |
| 13377 } } // namespace v8::internal | 13432 } } // namespace v8::internal |
| OLD | NEW |