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

Side by Side Diff: src/full-codegen/ppc/full-codegen-ppc.cc

Issue 2107193002: [ic] Initialize feedback slots for LoadGlobalIC in Runtime::kDeclareGlobals when possible to ... (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebasing on top of Issue 2127583002 Patch 120001 Created 4 years, 5 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
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 #if V8_TARGET_ARCH_PPC 5 #if V8_TARGET_ARCH_PPC
6 6
7 #include "src/ast/scopes.h" 7 #include "src/ast/scopes.h"
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 VariableDeclaration* declaration) { 728 VariableDeclaration* declaration) {
729 // If it was not possible to allocate the variable at compile time, we 729 // If it was not possible to allocate the variable at compile time, we
730 // need to "declare" it at runtime to make sure it actually exists in the 730 // need to "declare" it at runtime to make sure it actually exists in the
731 // local context. 731 // local context.
732 VariableProxy* proxy = declaration->proxy(); 732 VariableProxy* proxy = declaration->proxy();
733 VariableMode mode = declaration->mode(); 733 VariableMode mode = declaration->mode();
734 Variable* variable = proxy->var(); 734 Variable* variable = proxy->var();
735 bool hole_init = mode == LET || mode == CONST; 735 bool hole_init = mode == LET || mode == CONST;
736 switch (variable->location()) { 736 switch (variable->location()) {
737 case VariableLocation::GLOBAL: 737 case VariableLocation::GLOBAL:
738 case VariableLocation::UNALLOCATED: 738 case VariableLocation::UNALLOCATED: {
739 DCHECK(!variable->binding_needs_init()); 739 DCHECK(!variable->binding_needs_init());
740 globals_->Add(variable->name(), zone()); 740 FeedbackVectorSlot slot = proxy->VariableFeedbackSlot();
741 DCHECK(!slot.IsInvalid());
742 globals_->Add(handle(Smi::FromInt(slot.ToInt()), isolate()), zone());
741 globals_->Add(isolate()->factory()->undefined_value(), zone()); 743 globals_->Add(isolate()->factory()->undefined_value(), zone());
742 break; 744 break;
743 745 }
744 case VariableLocation::PARAMETER: 746 case VariableLocation::PARAMETER:
745 case VariableLocation::LOCAL: 747 case VariableLocation::LOCAL:
746 if (hole_init) { 748 if (hole_init) {
747 Comment cmnt(masm_, "[ VariableDeclaration"); 749 Comment cmnt(masm_, "[ VariableDeclaration");
748 __ LoadRoot(ip, Heap::kTheHoleValueRootIndex); 750 __ LoadRoot(ip, Heap::kTheHoleValueRootIndex);
749 __ StoreP(ip, StackOperand(variable)); 751 __ StoreP(ip, StackOperand(variable));
750 } 752 }
751 break; 753 break;
752 754
753 case VariableLocation::CONTEXT: 755 case VariableLocation::CONTEXT:
(...skipping 21 matching lines...) Expand all
775 } 777 }
776 778
777 779
778 void FullCodeGenerator::VisitFunctionDeclaration( 780 void FullCodeGenerator::VisitFunctionDeclaration(
779 FunctionDeclaration* declaration) { 781 FunctionDeclaration* declaration) {
780 VariableProxy* proxy = declaration->proxy(); 782 VariableProxy* proxy = declaration->proxy();
781 Variable* variable = proxy->var(); 783 Variable* variable = proxy->var();
782 switch (variable->location()) { 784 switch (variable->location()) {
783 case VariableLocation::GLOBAL: 785 case VariableLocation::GLOBAL:
784 case VariableLocation::UNALLOCATED: { 786 case VariableLocation::UNALLOCATED: {
785 globals_->Add(variable->name(), zone()); 787 FeedbackVectorSlot slot = proxy->VariableFeedbackSlot();
788 DCHECK(!slot.IsInvalid());
789 globals_->Add(handle(Smi::FromInt(slot.ToInt()), isolate()), zone());
786 Handle<SharedFunctionInfo> function = 790 Handle<SharedFunctionInfo> function =
787 Compiler::GetSharedFunctionInfo(declaration->fun(), script(), info_); 791 Compiler::GetSharedFunctionInfo(declaration->fun(), script(), info_);
788 // Check for stack-overflow exception. 792 // Check for stack-overflow exception.
789 if (function.is_null()) return SetStackOverflow(); 793 if (function.is_null()) return SetStackOverflow();
790 globals_->Add(function, zone()); 794 globals_->Add(function, zone());
791 break; 795 break;
792 } 796 }
793 797
794 case VariableLocation::PARAMETER: 798 case VariableLocation::PARAMETER:
795 case VariableLocation::LOCAL: { 799 case VariableLocation::LOCAL: {
(...skipping 29 matching lines...) Expand all
825 break; 829 break;
826 } 830 }
827 } 831 }
828 } 832 }
829 833
830 834
831 void FullCodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) { 835 void FullCodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) {
832 // Call the runtime to declare the globals. 836 // Call the runtime to declare the globals.
833 __ mov(r4, Operand(pairs)); 837 __ mov(r4, Operand(pairs));
834 __ LoadSmiLiteral(r3, Smi::FromInt(DeclareGlobalsFlags())); 838 __ LoadSmiLiteral(r3, Smi::FromInt(DeclareGlobalsFlags()));
835 __ Push(r4, r3); 839 __ EmitLoadTypeFeedbackVector(r0);
840 __ Push(r4, r3, r0);
836 __ CallRuntime(Runtime::kDeclareGlobals); 841 __ CallRuntime(Runtime::kDeclareGlobals);
837 // Return value is ignored. 842 // Return value is ignored.
838 } 843 }
839 844
840 845
841 void FullCodeGenerator::VisitSwitchStatement(SwitchStatement* stmt) { 846 void FullCodeGenerator::VisitSwitchStatement(SwitchStatement* stmt) {
842 Comment cmnt(masm_, "[ SwitchStatement"); 847 Comment cmnt(masm_, "[ SwitchStatement");
843 Breakable nested_statement(this, stmt); 848 Breakable nested_statement(this, stmt);
844 SetStatementPosition(stmt); 849 SetStatementPosition(stmt);
845 850
(...skipping 2930 matching lines...) Expand 10 before | Expand all | Expand 10 after
3776 3781
3777 DCHECK(Assembler::IsCrSet(Assembler::instr_at(cmp_address))); 3782 DCHECK(Assembler::IsCrSet(Assembler::instr_at(cmp_address)));
3778 3783
3779 DCHECK(interrupt_address == 3784 DCHECK(interrupt_address ==
3780 isolate->builtins()->OnStackReplacement()->entry()); 3785 isolate->builtins()->OnStackReplacement()->entry());
3781 return ON_STACK_REPLACEMENT; 3786 return ON_STACK_REPLACEMENT;
3782 } 3787 }
3783 } // namespace internal 3788 } // namespace internal
3784 } // namespace v8 3789 } // namespace v8
3785 #endif // V8_TARGET_ARCH_PPC 3790 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/full-codegen/mips64/full-codegen-mips64.cc ('k') | src/full-codegen/s390/full-codegen-s390.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698