Index: src/compiler/js-generic-lowering.cc |
diff --git a/src/compiler/js-generic-lowering.cc b/src/compiler/js-generic-lowering.cc |
index 0f9defd4ce5be39ff2f21a8f5cbec1a53dfda466..c2f8a7eb6510b67b2ae34486d879f86e1373eee2 100644 |
--- a/src/compiler/js-generic-lowering.cc |
+++ b/src/compiler/js-generic-lowering.cc |
@@ -16,18 +16,16 @@ namespace v8 { |
namespace internal { |
namespace compiler { |
-static CallDescriptor::Flags AdjustFrameStatesForCall(Node* node) { |
- int count = OperatorProperties::GetFrameStateInputCount(node->op()); |
- if (count > 1) { |
- int index = NodeProperties::FirstFrameStateIndex(node) + 1; |
- do { |
- node->RemoveInput(index); |
- } while (--count > 1); |
- } |
- return count > 0 ? CallDescriptor::kNeedsFrameState |
- : CallDescriptor::kNoFlags; |
+namespace { |
+ |
+CallDescriptor::Flags FrameStateFlagForCall(Node* node) { |
+ return OperatorProperties::HasFrameStateInput(node->op()) |
+ ? CallDescriptor::kNeedsFrameState |
+ : CallDescriptor::kNoFlags; |
} |
+} // namespace |
+ |
JSGenericLowering::JSGenericLowering(JSGraph* jsgraph) : jsgraph_(jsgraph) {} |
JSGenericLowering::~JSGenericLowering() {} |
@@ -55,11 +53,11 @@ REPLACE_RUNTIME_CALL(JSCreateWithContext, Runtime::kPushWithContext) |
REPLACE_RUNTIME_CALL(JSConvertReceiver, Runtime::kConvertReceiver) |
#undef REPLACE_RUNTIME_CALL |
-#define REPLACE_STUB_CALL(Name) \ |
- void JSGenericLowering::LowerJS##Name(Node* node) { \ |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); \ |
- Callable callable = CodeFactory::Name(isolate()); \ |
- ReplaceWithStubCall(node, callable, flags); \ |
+#define REPLACE_STUB_CALL(Name) \ |
+ void JSGenericLowering::LowerJS##Name(Node* node) { \ |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); \ |
+ Callable callable = CodeFactory::Name(isolate()); \ |
+ ReplaceWithStubCall(node, callable, flags); \ |
} |
REPLACE_STUB_CALL(Add) |
REPLACE_STUB_CALL(Subtract) |
@@ -106,7 +104,7 @@ void JSGenericLowering::ReplaceWithStubCall(Node* node, Callable callable, |
void JSGenericLowering::ReplaceWithRuntimeCall(Node* node, |
Runtime::FunctionId f, |
int nargs_override) { |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
Operator::Properties properties = node->op()->properties(); |
const Runtime::Function* fun = Runtime::FunctionForId(f); |
int nargs = (nargs_override < 0) ? fun->nargs : nargs_override; |
@@ -153,7 +151,7 @@ void JSGenericLowering::LowerJSLoadProperty(Node* node) { |
Node* closure = NodeProperties::GetValueInput(node, 2); |
Node* effect = NodeProperties::GetEffectInput(node); |
Node* control = NodeProperties::GetControlInput(node); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
const PropertyAccess& p = PropertyAccessOf(node->op()); |
Callable callable = CodeFactory::KeyedLoadICInOptimizedCode(isolate()); |
// Load the type feedback vector from the closure. |
@@ -177,7 +175,7 @@ void JSGenericLowering::LowerJSLoadNamed(Node* node) { |
Node* closure = NodeProperties::GetValueInput(node, 1); |
Node* effect = NodeProperties::GetEffectInput(node); |
Node* control = NodeProperties::GetControlInput(node); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
NamedAccess const& p = NamedAccessOf(node->op()); |
Callable callable = CodeFactory::LoadICInOptimizedCode(isolate()); |
// Load the type feedback vector from the closure. |
@@ -202,7 +200,7 @@ void JSGenericLowering::LowerJSLoadGlobal(Node* node) { |
Node* closure = NodeProperties::GetValueInput(node, 0); |
Node* effect = NodeProperties::GetEffectInput(node); |
Node* control = NodeProperties::GetControlInput(node); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
const LoadGlobalParameters& p = LoadGlobalParametersOf(node->op()); |
Callable callable = |
CodeFactory::LoadGlobalICInOptimizedCode(isolate(), p.typeof_mode()); |
@@ -230,7 +228,7 @@ void JSGenericLowering::LowerJSStoreProperty(Node* node) { |
Node* closure = NodeProperties::GetValueInput(node, 3); |
Node* effect = NodeProperties::GetEffectInput(node); |
Node* control = NodeProperties::GetControlInput(node); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
PropertyAccess const& p = PropertyAccessOf(node->op()); |
LanguageMode language_mode = p.language_mode(); |
Callable callable = |
@@ -264,7 +262,7 @@ void JSGenericLowering::LowerJSStoreNamed(Node* node) { |
Node* closure = NodeProperties::GetValueInput(node, 2); |
Node* effect = NodeProperties::GetEffectInput(node); |
Node* control = NodeProperties::GetControlInput(node); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
NamedAccess const& p = NamedAccessOf(node->op()); |
Callable callable = |
CodeFactory::StoreICInOptimizedCode(isolate(), p.language_mode()); |
@@ -297,7 +295,7 @@ void JSGenericLowering::LowerJSStoreGlobal(Node* node) { |
Node* context = NodeProperties::GetContextInput(node); |
Node* effect = NodeProperties::GetEffectInput(node); |
Node* control = NodeProperties::GetControlInput(node); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
const StoreGlobalParameters& p = StoreGlobalParametersOf(node->op()); |
Callable callable = |
CodeFactory::StoreICInOptimizedCode(isolate(), p.language_mode()); |
@@ -343,7 +341,7 @@ void JSGenericLowering::LowerJSDeleteProperty(Node* node) { |
void JSGenericLowering::LowerJSInstanceOf(Node* node) { |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
Callable callable = CodeFactory::InstanceOf(isolate()); |
ReplaceWithStubCall(node, callable, flags); |
} |
@@ -388,7 +386,7 @@ void JSGenericLowering::LowerJSStoreContext(Node* node) { |
void JSGenericLowering::LowerJSCreate(Node* node) { |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
Callable callable = CodeFactory::FastNewObject(isolate()); |
ReplaceWithStubCall(node, callable, flags); |
} |
@@ -426,7 +424,7 @@ void JSGenericLowering::LowerJSCreateArray(Node* node) { |
void JSGenericLowering::LowerJSCreateClosure(Node* node) { |
CreateClosureParameters const& p = CreateClosureParametersOf(node->op()); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
Handle<SharedFunctionInfo> const shared_info = p.shared_info(); |
node->InsertInput(zone(), 0, jsgraph()->HeapConstant(shared_info)); |
@@ -444,7 +442,7 @@ void JSGenericLowering::LowerJSCreateClosure(Node* node) { |
void JSGenericLowering::LowerJSCreateFunctionContext(Node* node) { |
int const slot_count = OpParameter<int>(node->op()); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
Callable callable = CodeFactory::FastNewFunctionContext(isolate()); |
node->InsertInput(zone(), 1, jsgraph()->Int32Constant(slot_count)); |
@@ -459,7 +457,7 @@ void JSGenericLowering::LowerJSCreateIterResultObject(Node* node) { |
void JSGenericLowering::LowerJSCreateLiteralArray(Node* node) { |
CreateLiteralParameters const& p = CreateLiteralParametersOf(node->op()); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
node->InsertInput(zone(), 1, jsgraph()->SmiConstant(p.index())); |
node->InsertInput(zone(), 2, jsgraph()->HeapConstant(p.constant())); |
@@ -478,7 +476,7 @@ void JSGenericLowering::LowerJSCreateLiteralArray(Node* node) { |
void JSGenericLowering::LowerJSCreateLiteralObject(Node* node) { |
CreateLiteralParameters const& p = CreateLiteralParametersOf(node->op()); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
node->InsertInput(zone(), 1, jsgraph()->SmiConstant(p.index())); |
node->InsertInput(zone(), 2, jsgraph()->HeapConstant(p.constant())); |
node->InsertInput(zone(), 3, jsgraph()->SmiConstant(p.flags())); |
@@ -498,7 +496,7 @@ void JSGenericLowering::LowerJSCreateLiteralObject(Node* node) { |
void JSGenericLowering::LowerJSCreateLiteralRegExp(Node* node) { |
CreateLiteralParameters const& p = CreateLiteralParametersOf(node->op()); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
Callable callable = CodeFactory::FastCloneRegExp(isolate()); |
Node* literal_index = jsgraph()->SmiConstant(p.index()); |
Node* literal_flags = jsgraph()->SmiConstant(p.flags()); |
@@ -534,7 +532,7 @@ void JSGenericLowering::LowerJSCreateScriptContext(Node* node) { |
void JSGenericLowering::LowerJSCallConstruct(Node* node) { |
CallConstructParameters const& p = CallConstructParametersOf(node->op()); |
int const arg_count = static_cast<int>(p.arity() - 2); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
Callable callable = CodeFactory::Construct(isolate()); |
CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
isolate(), zone(), callable.descriptor(), arg_count + 1, flags); |
@@ -556,7 +554,7 @@ void JSGenericLowering::LowerJSCallFunction(Node* node) { |
int const arg_count = static_cast<int>(p.arity() - 2); |
ConvertReceiverMode const mode = p.convert_mode(); |
Callable callable = CodeFactory::Call(isolate(), mode); |
- CallDescriptor::Flags flags = AdjustFrameStatesForCall(node); |
+ CallDescriptor::Flags flags = FrameStateFlagForCall(node); |
if (p.tail_call_mode() == TailCallMode::kAllow) { |
flags |= CallDescriptor::kSupportsTailCalls; |
} |
@@ -572,7 +570,6 @@ void JSGenericLowering::LowerJSCallFunction(Node* node) { |
void JSGenericLowering::LowerJSCallRuntime(Node* node) { |
const CallRuntimeParameters& p = CallRuntimeParametersOf(node->op()); |
- AdjustFrameStatesForCall(node); |
ReplaceWithRuntimeCall(node, p.id(), static_cast<int>(p.arity())); |
} |