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

Side by Side Diff: src/hydrogen-instructions.h

Issue 307593002: Preliminary support for block contexts in hydrogen. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Port to other architectures Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « src/hydrogen.cc ('k') | src/hydrogen-instructions.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ 5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_
6 #define V8_HYDROGEN_INSTRUCTIONS_H_ 6 #define V8_HYDROGEN_INSTRUCTIONS_H_
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/allocation.h" 10 #include "src/allocation.h"
(...skipping 28 matching lines...) Expand all
39 V(BinaryOperation) \ 39 V(BinaryOperation) \
40 V(BitwiseBinaryOperation) \ 40 V(BitwiseBinaryOperation) \
41 V(ControlInstruction) \ 41 V(ControlInstruction) \
42 V(Instruction) \ 42 V(Instruction) \
43 43
44 44
45 #define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \ 45 #define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \
46 V(AbnormalExit) \ 46 V(AbnormalExit) \
47 V(AccessArgumentsAt) \ 47 V(AccessArgumentsAt) \
48 V(Add) \ 48 V(Add) \
49 V(AllocateBlockContext) \
49 V(Allocate) \ 50 V(Allocate) \
50 V(ApplyArguments) \ 51 V(ApplyArguments) \
51 V(ArgumentsElements) \ 52 V(ArgumentsElements) \
52 V(ArgumentsLength) \ 53 V(ArgumentsLength) \
53 V(ArgumentsObject) \ 54 V(ArgumentsObject) \
54 V(Bitwise) \ 55 V(Bitwise) \
55 V(BlockEntry) \ 56 V(BlockEntry) \
56 V(BoundsCheck) \ 57 V(BoundsCheck) \
57 V(BoundsCheckBaseIndexInformation) \ 58 V(BoundsCheckBaseIndexInformation) \
58 V(Branch) \ 59 V(Branch) \
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 V(Ror) \ 134 V(Ror) \
134 V(Sar) \ 135 V(Sar) \
135 V(SeqStringGetChar) \ 136 V(SeqStringGetChar) \
136 V(SeqStringSetChar) \ 137 V(SeqStringSetChar) \
137 V(Shl) \ 138 V(Shl) \
138 V(Shr) \ 139 V(Shr) \
139 V(Simulate) \ 140 V(Simulate) \
140 V(StackCheck) \ 141 V(StackCheck) \
141 V(StoreCodeEntry) \ 142 V(StoreCodeEntry) \
142 V(StoreContextSlot) \ 143 V(StoreContextSlot) \
144 V(StoreFrameContext) \
143 V(StoreGlobalCell) \ 145 V(StoreGlobalCell) \
144 V(StoreKeyed) \ 146 V(StoreKeyed) \
145 V(StoreKeyedGeneric) \ 147 V(StoreKeyedGeneric) \
146 V(StoreNamedField) \ 148 V(StoreNamedField) \
147 V(StoreNamedGeneric) \ 149 V(StoreNamedGeneric) \
148 V(StringAdd) \ 150 V(StringAdd) \
149 V(StringCharCodeAt) \ 151 V(StringCharCodeAt) \
150 V(StringCharFromCode) \ 152 V(StringCharFromCode) \
151 V(StringCompareAndBranch) \ 153 V(StringCompareAndBranch) \
152 V(Sub) \ 154 V(Sub) \
(...skipping 5638 matching lines...) Expand 10 before | Expand all | Expand 10 after
5791 // Load and check the value of the context slot. Deoptimize if it's the 5793 // Load and check the value of the context slot. Deoptimize if it's the
5792 // hole value. This is used for checking for loading of uninitialized 5794 // hole value. This is used for checking for loading of uninitialized
5793 // harmony bindings where we deoptimize into full-codegen generated code 5795 // harmony bindings where we deoptimize into full-codegen generated code
5794 // which will subsequently throw a reference error. 5796 // which will subsequently throw a reference error.
5795 kCheckDeoptimize, 5797 kCheckDeoptimize,
5796 // Load and check the value of the context slot. Return undefined if it's 5798 // Load and check the value of the context slot. Return undefined if it's
5797 // the hole value. This is used for non-harmony const assignments 5799 // the hole value. This is used for non-harmony const assignments
5798 kCheckReturnUndefined 5800 kCheckReturnUndefined
5799 }; 5801 };
5800 5802
5801 HLoadContextSlot(HValue* context, Variable* var) 5803 HLoadContextSlot(HValue* context, int slot_index, Mode mode)
5802 : HUnaryOperation(context), slot_index_(var->index()) { 5804 : HUnaryOperation(context), slot_index_(slot_index), mode_(mode) {
5803 ASSERT(var->IsContextSlot());
5804 switch (var->mode()) {
5805 case LET:
5806 case CONST:
5807 mode_ = kCheckDeoptimize;
5808 break;
5809 case CONST_LEGACY:
5810 mode_ = kCheckReturnUndefined;
5811 break;
5812 default:
5813 mode_ = kNoCheck;
5814 }
5815 set_representation(Representation::Tagged()); 5805 set_representation(Representation::Tagged());
5816 SetFlag(kUseGVN); 5806 SetFlag(kUseGVN);
5817 SetDependsOnFlag(kContextSlots); 5807 SetDependsOnFlag(kContextSlots);
5818 } 5808 }
5819 5809
5820 int slot_index() const { return slot_index_; } 5810 int slot_index() const { return slot_index_; }
5821 Mode mode() const { return mode_; } 5811 Mode mode() const { return mode_; }
5822 5812
5823 bool DeoptimizesOnHole() { 5813 bool DeoptimizesOnHole() {
5824 return mode_ == kCheckDeoptimize; 5814 return mode_ == kCheckDeoptimize;
(...skipping 1885 matching lines...) Expand 10 before | Expand all | Expand 10 after
7710 return HType::Tagged(); 7700 return HType::Tagged();
7711 } 7701 }
7712 7702
7713 DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex); 7703 DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex);
7714 7704
7715 private: 7705 private:
7716 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 7706 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
7717 }; 7707 };
7718 7708
7719 7709
7710 class HStoreFrameContext: public HUnaryOperation {
7711 public:
7712 DECLARE_INSTRUCTION_FACTORY_P1(HStoreFrameContext, HValue*);
7713
7714 HValue* context() { return OperandAt(0); }
7715
7716 virtual Representation RequiredInputRepresentation(int index) {
7717 return Representation::Tagged();
7718 }
7719
7720 DECLARE_CONCRETE_INSTRUCTION(StoreFrameContext)
7721 private:
7722 explicit HStoreFrameContext(HValue* context)
7723 : HUnaryOperation(context) {
7724 set_representation(Representation::Tagged());
7725 SetChangesFlag(kContextSlots);
7726 }
7727 };
7728
7729
7730 class HAllocateBlockContext: public HTemplateInstruction<2> {
7731 public:
7732 DECLARE_INSTRUCTION_FACTORY_P3(HAllocateBlockContext, HValue*,
7733 HValue*, Handle<ScopeInfo>);
7734 HValue* context() { return OperandAt(0); }
7735 HValue* function() { return OperandAt(1); }
7736 Handle<ScopeInfo> scope_info() { return scope_info_; }
7737
7738 virtual Representation RequiredInputRepresentation(int index) {
7739 return Representation::Tagged();
7740 }
7741
7742 virtual void PrintDataTo(StringStream* stream);
7743
7744 DECLARE_CONCRETE_INSTRUCTION(AllocateBlockContext)
7745
7746 private:
7747 HAllocateBlockContext(HValue* context,
7748 HValue* function,
7749 Handle<ScopeInfo> scope_info)
7750 : scope_info_(scope_info) {
7751 SetOperandAt(0, context);
7752 SetOperandAt(1, function);
7753 set_representation(Representation::Tagged());
7754 }
7755
7756 Handle<ScopeInfo> scope_info_;
7757 };
7758
7759
7760
7720 #undef DECLARE_INSTRUCTION 7761 #undef DECLARE_INSTRUCTION
7721 #undef DECLARE_CONCRETE_INSTRUCTION 7762 #undef DECLARE_CONCRETE_INSTRUCTION
7722 7763
7723 } } // namespace v8::internal 7764 } } // namespace v8::internal
7724 7765
7725 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 7766 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« no previous file with comments | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698