OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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_COMPILER_JS_NATIVE_CONTEXT_SPECIALIZATION_H_ | 5 #ifndef V8_COMPILER_JS_NATIVE_CONTEXT_SPECIALIZATION_H_ |
6 #define V8_COMPILER_JS_NATIVE_CONTEXT_SPECIALIZATION_H_ | 6 #define V8_COMPILER_JS_NATIVE_CONTEXT_SPECIALIZATION_H_ |
7 | 7 |
8 #include "src/base/flags.h" | 8 #include "src/base/flags.h" |
9 #include "src/compiler/graph-reducer.h" | 9 #include "src/compiler/graph-reducer.h" |
10 #include "src/deoptimize-reason.h" | 10 #include "src/deoptimize-reason.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 CompilationDependencies* dependencies, | 50 CompilationDependencies* dependencies, |
51 Zone* zone); | 51 Zone* zone); |
52 | 52 |
53 Reduction Reduce(Node* node) final; | 53 Reduction Reduce(Node* node) final; |
54 | 54 |
55 private: | 55 private: |
56 Reduction ReduceJSGetSuperConstructor(Node* node); | 56 Reduction ReduceJSGetSuperConstructor(Node* node); |
57 Reduction ReduceJSInstanceOf(Node* node); | 57 Reduction ReduceJSInstanceOf(Node* node); |
58 Reduction ReduceJSOrdinaryHasInstance(Node* node); | 58 Reduction ReduceJSOrdinaryHasInstance(Node* node); |
59 Reduction ReduceJSLoadContext(Node* node); | 59 Reduction ReduceJSLoadContext(Node* node); |
| 60 Reduction ReduceJSLoadGlobal(Node* node); |
| 61 Reduction ReduceJSStoreGlobal(Node* node); |
60 Reduction ReduceJSLoadNamed(Node* node); | 62 Reduction ReduceJSLoadNamed(Node* node); |
61 Reduction ReduceJSStoreNamed(Node* node); | 63 Reduction ReduceJSStoreNamed(Node* node); |
62 Reduction ReduceJSLoadProperty(Node* node); | 64 Reduction ReduceJSLoadProperty(Node* node); |
63 Reduction ReduceJSStoreProperty(Node* node); | 65 Reduction ReduceJSStoreProperty(Node* node); |
64 Reduction ReduceJSStoreDataPropertyInLiteral(Node* node); | 66 Reduction ReduceJSStoreDataPropertyInLiteral(Node* node); |
65 | 67 |
66 Reduction ReduceElementAccess(Node* node, Node* index, Node* value, | 68 Reduction ReduceElementAccess(Node* node, Node* index, Node* value, |
67 MapHandleList const& receiver_maps, | 69 MapHandleList const& receiver_maps, |
68 AccessMode access_mode, | 70 AccessMode access_mode, |
69 LanguageMode language_mode, | 71 LanguageMode language_mode, |
70 KeyedAccessStoreMode store_mode); | 72 KeyedAccessStoreMode store_mode); |
71 template <typename KeyedICNexus> | 73 template <typename KeyedICNexus> |
72 Reduction ReduceKeyedAccess(Node* node, Node* index, Node* value, | 74 Reduction ReduceKeyedAccess(Node* node, Node* index, Node* value, |
73 KeyedICNexus const& nexus, AccessMode access_mode, | 75 KeyedICNexus const& nexus, AccessMode access_mode, |
74 LanguageMode language_mode, | 76 LanguageMode language_mode, |
75 KeyedAccessStoreMode store_mode); | 77 KeyedAccessStoreMode store_mode); |
76 Reduction ReduceNamedAccessFromNexus(Node* node, Node* value, | 78 Reduction ReduceNamedAccessFromNexus(Node* node, Node* value, |
77 FeedbackNexus const& nexus, | 79 FeedbackNexus const& nexus, |
78 Handle<Name> name, | 80 Handle<Name> name, |
79 AccessMode access_mode, | 81 AccessMode access_mode, |
80 LanguageMode language_mode); | 82 LanguageMode language_mode); |
81 Reduction ReduceNamedAccess(Node* node, Node* value, | 83 Reduction ReduceNamedAccess(Node* node, Node* value, |
82 MapHandleList const& receiver_maps, | 84 MapHandleList const& receiver_maps, |
83 Handle<Name> name, AccessMode access_mode, | 85 Handle<Name> name, AccessMode access_mode, |
84 LanguageMode language_mode, | 86 LanguageMode language_mode, |
85 Handle<TypeFeedbackVector> vector, | 87 Handle<TypeFeedbackVector> vector, |
86 FeedbackVectorSlot slot, Node* index = nullptr); | 88 FeedbackVectorSlot slot, Node* index = nullptr); |
| 89 Reduction ReduceGlobalAccess(Node* node, Node* receiver, Node* value, |
| 90 Handle<Name> name, AccessMode access_mode); |
87 | 91 |
88 Reduction ReduceSoftDeoptimize(Node* node, DeoptimizeReason reason); | 92 Reduction ReduceSoftDeoptimize(Node* node, DeoptimizeReason reason); |
89 | 93 |
90 // A triple of nodes that represents a continuation. | 94 // A triple of nodes that represents a continuation. |
91 class ValueEffectControl final { | 95 class ValueEffectControl final { |
92 public: | 96 public: |
93 ValueEffectControl(Node* value, Node* effect, Node* control) | 97 ValueEffectControl(Node* value, Node* effect, Node* control) |
94 : value_(value), effect_(effect), control_(control) {} | 98 : value_(value), effect_(effect), control_(control) {} |
95 | 99 |
96 Node* value() const { return value_; } | 100 Node* value() const { return value_; } |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 // Try to infer a root map for the {receiver} independent of the current | 153 // Try to infer a root map for the {receiver} independent of the current |
150 // program location. | 154 // program location. |
151 MaybeHandle<Map> InferReceiverRootMap(Node* receiver); | 155 MaybeHandle<Map> InferReceiverRootMap(Node* receiver); |
152 | 156 |
153 ValueEffectControl InlineApiCall( | 157 ValueEffectControl InlineApiCall( |
154 Node* receiver, Node* context, Node* target, Node* frame_state, | 158 Node* receiver, Node* context, Node* target, Node* frame_state, |
155 Node* parameter, Node* effect, Node* control, | 159 Node* parameter, Node* effect, Node* control, |
156 Handle<SharedFunctionInfo> shared_info, | 160 Handle<SharedFunctionInfo> shared_info, |
157 Handle<FunctionTemplateInfo> function_template_info); | 161 Handle<FunctionTemplateInfo> function_template_info); |
158 | 162 |
| 163 // Script context lookup logic. |
| 164 struct ScriptContextTableLookupResult; |
| 165 bool LookupInScriptContextTable(Handle<Name> name, |
| 166 ScriptContextTableLookupResult* result); |
| 167 |
159 Graph* graph() const; | 168 Graph* graph() const; |
160 JSGraph* jsgraph() const { return jsgraph_; } | 169 JSGraph* jsgraph() const { return jsgraph_; } |
161 Isolate* isolate() const; | 170 Isolate* isolate() const; |
162 Factory* factory() const; | 171 Factory* factory() const; |
163 CommonOperatorBuilder* common() const; | 172 CommonOperatorBuilder* common() const; |
164 JSOperatorBuilder* javascript() const; | 173 JSOperatorBuilder* javascript() const; |
165 SimplifiedOperatorBuilder* simplified() const; | 174 SimplifiedOperatorBuilder* simplified() const; |
166 MachineOperatorBuilder* machine() const; | 175 MachineOperatorBuilder* machine() const; |
167 Flags flags() const { return flags_; } | 176 Flags flags() const { return flags_; } |
| 177 Handle<JSGlobalObject> global_object() const { return global_object_; } |
| 178 Handle<JSGlobalProxy> global_proxy() const { return global_proxy_; } |
168 Handle<Context> native_context() const { return native_context_; } | 179 Handle<Context> native_context() const { return native_context_; } |
169 CompilationDependencies* dependencies() const { return dependencies_; } | 180 CompilationDependencies* dependencies() const { return dependencies_; } |
170 Zone* zone() const { return zone_; } | 181 Zone* zone() const { return zone_; } |
171 | 182 |
172 JSGraph* const jsgraph_; | 183 JSGraph* const jsgraph_; |
173 Flags const flags_; | 184 Flags const flags_; |
| 185 Handle<JSGlobalObject> global_object_; |
| 186 Handle<JSGlobalProxy> global_proxy_; |
174 Handle<Context> native_context_; | 187 Handle<Context> native_context_; |
175 CompilationDependencies* const dependencies_; | 188 CompilationDependencies* const dependencies_; |
176 Zone* const zone_; | 189 Zone* const zone_; |
177 TypeCache const& type_cache_; | 190 TypeCache const& type_cache_; |
178 | 191 |
179 DISALLOW_COPY_AND_ASSIGN(JSNativeContextSpecialization); | 192 DISALLOW_COPY_AND_ASSIGN(JSNativeContextSpecialization); |
180 }; | 193 }; |
181 | 194 |
182 DEFINE_OPERATORS_FOR_FLAGS(JSNativeContextSpecialization::Flags) | 195 DEFINE_OPERATORS_FOR_FLAGS(JSNativeContextSpecialization::Flags) |
183 | 196 |
184 } // namespace compiler | 197 } // namespace compiler |
185 } // namespace internal | 198 } // namespace internal |
186 } // namespace v8 | 199 } // namespace v8 |
187 | 200 |
188 #endif // V8_COMPILER_JS_NATIVE_CONTEXT_SPECIALIZATION_H_ | 201 #endif // V8_COMPILER_JS_NATIVE_CONTEXT_SPECIALIZATION_H_ |
OLD | NEW |