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

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

Issue 2459513002: [ignition] Add bytecodes for loads/stores in the current context (Closed)
Patch Set: s/LocalContext/CurrentContext/g 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/interpreter/bytecode-array-builder.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 791 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 // available in bytecode array. update this code when the implementation 802 // available in bytecode array. update this code when the implementation
803 // changes. 803 // changes.
804 const Operator* op = javascript()->LoadContext( 804 const Operator* op = javascript()->LoadContext(
805 bytecode_iterator().GetUnsignedImmediateOperand(2), 805 bytecode_iterator().GetUnsignedImmediateOperand(2),
806 bytecode_iterator().GetIndexOperand(1), false); 806 bytecode_iterator().GetIndexOperand(1), false);
807 Node* context = 807 Node* context =
808 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 808 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
809 return NewNode(op, context); 809 return NewNode(op, context);
810 } 810 }
811 811
812 Node* BytecodeGraphBuilder::BuildLoadCurrentContextSlot() {
813 // TODO(mythria): immutable flag is also set to false. This information is not
814 // available in bytecode array. update this code when the implementation
815 // changes.
816 const Operator* op = javascript()->LoadContext(
817 0, bytecode_iterator().GetIndexOperand(0), false);
818 Node* context = environment()->Context();
819 return NewNode(op, context);
820 }
821
812 void BytecodeGraphBuilder::VisitLdaContextSlot() { 822 void BytecodeGraphBuilder::VisitLdaContextSlot() {
813 Node* node = BuildLoadContextSlot(); 823 Node* node = BuildLoadContextSlot();
814 environment()->BindAccumulator(node); 824 environment()->BindAccumulator(node);
815 } 825 }
816 826
827 void BytecodeGraphBuilder::VisitLdaCurrentContextSlot() {
828 Node* node = BuildLoadCurrentContextSlot();
829 environment()->BindAccumulator(node);
830 }
831
817 void BytecodeGraphBuilder::VisitLdrContextSlot() { 832 void BytecodeGraphBuilder::VisitLdrContextSlot() {
818 Node* node = BuildLoadContextSlot(); 833 Node* node = BuildLoadContextSlot();
819 environment()->BindRegister(bytecode_iterator().GetRegisterOperand(3), node); 834 environment()->BindRegister(bytecode_iterator().GetRegisterOperand(3), node);
820 } 835 }
821 836
837 void BytecodeGraphBuilder::VisitLdrCurrentContextSlot() {
838 Node* node = BuildLoadCurrentContextSlot();
839 environment()->BindRegister(bytecode_iterator().GetRegisterOperand(1), node);
840 }
841
822 void BytecodeGraphBuilder::VisitStaContextSlot() { 842 void BytecodeGraphBuilder::VisitStaContextSlot() {
823 const Operator* op = javascript()->StoreContext( 843 const Operator* op = javascript()->StoreContext(
824 bytecode_iterator().GetUnsignedImmediateOperand(2), 844 bytecode_iterator().GetUnsignedImmediateOperand(2),
825 bytecode_iterator().GetIndexOperand(1)); 845 bytecode_iterator().GetIndexOperand(1));
826 Node* context = 846 Node* context =
827 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 847 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
828 Node* value = environment()->LookupAccumulator(); 848 Node* value = environment()->LookupAccumulator();
829 NewNode(op, context, value); 849 NewNode(op, context, value);
830 } 850 }
831 851
852 void BytecodeGraphBuilder::VisitStaCurrentContextSlot() {
853 const Operator* op =
854 javascript()->StoreContext(0, bytecode_iterator().GetIndexOperand(0));
855 Node* context = environment()->Context();
856 Node* value = environment()->LookupAccumulator();
857 NewNode(op, context, value);
858 }
859
832 void BytecodeGraphBuilder::BuildLdaLookupSlot(TypeofMode typeof_mode) { 860 void BytecodeGraphBuilder::BuildLdaLookupSlot(TypeofMode typeof_mode) {
833 PrepareEagerCheckpoint(); 861 PrepareEagerCheckpoint();
834 Node* name = 862 Node* name =
835 jsgraph()->Constant(bytecode_iterator().GetConstantForIndexOperand(0)); 863 jsgraph()->Constant(bytecode_iterator().GetConstantForIndexOperand(0));
836 const Operator* op = 864 const Operator* op =
837 javascript()->CallRuntime(typeof_mode == TypeofMode::NOT_INSIDE_TYPEOF 865 javascript()->CallRuntime(typeof_mode == TypeofMode::NOT_INSIDE_TYPEOF
838 ? Runtime::kLoadLookupSlot 866 ? Runtime::kLoadLookupSlot
839 : Runtime::kLoadLookupSlotInsideTypeof); 867 : Runtime::kLoadLookupSlotInsideTypeof);
840 Node* value = NewNode(op, name); 868 Node* value = NewNode(op, name);
841 environment()->BindAccumulator(value, Environment::kAttachFrameState); 869 environment()->BindAccumulator(value, Environment::kAttachFrameState);
(...skipping 1363 matching lines...) Expand 10 before | Expand all | Expand 10 after
2205 source_positions_->set_current_position(it->source_position()); 2233 source_positions_->set_current_position(it->source_position());
2206 it->Advance(); 2234 it->Advance();
2207 } else { 2235 } else {
2208 DCHECK_GT(it->code_offset(), offset); 2236 DCHECK_GT(it->code_offset(), offset);
2209 } 2237 }
2210 } 2238 }
2211 2239
2212 } // namespace compiler 2240 } // namespace compiler
2213 } // namespace internal 2241 } // namespace internal
2214 } // namespace v8 2242 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/bytecode-graph-builder.h ('k') | src/interpreter/bytecode-array-builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698