Index: src/compiler/escape-analysis.cc |
diff --git a/src/compiler/escape-analysis.cc b/src/compiler/escape-analysis.cc |
index 09e494df31f2ee325a2b272bafc53c2882620514..303baab3c039de7141b172dc54ac2b23d20f7d07 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) { |
Michael Starzinger
2017/01/27 11:36:18
nit: Even though this shouldn't happen in practice
|
+ 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; |