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

Side by Side Diff: src/ast.h

Issue 1083933002: Pass load ic state through the Oracle. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Adjust defaults. Created 5 years, 8 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 | « no previous file | src/compiler/js-type-feedback.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_AST_H_ 5 #ifndef V8_AST_H_
6 #define V8_AST_H_ 6 #define V8_AST_H_
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/assembler.h" 10 #include "src/assembler.h"
(...skipping 1728 matching lines...) Expand 10 before | Expand all | Expand 10 after
1739 bool IsMonomorphic() OVERRIDE { return receiver_types_.length() == 1; } 1739 bool IsMonomorphic() OVERRIDE { return receiver_types_.length() == 1; }
1740 SmallMapList* GetReceiverTypes() OVERRIDE { return &receiver_types_; } 1740 SmallMapList* GetReceiverTypes() OVERRIDE { return &receiver_types_; }
1741 KeyedAccessStoreMode GetStoreMode() const OVERRIDE { return STANDARD_STORE; } 1741 KeyedAccessStoreMode GetStoreMode() const OVERRIDE { return STANDARD_STORE; }
1742 IcCheckType GetKeyType() const OVERRIDE { 1742 IcCheckType GetKeyType() const OVERRIDE {
1743 return KeyTypeField::decode(bit_field_); 1743 return KeyTypeField::decode(bit_field_);
1744 } 1744 }
1745 bool IsUninitialized() const { 1745 bool IsUninitialized() const {
1746 return !is_for_call() && HasNoTypeInformation(); 1746 return !is_for_call() && HasNoTypeInformation();
1747 } 1747 }
1748 bool HasNoTypeInformation() const { 1748 bool HasNoTypeInformation() const {
1749 return IsUninitializedField::decode(bit_field_); 1749 return GetInlineCacheState() == UNINITIALIZED;
1750 } 1750 }
1751 void set_is_uninitialized(bool b) { 1751 InlineCacheState GetInlineCacheState() const {
1752 bit_field_ = IsUninitializedField::update(bit_field_, b); 1752 return InlineCacheStateField::decode(bit_field_);
1753 } 1753 }
1754 void set_is_string_access(bool b) { 1754 void set_is_string_access(bool b) {
1755 bit_field_ = IsStringAccessField::update(bit_field_, b); 1755 bit_field_ = IsStringAccessField::update(bit_field_, b);
1756 } 1756 }
1757 void set_key_type(IcCheckType key_type) { 1757 void set_key_type(IcCheckType key_type) {
1758 bit_field_ = KeyTypeField::update(bit_field_, key_type); 1758 bit_field_ = KeyTypeField::update(bit_field_, key_type);
1759 } 1759 }
1760 void set_inline_cache_state(InlineCacheState state) {
1761 bit_field_ = InlineCacheStateField::update(bit_field_, state);
1762 }
1760 void mark_for_call() { 1763 void mark_for_call() {
1761 bit_field_ = IsForCallField::update(bit_field_, true); 1764 bit_field_ = IsForCallField::update(bit_field_, true);
1762 } 1765 }
1763 bool is_for_call() const { return IsForCallField::decode(bit_field_); } 1766 bool is_for_call() const { return IsForCallField::decode(bit_field_); }
1764 1767
1765 bool IsSuperAccess() { 1768 bool IsSuperAccess() {
1766 return obj()->IsSuperReference(); 1769 return obj()->IsSuperReference();
1767 } 1770 }
1768 1771
1769 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( 1772 virtual FeedbackVectorRequirements ComputeFeedbackRequirements(
(...skipping 10 matching lines...) Expand all
1780 1783
1781 FeedbackVectorICSlot PropertyFeedbackSlot() const { 1784 FeedbackVectorICSlot PropertyFeedbackSlot() const {
1782 DCHECK(!FLAG_vector_ics || !property_feedback_slot_.IsInvalid()); 1785 DCHECK(!FLAG_vector_ics || !property_feedback_slot_.IsInvalid());
1783 return property_feedback_slot_; 1786 return property_feedback_slot_;
1784 } 1787 }
1785 1788
1786 protected: 1789 protected:
1787 Property(Zone* zone, Expression* obj, Expression* key, int pos) 1790 Property(Zone* zone, Expression* obj, Expression* key, int pos)
1788 : Expression(zone, pos), 1791 : Expression(zone, pos),
1789 bit_field_(IsForCallField::encode(false) | 1792 bit_field_(IsForCallField::encode(false) |
1790 IsUninitializedField::encode(false) | 1793 IsStringAccessField::encode(false) |
1791 IsStringAccessField::encode(false)), 1794 InlineCacheStateField::encode(UNINITIALIZED)),
1792 property_feedback_slot_(FeedbackVectorICSlot::Invalid()), 1795 property_feedback_slot_(FeedbackVectorICSlot::Invalid()),
1793 obj_(obj), 1796 obj_(obj),
1794 key_(key) {} 1797 key_(key) {}
1795 static int parent_num_ids() { return Expression::num_ids(); } 1798 static int parent_num_ids() { return Expression::num_ids(); }
1796 1799
1797 private: 1800 private:
1798 int local_id(int n) const { return base_id() + parent_num_ids() + n; } 1801 int local_id(int n) const { return base_id() + parent_num_ids() + n; }
1799 1802
1800 class IsForCallField : public BitField8<bool, 0, 1> {}; 1803 class IsForCallField : public BitField8<bool, 0, 1> {};
1801 class IsUninitializedField : public BitField8<bool, 1, 1> {}; 1804 class IsStringAccessField : public BitField8<bool, 1, 1> {};
1802 class IsStringAccessField : public BitField8<bool, 2, 1> {}; 1805 class KeyTypeField : public BitField8<IcCheckType, 2, 1> {};
1803 class KeyTypeField : public BitField8<IcCheckType, 3, 1> {}; 1806 class InlineCacheStateField : public BitField8<InlineCacheState, 3, 4> {};
1804 uint8_t bit_field_; 1807 uint8_t bit_field_;
1805 FeedbackVectorICSlot property_feedback_slot_; 1808 FeedbackVectorICSlot property_feedback_slot_;
1806 Expression* obj_; 1809 Expression* obj_;
1807 Expression* key_; 1810 Expression* key_;
1808 SmallMapList receiver_types_; 1811 SmallMapList receiver_types_;
1809 }; 1812 };
1810 1813
1811 1814
1812 class Call FINAL : public Expression { 1815 class Call FINAL : public Expression {
1813 public: 1816 public:
(...skipping 1763 matching lines...) Expand 10 before | Expand all | Expand 10 after
3577 3580
3578 private: 3581 private:
3579 Zone* zone_; 3582 Zone* zone_;
3580 AstValueFactory* ast_value_factory_; 3583 AstValueFactory* ast_value_factory_;
3581 }; 3584 };
3582 3585
3583 3586
3584 } } // namespace v8::internal 3587 } } // namespace v8::internal
3585 3588
3586 #endif // V8_AST_H_ 3589 #endif // V8_AST_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler/js-type-feedback.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698