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

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

Issue 1683043002: [turbofan] No need to load the feedback vector on the JS graph level. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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/ast-graph-builder.cc ('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/compiler/bytecode-branch-analysis.h" 7 #include "src/compiler/bytecode-branch-analysis.h"
8 #include "src/compiler/linkage.h" 8 #include "src/compiler/linkage.h"
9 #include "src/compiler/operator-properties.h" 9 #include "src/compiler/operator-properties.h"
10 #include "src/interpreter/bytecodes.h" 10 #include "src/interpreter/bytecodes.h"
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 656
657 void BytecodeGraphBuilder::BuildLoadGlobal( 657 void BytecodeGraphBuilder::BuildLoadGlobal(
658 TypeofMode typeof_mode) { 658 TypeofMode typeof_mode) {
659 FrameStateBeforeAndAfter states(this); 659 FrameStateBeforeAndAfter states(this);
660 Handle<Name> name = 660 Handle<Name> name =
661 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(0)); 661 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(0));
662 VectorSlotPair feedback = 662 VectorSlotPair feedback =
663 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(1)); 663 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(1));
664 664
665 const Operator* op = javascript()->LoadGlobal(name, feedback, typeof_mode); 665 const Operator* op = javascript()->LoadGlobal(name, feedback, typeof_mode);
666 Node* node = NewNode(op, BuildLoadFeedbackVector()); 666 Node* node = NewNode(op, GetFunctionClosure());
667 environment()->BindAccumulator(node, &states); 667 environment()->BindAccumulator(node, &states);
668 } 668 }
669 669
670 void BytecodeGraphBuilder::VisitLdaGlobalSloppy() { 670 void BytecodeGraphBuilder::VisitLdaGlobalSloppy() {
671 BuildLoadGlobal(TypeofMode::NOT_INSIDE_TYPEOF); 671 BuildLoadGlobal(TypeofMode::NOT_INSIDE_TYPEOF);
672 } 672 }
673 673
674 void BytecodeGraphBuilder::VisitLdaGlobalStrict() { 674 void BytecodeGraphBuilder::VisitLdaGlobalStrict() {
675 BuildLoadGlobal(TypeofMode::NOT_INSIDE_TYPEOF); 675 BuildLoadGlobal(TypeofMode::NOT_INSIDE_TYPEOF);
676 } 676 }
(...skipping 24 matching lines...) Expand all
701 701
702 void BytecodeGraphBuilder::BuildStoreGlobal(LanguageMode language_mode) { 702 void BytecodeGraphBuilder::BuildStoreGlobal(LanguageMode language_mode) {
703 FrameStateBeforeAndAfter states(this); 703 FrameStateBeforeAndAfter states(this);
704 Handle<Name> name = 704 Handle<Name> name =
705 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(0)); 705 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(0));
706 VectorSlotPair feedback = 706 VectorSlotPair feedback =
707 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(1)); 707 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(1));
708 Node* value = environment()->LookupAccumulator(); 708 Node* value = environment()->LookupAccumulator();
709 709
710 const Operator* op = javascript()->StoreGlobal(language_mode, name, feedback); 710 const Operator* op = javascript()->StoreGlobal(language_mode, name, feedback);
711 Node* node = NewNode(op, value, BuildLoadFeedbackVector()); 711 Node* node = NewNode(op, value, GetFunctionClosure());
712 environment()->RecordAfterState(node, &states); 712 environment()->RecordAfterState(node, &states);
713 } 713 }
714 714
715 void BytecodeGraphBuilder::VisitStaGlobalSloppy() { 715 void BytecodeGraphBuilder::VisitStaGlobalSloppy() {
716 BuildStoreGlobal(LanguageMode::SLOPPY); 716 BuildStoreGlobal(LanguageMode::SLOPPY);
717 } 717 }
718 718
719 void BytecodeGraphBuilder::VisitStaGlobalStrict() { 719 void BytecodeGraphBuilder::VisitStaGlobalStrict() {
720 BuildStoreGlobal(LanguageMode::STRICT); 720 BuildStoreGlobal(LanguageMode::STRICT);
721 } 721 }
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 void BytecodeGraphBuilder::BuildNamedLoad() { 813 void BytecodeGraphBuilder::BuildNamedLoad() {
814 FrameStateBeforeAndAfter states(this); 814 FrameStateBeforeAndAfter states(this);
815 Node* object = 815 Node* object =
816 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 816 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
817 Handle<Name> name = 817 Handle<Name> name =
818 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(1)); 818 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(1));
819 VectorSlotPair feedback = 819 VectorSlotPair feedback =
820 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(2)); 820 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(2));
821 821
822 const Operator* op = javascript()->LoadNamed(language_mode(), name, feedback); 822 const Operator* op = javascript()->LoadNamed(language_mode(), name, feedback);
823 Node* node = NewNode(op, object, BuildLoadFeedbackVector()); 823 Node* node = NewNode(op, object, GetFunctionClosure());
824 environment()->BindAccumulator(node, &states); 824 environment()->BindAccumulator(node, &states);
825 } 825 }
826 826
827 void BytecodeGraphBuilder::VisitLoadICSloppy() { 827 void BytecodeGraphBuilder::VisitLoadICSloppy() {
828 DCHECK(is_sloppy(language_mode())); 828 DCHECK(is_sloppy(language_mode()));
829 BuildNamedLoad(); 829 BuildNamedLoad();
830 } 830 }
831 831
832 void BytecodeGraphBuilder::VisitLoadICStrict() { 832 void BytecodeGraphBuilder::VisitLoadICStrict() {
833 DCHECK(is_strict(language_mode())); 833 DCHECK(is_strict(language_mode()));
(...skipping 12 matching lines...) Expand all
846 846
847 void BytecodeGraphBuilder::BuildKeyedLoad() { 847 void BytecodeGraphBuilder::BuildKeyedLoad() {
848 FrameStateBeforeAndAfter states(this); 848 FrameStateBeforeAndAfter states(this);
849 Node* key = environment()->LookupAccumulator(); 849 Node* key = environment()->LookupAccumulator();
850 Node* object = 850 Node* object =
851 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 851 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
852 VectorSlotPair feedback = 852 VectorSlotPair feedback =
853 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(1)); 853 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(1));
854 854
855 const Operator* op = javascript()->LoadProperty(language_mode(), feedback); 855 const Operator* op = javascript()->LoadProperty(language_mode(), feedback);
856 Node* node = NewNode(op, object, key, BuildLoadFeedbackVector()); 856 Node* node = NewNode(op, object, key, GetFunctionClosure());
857 environment()->BindAccumulator(node, &states); 857 environment()->BindAccumulator(node, &states);
858 } 858 }
859 859
860 void BytecodeGraphBuilder::VisitKeyedLoadICSloppy() { 860 void BytecodeGraphBuilder::VisitKeyedLoadICSloppy() {
861 DCHECK(is_sloppy(language_mode())); 861 DCHECK(is_sloppy(language_mode()));
862 BuildKeyedLoad(); 862 BuildKeyedLoad();
863 } 863 }
864 864
865 void BytecodeGraphBuilder::VisitKeyedLoadICStrict() { 865 void BytecodeGraphBuilder::VisitKeyedLoadICStrict() {
866 DCHECK(is_strict(language_mode())); 866 DCHECK(is_strict(language_mode()));
(...skipping 14 matching lines...) Expand all
881 FrameStateBeforeAndAfter states(this); 881 FrameStateBeforeAndAfter states(this);
882 Node* value = environment()->LookupAccumulator(); 882 Node* value = environment()->LookupAccumulator();
883 Node* object = 883 Node* object =
884 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 884 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
885 Handle<Name> name = 885 Handle<Name> name =
886 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(1)); 886 Handle<Name>::cast(bytecode_iterator().GetConstantForIndexOperand(1));
887 VectorSlotPair feedback = 887 VectorSlotPair feedback =
888 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(2)); 888 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(2));
889 889
890 const Operator* op = javascript()->StoreNamed(language_mode, name, feedback); 890 const Operator* op = javascript()->StoreNamed(language_mode, name, feedback);
891 Node* node = NewNode(op, object, value, BuildLoadFeedbackVector()); 891 Node* node = NewNode(op, object, value, GetFunctionClosure());
892 environment()->RecordAfterState(node, &states); 892 environment()->RecordAfterState(node, &states);
893 } 893 }
894 894
895 void BytecodeGraphBuilder::VisitStoreICSloppy() { 895 void BytecodeGraphBuilder::VisitStoreICSloppy() {
896 BuildNamedStore(LanguageMode::SLOPPY); 896 BuildNamedStore(LanguageMode::SLOPPY);
897 } 897 }
898 898
899 void BytecodeGraphBuilder::VisitStoreICStrict() { 899 void BytecodeGraphBuilder::VisitStoreICStrict() {
900 BuildNamedStore(LanguageMode::STRICT); 900 BuildNamedStore(LanguageMode::STRICT);
901 } 901 }
(...skipping 10 matching lines...) Expand all
912 FrameStateBeforeAndAfter states(this); 912 FrameStateBeforeAndAfter states(this);
913 Node* value = environment()->LookupAccumulator(); 913 Node* value = environment()->LookupAccumulator();
914 Node* object = 914 Node* object =
915 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 915 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
916 Node* key = 916 Node* key =
917 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(1)); 917 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(1));
918 VectorSlotPair feedback = 918 VectorSlotPair feedback =
919 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(2)); 919 CreateVectorSlotPair(bytecode_iterator().GetIndexOperand(2));
920 920
921 const Operator* op = javascript()->StoreProperty(language_mode, feedback); 921 const Operator* op = javascript()->StoreProperty(language_mode, feedback);
922 Node* node = NewNode(op, object, key, value, BuildLoadFeedbackVector()); 922 Node* node = NewNode(op, object, key, value, GetFunctionClosure());
923 environment()->RecordAfterState(node, &states); 923 environment()->RecordAfterState(node, &states);
924 } 924 }
925 925
926 void BytecodeGraphBuilder::VisitKeyedStoreICSloppy() { 926 void BytecodeGraphBuilder::VisitKeyedStoreICSloppy() {
927 BuildKeyedStore(LanguageMode::SLOPPY); 927 BuildKeyedStore(LanguageMode::SLOPPY);
928 } 928 }
929 929
930 void BytecodeGraphBuilder::VisitKeyedStoreICStrict() { 930 void BytecodeGraphBuilder::VisitKeyedStoreICStrict() {
931 BuildKeyedStore(LanguageMode::STRICT); 931 BuildKeyedStore(LanguageMode::STRICT);
932 } 932 }
(...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after
1813 // Phi does not exist yet, introduce one. 1813 // Phi does not exist yet, introduce one.
1814 value = NewPhi(inputs, value, control); 1814 value = NewPhi(inputs, value, control);
1815 value->ReplaceInput(inputs - 1, other); 1815 value->ReplaceInput(inputs - 1, other);
1816 } 1816 }
1817 return value; 1817 return value;
1818 } 1818 }
1819 1819
1820 } // namespace compiler 1820 } // namespace compiler
1821 } // namespace internal 1821 } // namespace internal
1822 } // namespace v8 1822 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/ast-graph-builder.cc ('k') | src/compiler/js-generic-lowering.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698