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

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

Issue 641373002: Introduce FeedbackVectorSlot type - better than int. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Ports. Created 6 years, 2 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/full-codegen.cc ('k') | src/ia32/full-codegen-ia32.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 <iosfwd> 8 #include <iosfwd>
9 9
10 #include "src/v8.h" 10 #include "src/v8.h"
(...skipping 5456 matching lines...) Expand 10 before | Expand all | Expand 10 after
5467 5467
5468 class HLoadGlobalGeneric FINAL : public HTemplateInstruction<2> { 5468 class HLoadGlobalGeneric FINAL : public HTemplateInstruction<2> {
5469 public: 5469 public:
5470 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalGeneric, HValue*, 5470 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalGeneric, HValue*,
5471 Handle<String>, bool); 5471 Handle<String>, bool);
5472 5472
5473 HValue* context() { return OperandAt(0); } 5473 HValue* context() { return OperandAt(0); }
5474 HValue* global_object() { return OperandAt(1); } 5474 HValue* global_object() { return OperandAt(1); }
5475 Handle<String> name() const { return name_; } 5475 Handle<String> name() const { return name_; }
5476 bool for_typeof() const { return for_typeof_; } 5476 bool for_typeof() const { return for_typeof_; }
5477 int slot() const { 5477 FeedbackVectorSlot slot() const {
5478 DCHECK(FLAG_vector_ics && slot_ != AstNode::kInvalidFeedbackSlot); 5478 DCHECK(FLAG_vector_ics && !slot_.IsInvalid());
5479 return slot_; 5479 return slot_;
5480 } 5480 }
5481 Handle<FixedArray> feedback_vector() const { return feedback_vector_; } 5481 Handle<FixedArray> feedback_vector() const { return feedback_vector_; }
5482 void SetVectorAndSlot(Handle<FixedArray> vector, int slot) { 5482 void SetVectorAndSlot(Handle<FixedArray> vector, FeedbackVectorSlot slot) {
5483 DCHECK(FLAG_vector_ics); 5483 DCHECK(FLAG_vector_ics);
5484 feedback_vector_ = vector; 5484 feedback_vector_ = vector;
5485 slot_ = slot; 5485 slot_ = slot;
5486 } 5486 }
5487 5487
5488 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT 5488 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5489 5489
5490 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5490 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
5491 return Representation::Tagged(); 5491 return Representation::Tagged();
5492 } 5492 }
5493 5493
5494 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric) 5494 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric)
5495 5495
5496 private: 5496 private:
5497 HLoadGlobalGeneric(HValue* context, HValue* global_object, 5497 HLoadGlobalGeneric(HValue* context, HValue* global_object,
5498 Handle<String> name, bool for_typeof) 5498 Handle<String> name, bool for_typeof)
5499 : name_(name), 5499 : name_(name),
5500 for_typeof_(for_typeof), 5500 for_typeof_(for_typeof),
5501 slot_(AstNode::kInvalidFeedbackSlot) { 5501 slot_(FeedbackVectorSlot::Invalid()) {
5502 SetOperandAt(0, context); 5502 SetOperandAt(0, context);
5503 SetOperandAt(1, global_object); 5503 SetOperandAt(1, global_object);
5504 set_representation(Representation::Tagged()); 5504 set_representation(Representation::Tagged());
5505 SetAllSideEffects(); 5505 SetAllSideEffects();
5506 } 5506 }
5507 5507
5508 Handle<String> name_; 5508 Handle<String> name_;
5509 bool for_typeof_; 5509 bool for_typeof_;
5510 Handle<FixedArray> feedback_vector_; 5510 Handle<FixedArray> feedback_vector_;
5511 int slot_; 5511 FeedbackVectorSlot slot_;
5512 }; 5512 };
5513 5513
5514 5514
5515 class HAllocate FINAL : public HTemplateInstruction<2> { 5515 class HAllocate FINAL : public HTemplateInstruction<2> {
5516 public: 5516 public:
5517 static bool CompatibleInstanceTypes(InstanceType type1, 5517 static bool CompatibleInstanceTypes(InstanceType type1,
5518 InstanceType type2) { 5518 InstanceType type2) {
5519 return ComputeFlags(TENURED, type1) == ComputeFlags(TENURED, type2) && 5519 return ComputeFlags(TENURED, type1) == ComputeFlags(TENURED, type2) &&
5520 ComputeFlags(NOT_TENURED, type1) == ComputeFlags(NOT_TENURED, type2); 5520 ComputeFlags(NOT_TENURED, type1) == ComputeFlags(NOT_TENURED, type2);
5521 } 5521 }
(...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
6472 6472
6473 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> { 6473 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> {
6474 public: 6474 public:
6475 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*, 6475 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*,
6476 Handle<Object>); 6476 Handle<Object>);
6477 6477
6478 HValue* context() const { return OperandAt(0); } 6478 HValue* context() const { return OperandAt(0); }
6479 HValue* object() const { return OperandAt(1); } 6479 HValue* object() const { return OperandAt(1); }
6480 Handle<Object> name() const { return name_; } 6480 Handle<Object> name() const { return name_; }
6481 6481
6482 int slot() const { 6482 FeedbackVectorSlot slot() const {
6483 DCHECK(FLAG_vector_ics && slot_ != AstNode::kInvalidFeedbackSlot); 6483 DCHECK(FLAG_vector_ics && !slot_.IsInvalid());
6484 return slot_; 6484 return slot_;
6485 } 6485 }
6486 Handle<FixedArray> feedback_vector() const { return feedback_vector_; } 6486 Handle<FixedArray> feedback_vector() const { return feedback_vector_; }
6487 void SetVectorAndSlot(Handle<FixedArray> vector, int slot) { 6487 void SetVectorAndSlot(Handle<FixedArray> vector, FeedbackVectorSlot slot) {
6488 DCHECK(FLAG_vector_ics); 6488 DCHECK(FLAG_vector_ics);
6489 feedback_vector_ = vector; 6489 feedback_vector_ = vector;
6490 slot_ = slot; 6490 slot_ = slot;
6491 } 6491 }
6492 6492
6493 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 6493 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
6494 return Representation::Tagged(); 6494 return Representation::Tagged();
6495 } 6495 }
6496 6496
6497 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT 6497 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
6498 6498
6499 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric) 6499 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric)
6500 6500
6501 private: 6501 private:
6502 HLoadNamedGeneric(HValue* context, HValue* object, Handle<Object> name) 6502 HLoadNamedGeneric(HValue* context, HValue* object, Handle<Object> name)
6503 : name_(name), slot_(AstNode::kInvalidFeedbackSlot) { 6503 : name_(name), slot_(FeedbackVectorSlot::Invalid()) {
6504 SetOperandAt(0, context); 6504 SetOperandAt(0, context);
6505 SetOperandAt(1, object); 6505 SetOperandAt(1, object);
6506 set_representation(Representation::Tagged()); 6506 set_representation(Representation::Tagged());
6507 SetAllSideEffects(); 6507 SetAllSideEffects();
6508 } 6508 }
6509 6509
6510 Handle<Object> name_; 6510 Handle<Object> name_;
6511 Handle<FixedArray> feedback_vector_; 6511 Handle<FixedArray> feedback_vector_;
6512 int slot_; 6512 FeedbackVectorSlot slot_;
6513 }; 6513 };
6514 6514
6515 6515
6516 class HLoadFunctionPrototype FINAL : public HUnaryOperation { 6516 class HLoadFunctionPrototype FINAL : public HUnaryOperation {
6517 public: 6517 public:
6518 DECLARE_INSTRUCTION_FACTORY_P1(HLoadFunctionPrototype, HValue*); 6518 DECLARE_INSTRUCTION_FACTORY_P1(HLoadFunctionPrototype, HValue*);
6519 6519
6520 HValue* function() { return OperandAt(0); } 6520 HValue* function() { return OperandAt(0); }
6521 6521
6522 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 6522 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
6748 }; 6748 };
6749 6749
6750 6750
6751 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> { 6751 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> {
6752 public: 6752 public:
6753 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*, 6753 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*,
6754 HValue*); 6754 HValue*);
6755 HValue* object() const { return OperandAt(0); } 6755 HValue* object() const { return OperandAt(0); }
6756 HValue* key() const { return OperandAt(1); } 6756 HValue* key() const { return OperandAt(1); }
6757 HValue* context() const { return OperandAt(2); } 6757 HValue* context() const { return OperandAt(2); }
6758 int slot() const { 6758 FeedbackVectorSlot slot() const {
6759 DCHECK(FLAG_vector_ics && slot_ != AstNode::kInvalidFeedbackSlot); 6759 DCHECK(FLAG_vector_ics && !slot_.IsInvalid());
6760 return slot_; 6760 return slot_;
6761 } 6761 }
6762 Handle<FixedArray> feedback_vector() const { return feedback_vector_; } 6762 Handle<FixedArray> feedback_vector() const { return feedback_vector_; }
6763 void SetVectorAndSlot(Handle<FixedArray> vector, int slot) { 6763 void SetVectorAndSlot(Handle<FixedArray> vector, FeedbackVectorSlot slot) {
6764 DCHECK(FLAG_vector_ics); 6764 DCHECK(FLAG_vector_ics);
6765 feedback_vector_ = vector; 6765 feedback_vector_ = vector;
6766 slot_ = slot; 6766 slot_ = slot;
6767 } 6767 }
6768 6768
6769 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT 6769 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
6770 6770
6771 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 6771 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
6772 // tagged[tagged] 6772 // tagged[tagged]
6773 return Representation::Tagged(); 6773 return Representation::Tagged();
6774 } 6774 }
6775 6775
6776 virtual HValue* Canonicalize() OVERRIDE; 6776 virtual HValue* Canonicalize() OVERRIDE;
6777 6777
6778 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric) 6778 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric)
6779 6779
6780 private: 6780 private:
6781 HLoadKeyedGeneric(HValue* context, HValue* obj, HValue* key) 6781 HLoadKeyedGeneric(HValue* context, HValue* obj, HValue* key)
6782 : slot_(AstNode::kInvalidFeedbackSlot) { 6782 : slot_(FeedbackVectorSlot::Invalid()) {
6783 set_representation(Representation::Tagged()); 6783 set_representation(Representation::Tagged());
6784 SetOperandAt(0, obj); 6784 SetOperandAt(0, obj);
6785 SetOperandAt(1, key); 6785 SetOperandAt(1, key);
6786 SetOperandAt(2, context); 6786 SetOperandAt(2, context);
6787 SetAllSideEffects(); 6787 SetAllSideEffects();
6788 } 6788 }
6789 6789
6790 Handle<FixedArray> feedback_vector_; 6790 Handle<FixedArray> feedback_vector_;
6791 int slot_; 6791 FeedbackVectorSlot slot_;
6792 }; 6792 };
6793 6793
6794 6794
6795 // Indicates whether the store is a store to an entry that was previously 6795 // Indicates whether the store is a store to an entry that was previously
6796 // initialized or not. 6796 // initialized or not.
6797 enum StoreFieldOrKeyedMode { 6797 enum StoreFieldOrKeyedMode {
6798 // The entry could be either previously initialized or not. 6798 // The entry could be either previously initialized or not.
6799 INITIALIZING_STORE, 6799 INITIALIZING_STORE,
6800 // At the time of this store it is guaranteed that the entry is already 6800 // At the time of this store it is guaranteed that the entry is already
6801 // initialized. 6801 // initialized.
(...skipping 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after
7896 }; 7896 };
7897 7897
7898 7898
7899 7899
7900 #undef DECLARE_INSTRUCTION 7900 #undef DECLARE_INSTRUCTION
7901 #undef DECLARE_CONCRETE_INSTRUCTION 7901 #undef DECLARE_CONCRETE_INSTRUCTION
7902 7902
7903 } } // namespace v8::internal 7903 } } // namespace v8::internal
7904 7904
7905 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 7905 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« no previous file with comments | « src/full-codegen.cc ('k') | src/ia32/full-codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698