Commit d8ccbd69 authored by tebbi's avatar tebbi Committed by Commit bot

[turbofan] escape analysis bugfixes that got reverted with...

[turbofan] escape analysis bugfixes that got reverted with https://codereview.chromium.org/2680973013/

R=bmeurer@chromium.org

Review-Url: https://codereview.chromium.org/2701403003
Cr-Commit-Position: refs/heads/master@{#43321}
parent 3cf5edae
...@@ -694,6 +694,15 @@ void EscapeStatusAnalysis::Process(Node* node) { ...@@ -694,6 +694,15 @@ void EscapeStatusAnalysis::Process(Node* node) {
RevisitInputs(rep); RevisitInputs(rep);
RevisitUses(rep); RevisitUses(rep);
} }
} else {
Node* from = NodeProperties::GetValueInput(node, 0);
from = object_analysis_->ResolveReplacement(from);
if (SetEscaped(from)) {
TRACE("Setting #%d (%s) to escaped because of unresolved load #%i\n",
from->id(), from->op()->mnemonic(), node->id());
RevisitInputs(from);
RevisitUses(from);
}
} }
RevisitUses(node); RevisitUses(node);
break; break;
...@@ -898,7 +907,7 @@ EscapeAnalysis::EscapeAnalysis(Graph* graph, CommonOperatorBuilder* common, ...@@ -898,7 +907,7 @@ EscapeAnalysis::EscapeAnalysis(Graph* graph, CommonOperatorBuilder* common,
EscapeAnalysis::~EscapeAnalysis() {} EscapeAnalysis::~EscapeAnalysis() {}
void EscapeAnalysis::Run() { bool EscapeAnalysis::Run() {
replacements_.resize(graph()->NodeCount()); replacements_.resize(graph()->NodeCount());
status_analysis_->AssignAliases(); status_analysis_->AssignAliases();
if (status_analysis_->AliasCount() > 0) { if (status_analysis_->AliasCount() > 0) {
...@@ -907,6 +916,9 @@ void EscapeAnalysis::Run() { ...@@ -907,6 +916,9 @@ void EscapeAnalysis::Run() {
status_analysis_->ResizeStatusVector(); status_analysis_->ResizeStatusVector();
RunObjectAnalysis(); RunObjectAnalysis();
status_analysis_->RunStatusAnalysis(); status_analysis_->RunStatusAnalysis();
return true;
} else {
return false;
} }
} }
......
...@@ -26,9 +26,10 @@ class V8_EXPORT_PRIVATE EscapeAnalysis { ...@@ -26,9 +26,10 @@ class V8_EXPORT_PRIVATE EscapeAnalysis {
EscapeAnalysis(Graph* graph, CommonOperatorBuilder* common, Zone* zone); EscapeAnalysis(Graph* graph, CommonOperatorBuilder* common, Zone* zone);
~EscapeAnalysis(); ~EscapeAnalysis();
void Run(); bool Run();
Node* GetReplacement(Node* node); Node* GetReplacement(Node* node);
Node* ResolveReplacement(Node* node);
bool IsVirtual(Node* node); bool IsVirtual(Node* node);
bool IsEscaped(Node* node); bool IsEscaped(Node* node);
bool CompareVirtualObjects(Node* left, Node* right); bool CompareVirtualObjects(Node* left, Node* right);
...@@ -59,7 +60,6 @@ class V8_EXPORT_PRIVATE EscapeAnalysis { ...@@ -59,7 +60,6 @@ class V8_EXPORT_PRIVATE EscapeAnalysis {
Node* node); Node* node);
Node* replacement(Node* node); Node* replacement(Node* node);
Node* ResolveReplacement(Node* node);
bool UpdateReplacement(VirtualState* state, Node* node, Node* rep); bool UpdateReplacement(VirtualState* state, Node* node, Node* rep);
VirtualObject* GetVirtualObject(VirtualState* state, Node* node); VirtualObject* GetVirtualObject(VirtualState* state, Node* node);
......
...@@ -949,7 +949,7 @@ struct EscapeAnalysisPhase { ...@@ -949,7 +949,7 @@ struct EscapeAnalysisPhase {
void Run(PipelineData* data, Zone* temp_zone) { void Run(PipelineData* data, Zone* temp_zone) {
EscapeAnalysis escape_analysis(data->graph(), data->jsgraph()->common(), EscapeAnalysis escape_analysis(data->graph(), data->jsgraph()->common(),
temp_zone); temp_zone);
escape_analysis.Run(); if (!escape_analysis.Run()) return;
JSGraphReducer graph_reducer(data->jsgraph(), temp_zone); JSGraphReducer graph_reducer(data->jsgraph(), temp_zone);
EscapeAnalysisReducer escape_reducer(&graph_reducer, data->jsgraph(), EscapeAnalysisReducer escape_reducer(&graph_reducer, data->jsgraph(),
&escape_analysis, temp_zone); &escape_analysis, temp_zone);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment