Index: src/compiler/escape-analysis.cc |
diff --git a/src/compiler/escape-analysis.cc b/src/compiler/escape-analysis.cc |
index 7d8b166fd9bbc5010b33b65f43213f890a9e730d..d11c3ab674dd22ea26b8b109729d0e2280113e50 100644 |
--- a/src/compiler/escape-analysis.cc |
+++ b/src/compiler/escape-analysis.cc |
@@ -24,7 +24,7 @@ namespace v8 { |
namespace internal { |
namespace compiler { |
-using Alias = EscapeAnalysis::Alias; |
+typedef NodeId Alias; |
#ifdef DEBUG |
#define TRACE(...) \ |
@@ -1092,8 +1092,8 @@ void EscapeAnalysis::ProcessAllocationUsers(Node* node) { |
if (!obj->AllFieldsClear()) { |
obj = CopyForModificationAt(obj, state, node); |
obj->ClearAllFields(); |
- TRACE("Cleared all fields of @%d:#%d\n", GetAlias(obj->id()), |
- obj->id()); |
+ TRACE("Cleared all fields of @%d:#%d\n", |
+ status_analysis_->GetAlias(obj->id()), obj->id()); |
} |
} |
break; |
@@ -1119,7 +1119,7 @@ VirtualObject* EscapeAnalysis::CopyForModificationAt(VirtualObject* obj, |
Node* node) { |
if (obj->NeedCopyForModification()) { |
state = CopyForModificationAt(state, node); |
- return state->Copy(obj, GetAlias(obj->id())); |
+ return state->Copy(obj, status_analysis_->GetAlias(obj->id())); |
} |
return obj; |
} |
@@ -1160,7 +1160,7 @@ void EscapeAnalysis::ForwardVirtualState(Node* node) { |
void EscapeAnalysis::ProcessStart(Node* node) { |
DCHECK_EQ(node->opcode(), IrOpcode::kStart); |
virtual_states_[node->id()] = |
- new (zone()) VirtualState(node, zone(), AliasCount()); |
+ new (zone()) VirtualState(node, zone(), status_analysis_->AliasCount()); |
} |
bool EscapeAnalysis::ProcessEffectPhi(Node* node) { |
@@ -1169,7 +1169,8 @@ bool EscapeAnalysis::ProcessEffectPhi(Node* node) { |
VirtualState* mergeState = virtual_states_[node->id()]; |
if (!mergeState) { |
- mergeState = new (zone()) VirtualState(node, zone(), AliasCount()); |
+ mergeState = |
+ new (zone()) VirtualState(node, zone(), status_analysis_->AliasCount()); |
virtual_states_[node->id()] = mergeState; |
changed = true; |
TRACE("Effect Phi #%d got new virtual state %p.\n", node->id(), |
@@ -1187,7 +1188,8 @@ bool EscapeAnalysis::ProcessEffectPhi(Node* node) { |
if (state) { |
cache_->states().push_back(state); |
if (state == mergeState) { |
- mergeState = new (zone()) VirtualState(node, zone(), AliasCount()); |
+ mergeState = new (zone()) |
+ VirtualState(node, zone(), status_analysis_->AliasCount()); |
virtual_states_[node->id()] = mergeState; |
changed = true; |
} |
@@ -1216,7 +1218,7 @@ void EscapeAnalysis::ProcessAllocation(Node* node) { |
DCHECK_EQ(node->opcode(), IrOpcode::kAllocate); |
ForwardVirtualState(node); |
VirtualState* state = virtual_states_[node->id()]; |
- Alias alias = GetAlias(node->id()); |
+ Alias alias = status_analysis_->GetAlias(node->id()); |
// Check if we have already processed this node. |
if (state->VirtualObjectFromAlias(alias)) { |
@@ -1248,19 +1250,16 @@ void EscapeAnalysis::ProcessFinishRegion(Node* node) { |
Node* allocation = NodeProperties::GetValueInput(node, 0); |
if (allocation->opcode() == IrOpcode::kAllocate) { |
VirtualState* state = virtual_states_[node->id()]; |
- VirtualObject* obj = state->VirtualObjectFromAlias(GetAlias(node->id())); |
+ VirtualObject* obj = |
+ state->VirtualObjectFromAlias(status_analysis_->GetAlias(node->id())); |
DCHECK_NOT_NULL(obj); |
obj->SetInitialized(); |
} |
} |
-Node* EscapeAnalysis::replacement(NodeId id) { |
- if (id >= replacements_.size()) return nullptr; |
- return replacements_[id]; |
-} |
- |
Node* EscapeAnalysis::replacement(Node* node) { |
- return replacement(node->id()); |
+ if (node->id() >= replacements_.size()) return nullptr; |
+ return replacements_[node->id()]; |
} |
bool EscapeAnalysis::SetReplacement(Node* node, Node* rep) { |
@@ -1291,16 +1290,11 @@ Node* EscapeAnalysis::ResolveReplacement(Node* node) { |
} |
Node* EscapeAnalysis::GetReplacement(Node* node) { |
- return GetReplacement(node->id()); |
-} |
- |
-Node* EscapeAnalysis::GetReplacement(NodeId id) { |
- Node* node = nullptr; |
- while (replacement(id)) { |
- node = replacement(id); |
- id = node->id(); |
+ Node* result = nullptr; |
+ while (replacement(node)) { |
+ node = result = replacement(node); |
} |
- return node; |
+ return result; |
} |
bool EscapeAnalysis::IsVirtual(Node* node) { |
@@ -1317,17 +1311,6 @@ bool EscapeAnalysis::IsEscaped(Node* node) { |
return status_analysis_->IsEscaped(node); |
} |
-bool EscapeAnalysis::SetEscaped(Node* node) { |
- return status_analysis_->SetEscaped(node); |
-} |
- |
-VirtualObject* EscapeAnalysis::GetVirtualObject(Node* at, NodeId id) { |
- if (VirtualState* states = virtual_states_[at->id()]) { |
- return states->VirtualObjectFromAlias(GetAlias(id)); |
- } |
- return nullptr; |
-} |
- |
bool EscapeAnalysis::CompareVirtualObjects(Node* left, Node* right) { |
DCHECK(IsVirtual(left) && IsVirtual(right)); |
left = ResolveReplacement(left); |
@@ -1445,7 +1428,7 @@ void EscapeAnalysis::ProcessLoadElement(Node* node) { |
} |
} else { |
// We have a load from a non-const index, cannot eliminate object. |
- if (SetEscaped(from)) { |
+ if (status_analysis_->SetEscaped(from)) { |
TRACE( |
"Setting #%d (%s) to escaped because load element #%d from non-const " |
"index #%d (%s)\n", |
@@ -1500,7 +1483,7 @@ void EscapeAnalysis::ProcessStoreElement(Node* node) { |
} |
} else { |
// We have a store to a non-const index, cannot eliminate object. |
- if (SetEscaped(to)) { |
+ if (status_analysis_->SetEscaped(to)) { |
TRACE( |
"Setting #%d (%s) to escaped because store element #%d to non-const " |
"index #%d (%s)\n", |
@@ -1511,8 +1494,8 @@ void EscapeAnalysis::ProcessStoreElement(Node* node) { |
if (!obj->AllFieldsClear()) { |
obj = CopyForModificationAt(obj, state, node); |
obj->ClearAllFields(); |
- TRACE("Cleared all fields of @%d:#%d\n", GetAlias(obj->id()), |
- obj->id()); |
+ TRACE("Cleared all fields of @%d:#%d\n", |
+ status_analysis_->GetAlias(obj->id()), obj->id()); |
} |
} |
} |
@@ -1560,21 +1543,17 @@ Node* EscapeAnalysis::GetOrCreateObjectState(Node* effect, Node* node) { |
return nullptr; |
} |
-void EscapeAnalysis::DebugPrintObject(VirtualObject* object, Alias alias) { |
- PrintF(" Alias @%d: Object #%d with %zu fields\n", alias, object->id(), |
- object->field_count()); |
- for (size_t i = 0; i < object->field_count(); ++i) { |
- if (Node* f = object->GetField(i)) { |
- PrintF(" Field %zu = #%d (%s)\n", i, f->id(), f->op()->mnemonic()); |
- } |
- } |
-} |
- |
void EscapeAnalysis::DebugPrintState(VirtualState* state) { |
PrintF("Dumping virtual state %p\n", static_cast<void*>(state)); |
- for (Alias alias = 0; alias < AliasCount(); ++alias) { |
+ for (Alias alias = 0; alias < status_analysis_->AliasCount(); ++alias) { |
if (VirtualObject* object = state->VirtualObjectFromAlias(alias)) { |
- DebugPrintObject(object, alias); |
+ PrintF(" Alias @%d: Object #%d with %zu fields\n", alias, object->id(), |
+ object->field_count()); |
+ for (size_t i = 0; i < object->field_count(); ++i) { |
+ if (Node* f = object->GetField(i)) { |
+ PrintF(" Field %zu = #%d (%s)\n", i, f->id(), f->op()->mnemonic()); |
+ } |
+ } |
} |
} |
} |
@@ -1597,14 +1576,14 @@ void EscapeAnalysis::DebugPrint() { |
VirtualObject* EscapeAnalysis::GetVirtualObject(VirtualState* state, |
Node* node) { |
if (node->id() >= status_analysis_->GetAliasMap().size()) return nullptr; |
- Alias alias = GetAlias(node->id()); |
+ Alias alias = status_analysis_->GetAlias(node->id()); |
if (alias >= state->size()) return nullptr; |
return state->VirtualObjectFromAlias(alias); |
} |
bool EscapeAnalysis::ExistsVirtualAllocate() { |
for (size_t id = 0; id < status_analysis_->GetAliasMap().size(); ++id) { |
- Alias alias = GetAlias(static_cast<NodeId>(id)); |
+ Alias alias = status_analysis_->GetAlias(static_cast<NodeId>(id)); |
if (alias < EscapeStatusAnalysis::kUntrackable) { |
if (status_analysis_->IsVirtual(static_cast<int>(id))) { |
return true; |
@@ -1614,14 +1593,6 @@ bool EscapeAnalysis::ExistsVirtualAllocate() { |
return false; |
} |
-Alias EscapeAnalysis::GetAlias(NodeId id) const { |
- return status_analysis_->GetAlias(id); |
-} |
- |
-Alias EscapeAnalysis::AliasCount() const { |
- return status_analysis_->AliasCount(); |
-} |
- |
Graph* EscapeAnalysis::graph() const { return status_analysis_->graph(); } |
} // namespace compiler |