Index: src/compiler/escape-analysis.cc |
diff --git a/src/compiler/escape-analysis.cc b/src/compiler/escape-analysis.cc |
index 09e494df31f2ee325a2b272bafc53c2882620514..30fec9566e47b71036ee0764f43e47eea6ddf32b 100644 |
--- a/src/compiler/escape-analysis.cc |
+++ b/src/compiler/escape-analysis.cc |
@@ -12,6 +12,7 @@ |
#include "src/compiler/common-operator.h" |
#include "src/compiler/graph-reducer.h" |
#include "src/compiler/js-operator.h" |
+#include "src/compiler/linkage.h" |
#include "src/compiler/node-matchers.h" |
#include "src/compiler/node-properties.h" |
#include "src/compiler/node.h" |
@@ -1067,6 +1068,19 @@ bool EscapeStatusAnalysis::IsEffectBranchPoint(Node* node) { |
return false; |
} |
+namespace { |
+ |
+bool HasFrameStateInput(const Operator* op) { |
+ if (op->opcode() == IrOpcode::kCall || op->opcode() == IrOpcode::kTailCall) { |
+ const CallDescriptor* d = CallDescriptorOf(op); |
+ return d->NeedsFrameState(); |
+ } else { |
+ return OperatorProperties::HasFrameStateInput(op); |
+ } |
+} |
+ |
+} // namespace |
+ |
bool EscapeAnalysis::Process(Node* node) { |
switch (node->opcode()) { |
case IrOpcode::kAllocate: |
@@ -1103,7 +1117,7 @@ bool EscapeAnalysis::Process(Node* node) { |
ProcessAllocationUsers(node); |
break; |
} |
- if (OperatorProperties::HasFrameStateInput(node->op())) { |
+ if (HasFrameStateInput(node->op())) { |
virtual_states_[node->id()]->SetCopyRequired(); |
} |
return true; |