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

Side by Side Diff: src/compiler/bytecode-graph-builder.cc

Issue 2510653002: [ic] Pass name to LoadGlobalIC again. (Closed)
Patch Set: Release fix Created 4 years, 1 month 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/bytecode-graph-builder.h ('k') | src/compiler/js-generic-lowering.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/compiler/bytecode-graph-builder.h" 5 #include "src/compiler/bytecode-graph-builder.h"
6 6
7 #include "src/ast/ast.h" 7 #include "src/ast/ast.h"
8 #include "src/ast/scopes.h" 8 #include "src/ast/scopes.h"
9 #include "src/compilation-info.h" 9 #include "src/compilation-info.h"
10 #include "src/compiler/bytecode-branch-analysis.h" 10 #include "src/compiler/bytecode-branch-analysis.h"
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 Node* value = environment()->LookupAccumulator(); 734 Node* value = environment()->LookupAccumulator();
735 environment()->BindRegister(bytecode_iterator().GetRegisterOperand(0), value); 735 environment()->BindRegister(bytecode_iterator().GetRegisterOperand(0), value);
736 } 736 }
737 737
738 void BytecodeGraphBuilder::VisitMov() { 738 void BytecodeGraphBuilder::VisitMov() {
739 Node* value = 739 Node* value =
740 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 740 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
741 environment()->BindRegister(bytecode_iterator().GetRegisterOperand(1), value); 741 environment()->BindRegister(bytecode_iterator().GetRegisterOperand(1), value);
742 } 742 }
743 743
744 Node* BytecodeGraphBuilder::BuildLoadGlobal(uint32_t feedback_slot_index, 744 Node* BytecodeGraphBuilder::BuildLoadGlobal(Handle<Name> name,
745 uint32_t feedback_slot_index,
745 TypeofMode typeof_mode) { 746 TypeofMode typeof_mode) {
746 VectorSlotPair feedback = CreateVectorSlotPair(feedback_slot_index); 747 VectorSlotPair feedback = CreateVectorSlotPair(feedback_slot_index);
747 DCHECK_EQ(FeedbackVectorSlotKind::LOAD_GLOBAL_IC, 748 DCHECK_EQ(FeedbackVectorSlotKind::LOAD_GLOBAL_IC,
748 feedback_vector()->GetKind(feedback.slot())); 749 feedback_vector()->GetKind(feedback.slot()));
749 Handle<Name> name(feedback_vector()->GetName(feedback.slot()));
750 const Operator* op = javascript()->LoadGlobal(name, feedback, typeof_mode); 750 const Operator* op = javascript()->LoadGlobal(name, feedback, typeof_mode);
751 return NewNode(op, GetFunctionClosure()); 751 return NewNode(op, GetFunctionClosure());
752 } 752 }
753 753
754 void BytecodeGraphBuilder::VisitLdaGlobal() { 754 void BytecodeGraphBuilder::VisitLdaGlobal() {
755 PrepareEagerCheckpoint(); 755 PrepareEagerCheckpoint();
756 Node* node = BuildLoadGlobal(bytecode_iterator().GetIndexOperand(0), 756 Handle<Name> name =
757 TypeofMode::NOT_INSIDE_TYPEOF); 757 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(0));
758 uint32_t feedback_slot_index = bytecode_iterator().GetIndexOperand(1);
759 Node* node =
760 BuildLoadGlobal(name, feedback_slot_index, TypeofMode::NOT_INSIDE_TYPEOF);
758 environment()->BindAccumulator(node, Environment::kAttachFrameState); 761 environment()->BindAccumulator(node, Environment::kAttachFrameState);
759 } 762 }
760 763
761 void BytecodeGraphBuilder::VisitLdaGlobalInsideTypeof() { 764 void BytecodeGraphBuilder::VisitLdaGlobalInsideTypeof() {
762 PrepareEagerCheckpoint(); 765 PrepareEagerCheckpoint();
763 Node* node = BuildLoadGlobal(bytecode_iterator().GetIndexOperand(0), 766 Handle<Name> name =
764 TypeofMode::INSIDE_TYPEOF); 767 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(0));
768 uint32_t feedback_slot_index = bytecode_iterator().GetIndexOperand(1);
769 Node* node =
770 BuildLoadGlobal(name, feedback_slot_index, TypeofMode::INSIDE_TYPEOF);
765 environment()->BindAccumulator(node, Environment::kAttachFrameState); 771 environment()->BindAccumulator(node, Environment::kAttachFrameState);
766 } 772 }
767 773
768 void BytecodeGraphBuilder::BuildStoreGlobal(LanguageMode language_mode) { 774 void BytecodeGraphBuilder::BuildStoreGlobal(LanguageMode language_mode) {
769 PrepareEagerCheckpoint(); 775 PrepareEagerCheckpoint();
770 Handle<Name> name = 776 Handle<Name> name =
771 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(0)); 777 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(0));
772 VectorSlotPair feedback = 778 VectorSlotPair feedback =
773 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(1)); 779 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(1));
774 Node* value = environment()->LookupAccumulator(); 780 Node* value = environment()->LookupAccumulator();
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 949
944 void BytecodeGraphBuilder::BuildLdaLookupGlobalSlot(TypeofMode typeof_mode) { 950 void BytecodeGraphBuilder::BuildLdaLookupGlobalSlot(TypeofMode typeof_mode) {
945 uint32_t depth = bytecode_iterator().GetUnsignedImmediateOperand(2); 951 uint32_t depth = bytecode_iterator().GetUnsignedImmediateOperand(2);
946 952
947 // Check if any context in the depth has an extension. 953 // Check if any context in the depth has an extension.
948 Environment* slow_environment = CheckContextExtensions(depth); 954 Environment* slow_environment = CheckContextExtensions(depth);
949 955
950 // Fast path, do a global load. 956 // Fast path, do a global load.
951 { 957 {
952 PrepareEagerCheckpoint(); 958 PrepareEagerCheckpoint();
953 Node* node = 959 Handle<Name> name =
954 BuildLoadGlobal(bytecode_iterator().GetIndexOperand(1), typeof_mode); 960 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(0));
961 uint32_t feedback_slot_index = bytecode_iterator().GetIndexOperand(1);
962 Node* node = BuildLoadGlobal(name, feedback_slot_index, typeof_mode);
955 environment()->BindAccumulator(node, Environment::kAttachFrameState); 963 environment()->BindAccumulator(node, Environment::kAttachFrameState);
956 } 964 }
957 965
958 // Only build the slow path if there were any slow-path checks. 966 // Only build the slow path if there were any slow-path checks.
959 if (slow_environment != nullptr) { 967 if (slow_environment != nullptr) {
960 // Add a merge to the fast environment. 968 // Add a merge to the fast environment.
961 NewMerge(); 969 NewMerge();
962 Environment* fast_environment = environment(); 970 Environment* fast_environment = environment();
963 971
964 // Slow path, do a runtime load lookup. 972 // Slow path, do a runtime load lookup.
(...skipping 1242 matching lines...) Expand 10 before | Expand all | Expand 10 after
2207 it->source_position().ScriptOffset(), start_position_.InliningId())); 2215 it->source_position().ScriptOffset(), start_position_.InliningId()));
2208 it->Advance(); 2216 it->Advance();
2209 } else { 2217 } else {
2210 DCHECK_GT(it->code_offset(), offset); 2218 DCHECK_GT(it->code_offset(), offset);
2211 } 2219 }
2212 } 2220 }
2213 2221
2214 } // namespace compiler 2222 } // namespace compiler
2215 } // namespace internal 2223 } // namespace internal
2216 } // namespace v8 2224 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/bytecode-graph-builder.h ('k') | src/compiler/js-generic-lowering.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698