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

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

Issue 9616014: Improve polymorphic loads on single slots. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix two minor issues. Created 8 years, 9 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
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 V(CallKeyed) \ 79 V(CallKeyed) \
80 V(CallKnownGlobal) \ 80 V(CallKnownGlobal) \
81 V(CallNamed) \ 81 V(CallNamed) \
82 V(CallNew) \ 82 V(CallNew) \
83 V(CallRuntime) \ 83 V(CallRuntime) \
84 V(CallStub) \ 84 V(CallStub) \
85 V(Change) \ 85 V(Change) \
86 V(CheckFunction) \ 86 V(CheckFunction) \
87 V(CheckInstanceType) \ 87 V(CheckInstanceType) \
88 V(CheckMap) \ 88 V(CheckMap) \
89 V(CheckMapSet) \
89 V(CheckNonSmi) \ 90 V(CheckNonSmi) \
90 V(CheckPrototypeMaps) \ 91 V(CheckPrototypeMaps) \
91 V(CheckSmi) \ 92 V(CheckSmi) \
92 V(ClampToUint8) \ 93 V(ClampToUint8) \
93 V(ClassOfTestAndBranch) \ 94 V(ClassOfTestAndBranch) \
94 V(CompareIDAndBranch) \ 95 V(CompareIDAndBranch) \
95 V(CompareGeneric) \ 96 V(CompareGeneric) \
96 V(CompareObjectEqAndBranch) \ 97 V(CompareObjectEqAndBranch) \
97 V(CompareMap) \ 98 V(CompareMap) \
98 V(CompareConstantEqAndBranch) \ 99 V(CompareConstantEqAndBranch) \
(...skipping 1944 matching lines...) Expand 10 before | Expand all | Expand 10 after
2043 (b->mode() == mode() || !has_element_transitions_); 2044 (b->mode() == mode() || !has_element_transitions_);
2044 } 2045 }
2045 2046
2046 private: 2047 private:
2047 bool has_element_transitions_; 2048 bool has_element_transitions_;
2048 Handle<Map> map_; 2049 Handle<Map> map_;
2049 CompareMapMode mode_; 2050 CompareMapMode mode_;
2050 }; 2051 };
2051 2052
2052 2053
2054 class HCheckMapSet: public HTemplateInstruction<1> {
danno 2012/03/09 11:52:58 Please merge with HCheckMap as discussed
Michael Starzinger 2012/03/12 11:37:11 Done. HCheckMap now works with a SmallMapList back
2055 public:
2056 HCheckMapSet(HValue* value, SmallMapList* map_set) : map_set_(map_set) {
2057 map_set->Sort();
2058 SetOperandAt(0, value);
2059 set_representation(Representation::Tagged());
2060 SetFlag(kUseGVN);
2061 SetGVNFlag(kDependsOnMaps);
2062 SetGVNFlag(kDependsOnElementsKind);
2063 }
2064
2065 virtual Representation RequiredInputRepresentation(int index) {
2066 return Representation::Tagged();
2067 }
2068 virtual void PrintDataTo(StringStream* stream);
2069
2070 HValue* value() { return OperandAt(0); }
2071 SmallMapList* map_set() const { return map_set_; }
2072
2073 DECLARE_CONCRETE_INSTRUCTION(CheckMapSet)
2074
2075 protected:
2076 virtual bool DataEquals(HValue* other) {
danno 2012/03/09 11:52:58 Fast case single maps by just comparing b->map_set
Michael Starzinger 2012/03/12 11:37:11 The backing SmallMapList cannot be compared by ref
2077 HCheckMapSet* b = HCheckMapSet::cast(other);
2078 // Relies on the fact that map_set has been sorted before.
2079 if (map_set_->length() != b->map_set()->length()) return false;
2080 for (int i = 0; i < map_set_->length(); i++) {
2081 if (!map_set_->at(i).is_identical_to(b->map_set()->at(i))) return false;
2082 }
2083 return true;
2084 }
2085
2086 private:
2087 SmallMapList* map_set_;
2088 };
2089
2090
2053 class HCheckFunction: public HUnaryOperation { 2091 class HCheckFunction: public HUnaryOperation {
2054 public: 2092 public:
2055 HCheckFunction(HValue* value, Handle<JSFunction> function) 2093 HCheckFunction(HValue* value, Handle<JSFunction> function)
2056 : HUnaryOperation(value), target_(function) { 2094 : HUnaryOperation(value), target_(function) {
2057 set_representation(Representation::Tagged()); 2095 set_representation(Representation::Tagged());
2058 SetFlag(kUseGVN); 2096 SetFlag(kUseGVN);
2059 } 2097 }
2060 2098
2061 virtual Representation RequiredInputRepresentation(int index) { 2099 virtual Representation RequiredInputRepresentation(int index) {
2062 return Representation::Tagged(); 2100 return Representation::Tagged();
(...skipping 2714 matching lines...) Expand 10 before | Expand all | Expand 10 after
4777 DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex); 4815 DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex);
4778 }; 4816 };
4779 4817
4780 4818
4781 #undef DECLARE_INSTRUCTION 4819 #undef DECLARE_INSTRUCTION
4782 #undef DECLARE_CONCRETE_INSTRUCTION 4820 #undef DECLARE_CONCRETE_INSTRUCTION
4783 4821
4784 } } // namespace v8::internal 4822 } } // namespace v8::internal
4785 4823
4786 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 4824 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« src/hydrogen.cc ('K') | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698