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

Side by Side Diff: src/compiler/js-native-context-specialization.h

Issue 2406803002: [turbofan] Enforce native context specialization. (Closed)
Patch Set: Remove unused variables Created 4 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
OLDNEW
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 28 matching lines...) Expand all
39 // Flags that control the mode of operation. 39 // Flags that control the mode of operation.
40 enum Flag { 40 enum Flag {
41 kNoFlags = 0u, 41 kNoFlags = 0u,
42 kAccessorInliningEnabled = 1u << 0, 42 kAccessorInliningEnabled = 1u << 0,
43 kBailoutOnUninitialized = 1u << 1, 43 kBailoutOnUninitialized = 1u << 1,
44 kDeoptimizationEnabled = 1u << 2, 44 kDeoptimizationEnabled = 1u << 2,
45 }; 45 };
46 typedef base::Flags<Flag> Flags; 46 typedef base::Flags<Flag> Flags;
47 47
48 JSNativeContextSpecialization(Editor* editor, JSGraph* jsgraph, Flags flags, 48 JSNativeContextSpecialization(Editor* editor, JSGraph* jsgraph, Flags flags,
49 MaybeHandle<Context> native_context, 49 Handle<Context> native_context,
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 ReduceJSLoadContext(Node* node); 56 Reduction ReduceJSLoadContext(Node* node);
57 Reduction ReduceJSLoadNamed(Node* node); 57 Reduction ReduceJSLoadNamed(Node* node);
58 Reduction ReduceJSStoreNamed(Node* node); 58 Reduction ReduceJSStoreNamed(Node* node);
59 Reduction ReduceJSLoadProperty(Node* node); 59 Reduction ReduceJSLoadProperty(Node* node);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 Node* const value_; 96 Node* const value_;
97 Node* const effect_; 97 Node* const effect_;
98 Node* const control_; 98 Node* const control_;
99 }; 99 };
100 100
101 // Construct the appropriate subgraph for property access. 101 // Construct the appropriate subgraph for property access.
102 ValueEffectControl BuildPropertyAccess(Node* receiver, Node* value, 102 ValueEffectControl BuildPropertyAccess(Node* receiver, Node* value,
103 Node* context, Node* frame_state, 103 Node* context, Node* frame_state,
104 Node* effect, Node* control, 104 Node* effect, Node* control,
105 Handle<Name> name, 105 Handle<Name> name,
106 Handle<Context> native_context,
107 PropertyAccessInfo const& access_info, 106 PropertyAccessInfo const& access_info,
108 AccessMode access_mode); 107 AccessMode access_mode);
109 108
110 // Construct the appropriate subgraph for element access. 109 // Construct the appropriate subgraph for element access.
111 ValueEffectControl BuildElementAccess( 110 ValueEffectControl BuildElementAccess(Node* receiver, Node* index,
112 Node* receiver, Node* index, Node* value, Node* effect, Node* control, 111 Node* value, Node* effect,
113 Handle<Context> native_context, ElementAccessInfo const& access_info, 112 Node* control,
114 AccessMode access_mode, KeyedAccessStoreMode store_mode); 113 ElementAccessInfo const& access_info,
114 AccessMode access_mode,
115 KeyedAccessStoreMode store_mode);
115 116
116 // Construct an appropriate map check. 117 // Construct an appropriate map check.
117 Node* BuildCheckMaps(Node* receiver, Node* effect, Node* control, 118 Node* BuildCheckMaps(Node* receiver, Node* effect, Node* control,
118 std::vector<Handle<Map>> const& maps); 119 std::vector<Handle<Map>> const& maps);
119 120
120 // Construct an appropriate heap object check. 121 // Construct an appropriate heap object check.
121 Node* BuildCheckHeapObject(Node* receiver, Node* effect, Node* control); 122 Node* BuildCheckHeapObject(Node* receiver, Node* effect, Node* control);
122 123
123 // Adds stability dependencies on all prototypes of every class in 124 // Adds stability dependencies on all prototypes of every class in
124 // {receiver_type} up to (and including) the {holder}. 125 // {receiver_type} up to (and including) the {holder}.
125 void AssumePrototypesStable(std::vector<Handle<Map>> const& receiver_maps, 126 void AssumePrototypesStable(std::vector<Handle<Map>> const& receiver_maps,
126 Handle<Context> native_context,
127 Handle<JSObject> holder); 127 Handle<JSObject> holder);
128 128
129 // Checks if we can turn the hole into undefined when loading an element 129 // Checks if we can turn the hole into undefined when loading an element
130 // from an object with one of the {receiver_maps}; sets up appropriate 130 // from an object with one of the {receiver_maps}; sets up appropriate
131 // code dependencies and might use the array protector cell. 131 // code dependencies and might use the array protector cell.
132 bool CanTreatHoleAsUndefined(std::vector<Handle<Map>> const& receiver_maps, 132 bool CanTreatHoleAsUndefined(std::vector<Handle<Map>> const& receiver_maps);
133 Handle<Context> native_context);
134 133
135 // Extract receiver maps from {nexus} and filter based on {receiver} if 134 // Extract receiver maps from {nexus} and filter based on {receiver} if
136 // possible. 135 // possible.
137 bool ExtractReceiverMaps(Node* receiver, Node* effect, 136 bool ExtractReceiverMaps(Node* receiver, Node* effect,
138 FeedbackNexus const& nexus, 137 FeedbackNexus const& nexus,
139 MapHandleList* receiver_maps); 138 MapHandleList* receiver_maps);
140 139
141 // Try to infer a map for the given {receiver} at the current {effect}. 140 // Try to infer a map for the given {receiver} at the current {effect}.
142 // If a map is returned then you can be sure that the {receiver} definitely 141 // If a map is returned then you can be sure that the {receiver} definitely
143 // has the returned map at this point in the program (identified by {effect}). 142 // has the returned map at this point in the program (identified by {effect}).
144 MaybeHandle<Map> InferReceiverMap(Node* receiver, Node* effect); 143 MaybeHandle<Map> InferReceiverMap(Node* receiver, Node* effect);
145 // Try to infer a root map for the {receiver} independent of the current 144 // Try to infer a root map for the {receiver} independent of the current
146 // program location. 145 // program location.
147 MaybeHandle<Map> InferReceiverRootMap(Node* receiver); 146 MaybeHandle<Map> InferReceiverRootMap(Node* receiver);
148 147
149 // Retrieve the native context from the given {node} if known.
150 MaybeHandle<Context> GetNativeContext(Node* node);
151
152 Graph* graph() const; 148 Graph* graph() const;
153 JSGraph* jsgraph() const { return jsgraph_; } 149 JSGraph* jsgraph() const { return jsgraph_; }
154 Isolate* isolate() const; 150 Isolate* isolate() const;
155 Factory* factory() const; 151 Factory* factory() const;
156 CommonOperatorBuilder* common() const; 152 CommonOperatorBuilder* common() const;
157 JSOperatorBuilder* javascript() const; 153 JSOperatorBuilder* javascript() const;
158 SimplifiedOperatorBuilder* simplified() const; 154 SimplifiedOperatorBuilder* simplified() const;
159 MachineOperatorBuilder* machine() const; 155 MachineOperatorBuilder* machine() const;
160 Flags flags() const { return flags_; } 156 Flags flags() const { return flags_; }
161 MaybeHandle<Context> native_context() const { return native_context_; } 157 Handle<Context> native_context() const { return native_context_; }
162 CompilationDependencies* dependencies() const { return dependencies_; } 158 CompilationDependencies* dependencies() const { return dependencies_; }
163 Zone* zone() const { return zone_; } 159 Zone* zone() const { return zone_; }
164 160
165 JSGraph* const jsgraph_; 161 JSGraph* const jsgraph_;
166 Flags const flags_; 162 Flags const flags_;
167 MaybeHandle<Context> native_context_; 163 Handle<Context> native_context_;
168 CompilationDependencies* const dependencies_; 164 CompilationDependencies* const dependencies_;
169 Zone* const zone_; 165 Zone* const zone_;
170 TypeCache const& type_cache_; 166 TypeCache const& type_cache_;
171 167
172 DISALLOW_COPY_AND_ASSIGN(JSNativeContextSpecialization); 168 DISALLOW_COPY_AND_ASSIGN(JSNativeContextSpecialization);
173 }; 169 };
174 170
175 DEFINE_OPERATORS_FOR_FLAGS(JSNativeContextSpecialization::Flags) 171 DEFINE_OPERATORS_FOR_FLAGS(JSNativeContextSpecialization::Flags)
176 172
177 } // namespace compiler 173 } // namespace compiler
178 } // namespace internal 174 } // namespace internal
179 } // namespace v8 175 } // namespace v8
180 176
181 #endif // V8_COMPILER_JS_NATIVE_CONTEXT_SPECIALIZATION_H_ 177 #endif // V8_COMPILER_JS_NATIVE_CONTEXT_SPECIALIZATION_H_
OLDNEW
« no previous file with comments | « src/compiler/js-global-object-specialization.cc ('k') | src/compiler/js-native-context-specialization.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698