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

Side by Side Diff: src/compiler/js-generic-lowering.cc

Issue 2019313003: IC: Eliminate initialization_state as a factor in IC installation. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fixed compile error. Created 4 years, 6 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 | « src/code-factory.cc ('k') | src/crankshaft/arm/lithium-arm.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 #include "src/code-factory.h" 5 #include "src/code-factory.h"
6 #include "src/code-stubs.h" 6 #include "src/code-stubs.h"
7 #include "src/compiler/common-operator.h" 7 #include "src/compiler/common-operator.h"
8 #include "src/compiler/js-generic-lowering.h" 8 #include "src/compiler/js-generic-lowering.h"
9 #include "src/compiler/js-graph.h" 9 #include "src/compiler/js-graph.h"
10 #include "src/compiler/machine-operator.h" 10 #include "src/compiler/machine-operator.h"
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 Operator::kEliminatable); 149 Operator::kEliminatable);
150 } 150 }
151 151
152 152
153 void JSGenericLowering::LowerJSLoadProperty(Node* node) { 153 void JSGenericLowering::LowerJSLoadProperty(Node* node) {
154 Node* closure = NodeProperties::GetValueInput(node, 2); 154 Node* closure = NodeProperties::GetValueInput(node, 2);
155 Node* effect = NodeProperties::GetEffectInput(node); 155 Node* effect = NodeProperties::GetEffectInput(node);
156 Node* control = NodeProperties::GetControlInput(node); 156 Node* control = NodeProperties::GetControlInput(node);
157 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); 157 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
158 const PropertyAccess& p = PropertyAccessOf(node->op()); 158 const PropertyAccess& p = PropertyAccessOf(node->op());
159 Callable callable = 159 Callable callable = CodeFactory::KeyedLoadICInOptimizedCode(isolate());
160 CodeFactory::KeyedLoadICInOptimizedCode(isolate(), UNINITIALIZED);
161 // Load the type feedback vector from the closure. 160 // Load the type feedback vector from the closure.
162 Node* literals = effect = graph()->NewNode( 161 Node* literals = effect = graph()->NewNode(
163 machine()->Load(MachineType::AnyTagged()), closure, 162 machine()->Load(MachineType::AnyTagged()), closure,
164 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag), 163 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag),
165 effect, control); 164 effect, control);
166 Node* vector = effect = graph()->NewNode( 165 Node* vector = effect = graph()->NewNode(
167 machine()->Load(MachineType::AnyTagged()), literals, 166 machine()->Load(MachineType::AnyTagged()), literals,
168 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset - 167 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
169 kHeapObjectTag), 168 kHeapObjectTag),
170 effect, control); 169 effect, control);
171 node->InsertInput(zone(), 2, jsgraph()->SmiConstant(p.feedback().index())); 170 node->InsertInput(zone(), 2, jsgraph()->SmiConstant(p.feedback().index()));
172 node->ReplaceInput(3, vector); 171 node->ReplaceInput(3, vector);
173 node->ReplaceInput(6, effect); 172 node->ReplaceInput(6, effect);
174 ReplaceWithStubCall(node, callable, flags); 173 ReplaceWithStubCall(node, callable, flags);
175 } 174 }
176 175
177 176
178 void JSGenericLowering::LowerJSLoadNamed(Node* node) { 177 void JSGenericLowering::LowerJSLoadNamed(Node* node) {
179 Node* closure = NodeProperties::GetValueInput(node, 1); 178 Node* closure = NodeProperties::GetValueInput(node, 1);
180 Node* effect = NodeProperties::GetEffectInput(node); 179 Node* effect = NodeProperties::GetEffectInput(node);
181 Node* control = NodeProperties::GetControlInput(node); 180 Node* control = NodeProperties::GetControlInput(node);
182 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); 181 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
183 NamedAccess const& p = NamedAccessOf(node->op()); 182 NamedAccess const& p = NamedAccessOf(node->op());
184 Callable callable = CodeFactory::LoadICInOptimizedCode( 183 Callable callable =
185 isolate(), NOT_INSIDE_TYPEOF, UNINITIALIZED); 184 CodeFactory::LoadICInOptimizedCode(isolate(), NOT_INSIDE_TYPEOF);
186 // Load the type feedback vector from the closure. 185 // Load the type feedback vector from the closure.
187 Node* literals = effect = graph()->NewNode( 186 Node* literals = effect = graph()->NewNode(
188 machine()->Load(MachineType::AnyTagged()), closure, 187 machine()->Load(MachineType::AnyTagged()), closure,
189 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag), 188 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag),
190 effect, control); 189 effect, control);
191 Node* vector = effect = graph()->NewNode( 190 Node* vector = effect = graph()->NewNode(
192 machine()->Load(MachineType::AnyTagged()), literals, 191 machine()->Load(MachineType::AnyTagged()), literals,
193 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset - 192 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
194 kHeapObjectTag), 193 kHeapObjectTag),
195 effect, control); 194 effect, control);
196 node->InsertInput(zone(), 1, jsgraph()->HeapConstant(p.name())); 195 node->InsertInput(zone(), 1, jsgraph()->HeapConstant(p.name()));
197 node->InsertInput(zone(), 2, jsgraph()->SmiConstant(p.feedback().index())); 196 node->InsertInput(zone(), 2, jsgraph()->SmiConstant(p.feedback().index()));
198 node->ReplaceInput(3, vector); 197 node->ReplaceInput(3, vector);
199 node->ReplaceInput(6, effect); 198 node->ReplaceInput(6, effect);
200 ReplaceWithStubCall(node, callable, flags); 199 ReplaceWithStubCall(node, callable, flags);
201 } 200 }
202 201
203 202
204 void JSGenericLowering::LowerJSLoadGlobal(Node* node) { 203 void JSGenericLowering::LowerJSLoadGlobal(Node* node) {
205 Node* closure = NodeProperties::GetValueInput(node, 0); 204 Node* closure = NodeProperties::GetValueInput(node, 0);
206 Node* context = NodeProperties::GetContextInput(node); 205 Node* context = NodeProperties::GetContextInput(node);
207 Node* effect = NodeProperties::GetEffectInput(node); 206 Node* effect = NodeProperties::GetEffectInput(node);
208 Node* control = NodeProperties::GetControlInput(node); 207 Node* control = NodeProperties::GetControlInput(node);
209 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); 208 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
210 const LoadGlobalParameters& p = LoadGlobalParametersOf(node->op()); 209 const LoadGlobalParameters& p = LoadGlobalParametersOf(node->op());
211 Callable callable = CodeFactory::LoadICInOptimizedCode( 210 Callable callable =
212 isolate(), p.typeof_mode(), UNINITIALIZED); 211 CodeFactory::LoadICInOptimizedCode(isolate(), p.typeof_mode());
213 // Load the type feedback vector from the closure. 212 // Load the type feedback vector from the closure.
214 Node* literals = effect = graph()->NewNode( 213 Node* literals = effect = graph()->NewNode(
215 machine()->Load(MachineType::AnyTagged()), closure, 214 machine()->Load(MachineType::AnyTagged()), closure,
216 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag), 215 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag),
217 effect, control); 216 effect, control);
218 Node* vector = effect = graph()->NewNode( 217 Node* vector = effect = graph()->NewNode(
219 machine()->Load(MachineType::AnyTagged()), literals, 218 machine()->Load(MachineType::AnyTagged()), literals,
220 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset - 219 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
221 kHeapObjectTag), 220 kHeapObjectTag),
222 effect, control); 221 effect, control);
(...skipping 16 matching lines...) Expand all
239 } 238 }
240 239
241 240
242 void JSGenericLowering::LowerJSStoreProperty(Node* node) { 241 void JSGenericLowering::LowerJSStoreProperty(Node* node) {
243 Node* closure = NodeProperties::GetValueInput(node, 3); 242 Node* closure = NodeProperties::GetValueInput(node, 3);
244 Node* effect = NodeProperties::GetEffectInput(node); 243 Node* effect = NodeProperties::GetEffectInput(node);
245 Node* control = NodeProperties::GetControlInput(node); 244 Node* control = NodeProperties::GetControlInput(node);
246 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); 245 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
247 PropertyAccess const& p = PropertyAccessOf(node->op()); 246 PropertyAccess const& p = PropertyAccessOf(node->op());
248 LanguageMode language_mode = p.language_mode(); 247 LanguageMode language_mode = p.language_mode();
249 Callable callable = CodeFactory::KeyedStoreICInOptimizedCode( 248 Callable callable =
250 isolate(), language_mode, UNINITIALIZED); 249 CodeFactory::KeyedStoreICInOptimizedCode(isolate(), language_mode);
251 // Load the type feedback vector from the closure. 250 // Load the type feedback vector from the closure.
252 Node* literals = effect = graph()->NewNode( 251 Node* literals = effect = graph()->NewNode(
253 machine()->Load(MachineType::AnyTagged()), closure, 252 machine()->Load(MachineType::AnyTagged()), closure,
254 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag), 253 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag),
255 effect, control); 254 effect, control);
256 Node* vector = effect = graph()->NewNode( 255 Node* vector = effect = graph()->NewNode(
257 machine()->Load(MachineType::AnyTagged()), literals, 256 machine()->Load(MachineType::AnyTagged()), literals,
258 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset - 257 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
259 kHeapObjectTag), 258 kHeapObjectTag),
260 effect, control); 259 effect, control);
261 node->InsertInput(zone(), 3, jsgraph()->SmiConstant(p.feedback().index())); 260 node->InsertInput(zone(), 3, jsgraph()->SmiConstant(p.feedback().index()));
262 node->ReplaceInput(4, vector); 261 node->ReplaceInput(4, vector);
263 node->ReplaceInput(7, effect); 262 node->ReplaceInput(7, effect);
264 ReplaceWithStubCall(node, callable, flags); 263 ReplaceWithStubCall(node, callable, flags);
265 } 264 }
266 265
267 266
268 void JSGenericLowering::LowerJSStoreNamed(Node* node) { 267 void JSGenericLowering::LowerJSStoreNamed(Node* node) {
269 Node* closure = NodeProperties::GetValueInput(node, 2); 268 Node* closure = NodeProperties::GetValueInput(node, 2);
270 Node* effect = NodeProperties::GetEffectInput(node); 269 Node* effect = NodeProperties::GetEffectInput(node);
271 Node* control = NodeProperties::GetControlInput(node); 270 Node* control = NodeProperties::GetControlInput(node);
272 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); 271 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
273 NamedAccess const& p = NamedAccessOf(node->op()); 272 NamedAccess const& p = NamedAccessOf(node->op());
274 Callable callable = CodeFactory::StoreICInOptimizedCode( 273 Callable callable =
275 isolate(), p.language_mode(), UNINITIALIZED); 274 CodeFactory::StoreICInOptimizedCode(isolate(), p.language_mode());
276 // Load the type feedback vector from the closure. 275 // Load the type feedback vector from the closure.
277 Node* literals = effect = graph()->NewNode( 276 Node* literals = effect = graph()->NewNode(
278 machine()->Load(MachineType::AnyTagged()), closure, 277 machine()->Load(MachineType::AnyTagged()), closure,
279 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag), 278 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag),
280 effect, control); 279 effect, control);
281 Node* vector = effect = graph()->NewNode( 280 Node* vector = effect = graph()->NewNode(
282 machine()->Load(MachineType::AnyTagged()), literals, 281 machine()->Load(MachineType::AnyTagged()), literals,
283 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset - 282 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
284 kHeapObjectTag), 283 kHeapObjectTag),
285 effect, control); 284 effect, control);
286 node->InsertInput(zone(), 1, jsgraph()->HeapConstant(p.name())); 285 node->InsertInput(zone(), 1, jsgraph()->HeapConstant(p.name()));
287 node->InsertInput(zone(), 3, jsgraph()->SmiConstant(p.feedback().index())); 286 node->InsertInput(zone(), 3, jsgraph()->SmiConstant(p.feedback().index()));
288 node->ReplaceInput(4, vector); 287 node->ReplaceInput(4, vector);
289 node->ReplaceInput(7, effect); 288 node->ReplaceInput(7, effect);
290 ReplaceWithStubCall(node, callable, flags); 289 ReplaceWithStubCall(node, callable, flags);
291 } 290 }
292 291
293 292
294 void JSGenericLowering::LowerJSStoreGlobal(Node* node) { 293 void JSGenericLowering::LowerJSStoreGlobal(Node* node) {
295 Node* closure = NodeProperties::GetValueInput(node, 1); 294 Node* closure = NodeProperties::GetValueInput(node, 1);
296 Node* context = NodeProperties::GetContextInput(node); 295 Node* context = NodeProperties::GetContextInput(node);
297 Node* effect = NodeProperties::GetEffectInput(node); 296 Node* effect = NodeProperties::GetEffectInput(node);
298 Node* control = NodeProperties::GetControlInput(node); 297 Node* control = NodeProperties::GetControlInput(node);
299 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); 298 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
300 const StoreGlobalParameters& p = StoreGlobalParametersOf(node->op()); 299 const StoreGlobalParameters& p = StoreGlobalParametersOf(node->op());
301 Callable callable = CodeFactory::StoreICInOptimizedCode( 300 Callable callable =
302 isolate(), p.language_mode(), UNINITIALIZED); 301 CodeFactory::StoreICInOptimizedCode(isolate(), p.language_mode());
303 // Load the type feedback vector from the closure. 302 // Load the type feedback vector from the closure.
304 Node* literals = effect = graph()->NewNode( 303 Node* literals = effect = graph()->NewNode(
305 machine()->Load(MachineType::AnyTagged()), closure, 304 machine()->Load(MachineType::AnyTagged()), closure,
306 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag), 305 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag),
307 effect, control); 306 effect, control);
308 Node* vector = effect = graph()->NewNode( 307 Node* vector = effect = graph()->NewNode(
309 machine()->Load(MachineType::AnyTagged()), literals, 308 machine()->Load(MachineType::AnyTagged()), literals,
310 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset - 309 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
311 kHeapObjectTag), 310 kHeapObjectTag),
312 effect, control); 311 effect, control);
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 } 741 }
743 742
744 743
745 MachineOperatorBuilder* JSGenericLowering::machine() const { 744 MachineOperatorBuilder* JSGenericLowering::machine() const {
746 return jsgraph()->machine(); 745 return jsgraph()->machine();
747 } 746 }
748 747
749 } // namespace compiler 748 } // namespace compiler
750 } // namespace internal 749 } // namespace internal
751 } // namespace v8 750 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-factory.cc ('k') | src/crankshaft/arm/lithium-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698