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

Side by Side Diff: src/interpreter/interpreter.cc

Issue 1989363004: [turbofan] Add FixedArray peephole optimizations to CodeStubAssembler (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Final review feedback Created 4 years, 7 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/compiler/code-assembler.cc ('k') | src/interpreter/interpreter-assembler.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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/interpreter/interpreter.h" 5 #include "src/interpreter/interpreter.h"
6 6
7 #include <fstream> 7 #include <fstream>
8 8
9 #include "src/ast/prettyprinter.h" 9 #include "src/ast/prettyprinter.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 1702 matching lines...) Expand 10 before | Expand all | Expand 10 after
1713 Node* receiver_reg = __ BytecodeOperandReg(0); 1713 Node* receiver_reg = __ BytecodeOperandReg(0);
1714 Node* receiver = __ LoadRegister(receiver_reg); 1714 Node* receiver = __ LoadRegister(receiver_reg);
1715 Node* index_reg = __ BytecodeOperandReg(1); 1715 Node* index_reg = __ BytecodeOperandReg(1);
1716 Node* index = __ LoadRegister(index_reg); 1716 Node* index = __ LoadRegister(index_reg);
1717 Node* cache_type_reg = __ BytecodeOperandReg(2); 1717 Node* cache_type_reg = __ BytecodeOperandReg(2);
1718 Node* cache_type = __ LoadRegister(cache_type_reg); 1718 Node* cache_type = __ LoadRegister(cache_type_reg);
1719 Node* cache_array_reg = __ NextRegister(cache_type_reg); 1719 Node* cache_array_reg = __ NextRegister(cache_type_reg);
1720 Node* cache_array = __ LoadRegister(cache_array_reg); 1720 Node* cache_array = __ LoadRegister(cache_array_reg);
1721 1721
1722 // Load the next key from the enumeration array. 1722 // Load the next key from the enumeration array.
1723 Node* key = __ LoadFixedArrayElementSmiIndex(cache_array, index); 1723 Node* key = __ LoadFixedArrayElement(cache_array, index, 0,
1724 CodeStubAssembler::SMI_PARAMETERS);
1724 1725
1725 // Check if we can use the for-in fast path potentially using the enum cache. 1726 // Check if we can use the for-in fast path potentially using the enum cache.
1726 Label if_fast(assembler), if_slow(assembler, Label::kDeferred); 1727 Label if_fast(assembler), if_slow(assembler, Label::kDeferred);
1727 Node* receiver_map = __ LoadObjectField(receiver, HeapObject::kMapOffset); 1728 Node* receiver_map = __ LoadObjectField(receiver, HeapObject::kMapOffset);
1728 Node* condition = __ WordEqual(receiver_map, cache_type); 1729 Node* condition = __ WordEqual(receiver_map, cache_type);
1729 __ BranchIf(condition, &if_fast, &if_slow); 1730 __ BranchIf(condition, &if_fast, &if_slow);
1730 __ Bind(&if_fast); 1731 __ Bind(&if_fast);
1731 { 1732 {
1732 // Enum cache in use for {receiver}, the {key} is definitely valid. 1733 // Enum cache in use for {receiver}, the {key} is definitely valid.
1733 __ SetAccumulator(key); 1734 __ SetAccumulator(key);
1734 __ Dispatch(); 1735 __ Dispatch();
1735 } 1736 }
1736 __ Bind(&if_slow); 1737 __ Bind(&if_slow);
1737 { 1738 {
1738 // Record the fact that we hit the for-in slow path. 1739 // Record the fact that we hit the for-in slow path.
1739 Node* vector_index = __ BytecodeOperandIdx(3); 1740 Node* vector_index = __ BytecodeOperandIdx(3);
1740 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 1741 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
1741 Node* megamorphic_sentinel = 1742 Node* megamorphic_sentinel =
1742 __ HeapConstant(TypeFeedbackVector::MegamorphicSentinel(isolate_)); 1743 __ HeapConstant(TypeFeedbackVector::MegamorphicSentinel(isolate_));
1743 __ StoreFixedArrayElementNoWriteBarrier(type_feedback_vector, vector_index, 1744 __ StoreFixedArrayElement(type_feedback_vector, vector_index,
1744 megamorphic_sentinel); 1745 megamorphic_sentinel, SKIP_WRITE_BARRIER);
1745 1746
1746 // Need to filter the {key} for the {receiver}. 1747 // Need to filter the {key} for the {receiver}.
1747 Node* context = __ GetContext(); 1748 Node* context = __ GetContext();
1748 Node* result = 1749 Node* result =
1749 __ CallRuntime(Runtime::kForInFilter, context, receiver, key); 1750 __ CallRuntime(Runtime::kForInFilter, context, receiver, key);
1750 __ SetAccumulator(result); 1751 __ SetAccumulator(result);
1751 __ Dispatch(); 1752 __ Dispatch();
1752 } 1753 }
1753 } 1754 }
1754 1755
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1855 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, 1856 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset,
1856 __ SmiTag(new_state)); 1857 __ SmiTag(new_state));
1857 __ SetAccumulator(old_state); 1858 __ SetAccumulator(old_state);
1858 1859
1859 __ Dispatch(); 1860 __ Dispatch();
1860 } 1861 }
1861 1862
1862 } // namespace interpreter 1863 } // namespace interpreter
1863 } // namespace internal 1864 } // namespace internal
1864 } // namespace v8 1865 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/code-assembler.cc ('k') | src/interpreter/interpreter-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698