| Index: src/compiler/js-generic-lowering.cc
|
| diff --git a/src/compiler/js-generic-lowering.cc b/src/compiler/js-generic-lowering.cc
|
| index e07daf0c721936cd951d196b1af7b75eecf47611..978af8f956a6e7db6c924266ff1dfef3397e5981 100644
|
| --- a/src/compiler/js-generic-lowering.cc
|
| +++ b/src/compiler/js-generic-lowering.cc
|
| @@ -87,12 +87,14 @@ REPLACE_STUB_CALL(ToObject)
|
| REPLACE_STUB_CALL(ToString)
|
| #undef REPLACE_STUB_CALL
|
|
|
| -void JSGenericLowering::ReplaceWithStubCall(Node* node, Callable callable,
|
| +void JSGenericLowering::ReplaceWithStubCall(Node* node,
|
| + const Callable& callable,
|
| CallDescriptor::Flags flags) {
|
| ReplaceWithStubCall(node, callable, flags, node->op()->properties());
|
| }
|
|
|
| -void JSGenericLowering::ReplaceWithStubCall(Node* node, Callable callable,
|
| +void JSGenericLowering::ReplaceWithStubCall(Node* node,
|
| + const Callable& callable,
|
| CallDescriptor::Flags flags,
|
| Operator::Properties properties) {
|
| CallDescriptor* desc = Linkage::GetStubCallDescriptor(
|
| @@ -150,12 +152,14 @@ void JSGenericLowering::LowerJSTypeOf(Node* node) {
|
|
|
|
|
| void JSGenericLowering::LowerJSLoadProperty(Node* node) {
|
| + Node* receiver = NodeProperties::GetValueInput(node, 0);
|
| + Node* key = NodeProperties::GetValueInput(node, 1);
|
| Node* closure = NodeProperties::GetValueInput(node, 2);
|
| Node* effect = NodeProperties::GetEffectInput(node);
|
| Node* control = NodeProperties::GetControlInput(node);
|
| CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
|
| const PropertyAccess& p = PropertyAccessOf(node->op());
|
| - Callable callable = CodeFactory::KeyedLoadICInOptimizedCode(isolate());
|
| + auto callable = CodeFactory::KeyedLoadICInOptimizedCode(isolate());
|
| // Load the type feedback vector from the closure.
|
| Node* literals = effect = graph()->NewNode(
|
| machine()->Load(MachineType::AnyTagged()), closure,
|
| @@ -166,20 +170,26 @@ void JSGenericLowering::LowerJSLoadProperty(Node* node) {
|
| jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
|
| kHeapObjectTag),
|
| effect, control);
|
| - node->InsertInput(zone(), 2, jsgraph()->SmiConstant(p.feedback().index()));
|
| - node->ReplaceInput(3, vector);
|
| + typedef decltype(callable)::Descriptor Descriptor;
|
| + node->InsertInputs(zone(), 0, 1);
|
| + node->ReplaceInput(Descriptor::kReceiver, receiver);
|
| + node->ReplaceInput(Descriptor::kName, key);
|
| + node->ReplaceInput(Descriptor::kSlot,
|
| + jsgraph()->SmiConstant(p.feedback().index()));
|
| + node->ReplaceInput(Descriptor::kVector, vector);
|
| node->ReplaceInput(6, effect);
|
| ReplaceWithStubCall(node, callable, flags);
|
| }
|
|
|
|
|
| void JSGenericLowering::LowerJSLoadNamed(Node* node) {
|
| + Node* receiver = NodeProperties::GetValueInput(node, 0);
|
| Node* closure = NodeProperties::GetValueInput(node, 1);
|
| Node* effect = NodeProperties::GetEffectInput(node);
|
| Node* control = NodeProperties::GetControlInput(node);
|
| CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
|
| NamedAccess const& p = NamedAccessOf(node->op());
|
| - Callable callable = CodeFactory::LoadICInOptimizedCode(isolate());
|
| + auto callable = CodeFactory::LoadICInOptimizedCode(isolate());
|
| // Load the type feedback vector from the closure.
|
| Node* literals = effect = graph()->NewNode(
|
| machine()->Load(MachineType::AnyTagged()), closure,
|
| @@ -190,9 +200,13 @@ void JSGenericLowering::LowerJSLoadNamed(Node* node) {
|
| jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
|
| kHeapObjectTag),
|
| effect, control);
|
| - node->InsertInput(zone(), 1, jsgraph()->HeapConstant(p.name()));
|
| - node->InsertInput(zone(), 2, jsgraph()->SmiConstant(p.feedback().index()));
|
| - node->ReplaceInput(3, vector);
|
| + typedef decltype(callable)::Descriptor Descriptor;
|
| + node->InsertInputs(zone(), 0, 2);
|
| + node->ReplaceInput(Descriptor::kReceiver, receiver);
|
| + node->ReplaceInput(Descriptor::kName, jsgraph()->HeapConstant(p.name()));
|
| + node->ReplaceInput(Descriptor::kSlot,
|
| + jsgraph()->SmiConstant(p.feedback().index()));
|
| + node->ReplaceInput(Descriptor::kVector, vector);
|
| node->ReplaceInput(6, effect);
|
| ReplaceWithStubCall(node, callable, flags);
|
| }
|
| @@ -204,7 +218,7 @@ void JSGenericLowering::LowerJSLoadGlobal(Node* node) {
|
| Node* control = NodeProperties::GetControlInput(node);
|
| CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
|
| const LoadGlobalParameters& p = LoadGlobalParametersOf(node->op());
|
| - Callable callable =
|
| + auto callable =
|
| CodeFactory::LoadGlobalICInOptimizedCode(isolate(), p.typeof_mode());
|
| // Load the type feedback vector from the closure.
|
| Node* literals = effect = graph()->NewNode(
|
| @@ -216,8 +230,11 @@ void JSGenericLowering::LowerJSLoadGlobal(Node* node) {
|
| jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
|
| kHeapObjectTag),
|
| effect, control);
|
| - node->InsertInput(zone(), 0, jsgraph()->SmiConstant(p.feedback().index()));
|
| - node->ReplaceInput(1, vector);
|
| + typedef decltype(callable)::Descriptor Descriptor;
|
| + node->InsertInputs(zone(), 0, 1);
|
| + node->ReplaceInput(Descriptor::kSlot,
|
| + jsgraph()->SmiConstant(p.feedback().index()));
|
| + node->ReplaceInput(Descriptor::kVector, vector);
|
| node->ReplaceInput(4, effect);
|
| ReplaceWithStubCall(node, callable, flags);
|
| }
|
| @@ -233,7 +250,7 @@ void JSGenericLowering::LowerJSStoreProperty(Node* node) {
|
| CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
|
| PropertyAccess const& p = PropertyAccessOf(node->op());
|
| LanguageMode language_mode = p.language_mode();
|
| - Callable callable =
|
| + auto callable =
|
| CodeFactory::KeyedStoreICInOptimizedCode(isolate(), language_mode);
|
| // Load the type feedback vector from the closure.
|
| Node* literals = effect = graph()->NewNode(
|
| @@ -245,7 +262,7 @@ void JSGenericLowering::LowerJSStoreProperty(Node* node) {
|
| jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
|
| kHeapObjectTag),
|
| effect, control);
|
| - typedef StoreWithVectorDescriptor Descriptor;
|
| + typedef decltype(callable)::Descriptor Descriptor;
|
| node->InsertInputs(zone(), 0, 1);
|
| node->ReplaceInput(Descriptor::kReceiver, receiver);
|
| node->ReplaceInput(Descriptor::kName, key);
|
| @@ -266,7 +283,7 @@ void JSGenericLowering::LowerJSStoreNamed(Node* node) {
|
| Node* control = NodeProperties::GetControlInput(node);
|
| CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
|
| NamedAccess const& p = NamedAccessOf(node->op());
|
| - Callable callable =
|
| + auto callable =
|
| CodeFactory::StoreICInOptimizedCode(isolate(), p.language_mode());
|
| // Load the type feedback vector from the closure.
|
| Node* literals = effect = graph()->NewNode(
|
| @@ -278,7 +295,7 @@ void JSGenericLowering::LowerJSStoreNamed(Node* node) {
|
| jsgraph()->IntPtrConstant(LiteralsArray::kFeedbackVectorOffset -
|
| kHeapObjectTag),
|
| effect, control);
|
| - typedef StoreWithVectorDescriptor Descriptor;
|
| + typedef decltype(callable)::Descriptor Descriptor;
|
| node->InsertInputs(zone(), 0, 2);
|
| node->ReplaceInput(Descriptor::kReceiver, receiver);
|
| node->ReplaceInput(Descriptor::kName, jsgraph()->HeapConstant(p.name()));
|
| @@ -299,7 +316,7 @@ void JSGenericLowering::LowerJSStoreGlobal(Node* node) {
|
| Node* control = NodeProperties::GetControlInput(node);
|
| CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
|
| const StoreGlobalParameters& p = StoreGlobalParametersOf(node->op());
|
| - Callable callable =
|
| + auto callable =
|
| CodeFactory::StoreICInOptimizedCode(isolate(), p.language_mode());
|
| // Load the type feedback vector from the closure.
|
| Node* literals = effect = graph()->NewNode(
|
| @@ -321,7 +338,7 @@ void JSGenericLowering::LowerJSStoreGlobal(Node* node) {
|
| machine()->Load(MachineType::AnyTagged()), native_context,
|
| jsgraph()->IntPtrConstant(Context::SlotOffset(Context::EXTENSION_INDEX)),
|
| effect, control);
|
| - typedef StoreWithVectorDescriptor Descriptor;
|
| + typedef decltype(callable)::Descriptor Descriptor;
|
| node->InsertInputs(zone(), 0, 3);
|
| node->ReplaceInput(Descriptor::kReceiver, global);
|
| node->ReplaceInput(Descriptor::kName, jsgraph()->HeapConstant(p.name()));
|
|
|