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

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

Issue 2172223002: [stubs] Call interface descriptors cleanup. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@store-ic-tf
Patch Set: Addressing comments Created 4 years, 4 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/compiler/code-assembler.cc ('k') | src/compiler/node.h » ('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 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 kHeapObjectTag), 217 kHeapObjectTag),
218 effect, control); 218 effect, control);
219 node->InsertInput(zone(), 0, jsgraph()->SmiConstant(p.feedback().index())); 219 node->InsertInput(zone(), 0, jsgraph()->SmiConstant(p.feedback().index()));
220 node->ReplaceInput(1, vector); 220 node->ReplaceInput(1, vector);
221 node->ReplaceInput(4, effect); 221 node->ReplaceInput(4, effect);
222 ReplaceWithStubCall(node, callable, flags); 222 ReplaceWithStubCall(node, callable, flags);
223 } 223 }
224 224
225 225
226 void JSGenericLowering::LowerJSStoreProperty(Node* node) { 226 void JSGenericLowering::LowerJSStoreProperty(Node* node) {
227 Node* receiver = NodeProperties::GetValueInput(node, 0);
228 Node* key = NodeProperties::GetValueInput(node, 1);
229 Node* value = NodeProperties::GetValueInput(node, 2);
227 Node* closure = NodeProperties::GetValueInput(node, 3); 230 Node* closure = NodeProperties::GetValueInput(node, 3);
228 Node* effect = NodeProperties::GetEffectInput(node); 231 Node* effect = NodeProperties::GetEffectInput(node);
229 Node* control = NodeProperties::GetControlInput(node); 232 Node* control = NodeProperties::GetControlInput(node);
230 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); 233 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
231 PropertyAccess const& p = PropertyAccessOf(node->op()); 234 PropertyAccess const& p = PropertyAccessOf(node->op());
232 LanguageMode language_mode = p.language_mode(); 235 LanguageMode language_mode = p.language_mode();
233 Callable callable = 236 Callable callable =
234 CodeFactory::KeyedStoreICInOptimizedCode(isolate(), language_mode); 237 CodeFactory::KeyedStoreICInOptimizedCode(isolate(), language_mode);
235 // Load the type feedback vector from the closure. 238 // Load the type feedback vector from the closure.
236 Node* literals = effect = graph()->NewNode( 239 Node* literals = effect = graph()->NewNode(
237 machine()->Load(MachineType::AnyTagged()), closure, 240 machine()->Load(MachineType::AnyTagged()), closure,
238 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag), 241 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag),
239 effect, control); 242 effect, control);
240 Node* vector = effect = graph()->NewNode( 243 Node* vector = effect = graph()->NewNode(
241 machine()->Load(MachineType::AnyTagged()), literals, 244 machine()->Load(MachineType::AnyTagged()), literals,
242 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset - 245 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
243 kHeapObjectTag), 246 kHeapObjectTag),
244 effect, control); 247 effect, control);
245 node->InsertInput(zone(), 3, jsgraph()->SmiConstant(p.feedback().index())); 248 typedef StoreWithVectorDescriptor Descriptor;
246 node->ReplaceInput(4, vector); 249 node->InsertInputs(zone(), 0, 1);
250 node->ReplaceInput(Descriptor::kReceiver, receiver);
251 node->ReplaceInput(Descriptor::kName, key);
252 node->ReplaceInput(Descriptor::kValue, value);
253 node->ReplaceInput(Descriptor::kSlot,
254 jsgraph()->SmiConstant(p.feedback().index()));
255 node->ReplaceInput(Descriptor::kVector, vector);
247 node->ReplaceInput(7, effect); 256 node->ReplaceInput(7, effect);
248 ReplaceWithStubCall(node, callable, flags); 257 ReplaceWithStubCall(node, callable, flags);
249 } 258 }
250 259
251 260
252 void JSGenericLowering::LowerJSStoreNamed(Node* node) { 261 void JSGenericLowering::LowerJSStoreNamed(Node* node) {
262 Node* receiver = NodeProperties::GetValueInput(node, 0);
263 Node* value = NodeProperties::GetValueInput(node, 1);
253 Node* closure = NodeProperties::GetValueInput(node, 2); 264 Node* closure = NodeProperties::GetValueInput(node, 2);
254 Node* effect = NodeProperties::GetEffectInput(node); 265 Node* effect = NodeProperties::GetEffectInput(node);
255 Node* control = NodeProperties::GetControlInput(node); 266 Node* control = NodeProperties::GetControlInput(node);
256 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); 267 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
257 NamedAccess const& p = NamedAccessOf(node->op()); 268 NamedAccess const& p = NamedAccessOf(node->op());
258 Callable callable = 269 Callable callable =
259 CodeFactory::StoreICInOptimizedCode(isolate(), p.language_mode()); 270 CodeFactory::StoreICInOptimizedCode(isolate(), p.language_mode());
260 // Load the type feedback vector from the closure. 271 // Load the type feedback vector from the closure.
261 Node* literals = effect = graph()->NewNode( 272 Node* literals = effect = graph()->NewNode(
262 machine()->Load(MachineType::AnyTagged()), closure, 273 machine()->Load(MachineType::AnyTagged()), closure,
263 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag), 274 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag),
264 effect, control); 275 effect, control);
265 Node* vector = effect = graph()->NewNode( 276 Node* vector = effect = graph()->NewNode(
266 machine()->Load(MachineType::AnyTagged()), literals, 277 machine()->Load(MachineType::AnyTagged()), literals,
267 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset - 278 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
268 kHeapObjectTag), 279 kHeapObjectTag),
269 effect, control); 280 effect, control);
270 node->InsertInput(zone(), 1, jsgraph()->HeapConstant(p.name())); 281 typedef StoreWithVectorDescriptor Descriptor;
271 node->InsertInput(zone(), 3, jsgraph()->SmiConstant(p.feedback().index())); 282 node->InsertInputs(zone(), 0, 2);
272 node->ReplaceInput(4, vector); 283 node->ReplaceInput(Descriptor::kReceiver, receiver);
284 node->ReplaceInput(Descriptor::kName, jsgraph()->HeapConstant(p.name()));
285 node->ReplaceInput(Descriptor::kValue, value);
286 node->ReplaceInput(Descriptor::kSlot,
287 jsgraph()->SmiConstant(p.feedback().index()));
288 node->ReplaceInput(Descriptor::kVector, vector);
273 node->ReplaceInput(7, effect); 289 node->ReplaceInput(7, effect);
274 ReplaceWithStubCall(node, callable, flags); 290 ReplaceWithStubCall(node, callable, flags);
275 } 291 }
276 292
277 293
278 void JSGenericLowering::LowerJSStoreGlobal(Node* node) { 294 void JSGenericLowering::LowerJSStoreGlobal(Node* node) {
295 Node* value = NodeProperties::GetValueInput(node, 0);
279 Node* closure = NodeProperties::GetValueInput(node, 1); 296 Node* closure = NodeProperties::GetValueInput(node, 1);
280 Node* context = NodeProperties::GetContextInput(node); 297 Node* context = NodeProperties::GetContextInput(node);
281 Node* effect = NodeProperties::GetEffectInput(node); 298 Node* effect = NodeProperties::GetEffectInput(node);
282 Node* control = NodeProperties::GetControlInput(node); 299 Node* control = NodeProperties::GetControlInput(node);
283 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); 300 CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
284 const StoreGlobalParameters& p = StoreGlobalParametersOf(node->op()); 301 const StoreGlobalParameters& p = StoreGlobalParametersOf(node->op());
285 Callable callable = 302 Callable callable =
286 CodeFactory::StoreICInOptimizedCode(isolate(), p.language_mode()); 303 CodeFactory::StoreICInOptimizedCode(isolate(), p.language_mode());
287 // Load the type feedback vector from the closure. 304 // Load the type feedback vector from the closure.
288 Node* literals = effect = graph()->NewNode( 305 Node* literals = effect = graph()->NewNode(
289 machine()->Load(MachineType::AnyTagged()), closure, 306 machine()->Load(MachineType::AnyTagged()), closure,
290 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag), 307 jsgraph()->IntPtrConstant(JSFunction::kLiteralsOffset - kHeapObjectTag),
291 effect, control); 308 effect, control);
292 Node* vector = effect = graph()->NewNode( 309 Node* vector = effect = graph()->NewNode(
293 machine()->Load(MachineType::AnyTagged()), literals, 310 machine()->Load(MachineType::AnyTagged()), literals,
294 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset - 311 jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
295 kHeapObjectTag), 312 kHeapObjectTag),
296 effect, control); 313 effect, control);
297 // Load global object from the context. 314 // Load global object from the context.
298 Node* native_context = effect = 315 Node* native_context = effect =
299 graph()->NewNode(machine()->Load(MachineType::AnyTagged()), context, 316 graph()->NewNode(machine()->Load(MachineType::AnyTagged()), context,
300 jsgraph()->IntPtrConstant( 317 jsgraph()->IntPtrConstant(
301 Context::SlotOffset(Context::NATIVE_CONTEXT_INDEX)), 318 Context::SlotOffset(Context::NATIVE_CONTEXT_INDEX)),
302 effect, control); 319 effect, control);
303 Node* global = effect = graph()->NewNode( 320 Node* global = effect = graph()->NewNode(
304 machine()->Load(MachineType::AnyTagged()), native_context, 321 machine()->Load(MachineType::AnyTagged()), native_context,
305 jsgraph()->IntPtrConstant(Context::SlotOffset(Context::EXTENSION_INDEX)), 322 jsgraph()->IntPtrConstant(Context::SlotOffset(Context::EXTENSION_INDEX)),
306 effect, control); 323 effect, control);
307 node->InsertInput(zone(), 0, global); 324 typedef StoreWithVectorDescriptor Descriptor;
308 node->InsertInput(zone(), 1, jsgraph()->HeapConstant(p.name())); 325 node->InsertInputs(zone(), 0, 3);
309 node->InsertInput(zone(), 3, jsgraph()->SmiConstant(p.feedback().index())); 326 node->ReplaceInput(Descriptor::kReceiver, global);
310 node->ReplaceInput(4, vector); 327 node->ReplaceInput(Descriptor::kName, jsgraph()->HeapConstant(p.name()));
328 node->ReplaceInput(Descriptor::kValue, value);
329 node->ReplaceInput(Descriptor::kSlot,
330 jsgraph()->SmiConstant(p.feedback().index()));
331 node->ReplaceInput(Descriptor::kVector, vector);
311 node->ReplaceInput(7, effect); 332 node->ReplaceInput(7, effect);
312 ReplaceWithStubCall(node, callable, flags); 333 ReplaceWithStubCall(node, callable, flags);
313 } 334 }
314 335
315 336
316 void JSGenericLowering::LowerJSDeleteProperty(Node* node) { 337 void JSGenericLowering::LowerJSDeleteProperty(Node* node) {
317 LanguageMode language_mode = OpParameter<LanguageMode>(node); 338 LanguageMode language_mode = OpParameter<LanguageMode>(node);
318 ReplaceWithRuntimeCall(node, is_strict(language_mode) 339 ReplaceWithRuntimeCall(node, is_strict(language_mode)
319 ? Runtime::kDeleteProperty_Strict 340 ? Runtime::kDeleteProperty_Strict
320 : Runtime::kDeleteProperty_Sloppy); 341 : Runtime::kDeleteProperty_Sloppy);
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
671 } 692 }
672 693
673 694
674 MachineOperatorBuilder* JSGenericLowering::machine() const { 695 MachineOperatorBuilder* JSGenericLowering::machine() const {
675 return jsgraph()->machine(); 696 return jsgraph()->machine();
676 } 697 }
677 698
678 } // namespace compiler 699 } // namespace compiler
679 } // namespace internal 700 } // namespace internal
680 } // namespace v8 701 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/code-assembler.cc ('k') | src/compiler/node.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698