Commit ded072f4 authored by jarin's avatar jarin Committed by Commit bot

Revert of [turbofan] extend escape analysis to reduce CheckMaps (patchset #7...

Revert of [turbofan] extend escape analysis to reduce CheckMaps (patchset #7 id:140001 of https://codereview.chromium.org/2680973013/ )

Reason for revert:
Likely causing http://crbug.com/692254

BUG=chromium:692254

Original issue's description:
> [turbofan] extend escape analysis to reduce CheckMaps
>
> R=bmeurer@chromium.org
>
> BUG=
>
> Review-Url: https://codereview.chromium.org/2680973013
> Cr-Commit-Position: refs/heads/master@{#43163}
> Committed: https://chromium.googlesource.com/v8/v8/+/f01c8a6e4b24ab38e58bb141fc251bc6b75dbe21

TBR=bmeurer@chromium.org,tebbi@chromium.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG=

Review-Url: https://codereview.chromium.org/2704573003
Cr-Commit-Position: refs/heads/master@{#43282}
parent 3b15d950
......@@ -44,8 +44,6 @@ Reduction EscapeAnalysisReducer::ReduceNode(Node* node) {
case IrOpcode::kStoreField:
case IrOpcode::kStoreElement:
return ReduceStore(node);
case IrOpcode::kCheckMaps:
return ReduceCheckMaps(node);
case IrOpcode::kAllocate:
return ReduceAllocate(node);
case IrOpcode::kFinishRegion:
......@@ -168,21 +166,6 @@ Reduction EscapeAnalysisReducer::ReduceStore(Node* node) {
return NoChange();
}
Reduction EscapeAnalysisReducer::ReduceCheckMaps(Node* node) {
DCHECK(node->opcode() == IrOpcode::kCheckMaps);
if (node->id() < static_cast<NodeId>(fully_reduced_.length())) {
fully_reduced_.Add(node->id());
}
if (escape_analysis()->IsVirtual(
SkipTypeGuards(NodeProperties::GetValueInput(node, 0))) &&
!escape_analysis()->IsEscaped(node)) {
TRACE("Removed #%d (%s) from effect chain\n", node->id(),
node->op()->mnemonic());
RelaxEffectsAndControls(node);
return Changed(node);
}
return NoChange();
}
Reduction EscapeAnalysisReducer::ReduceAllocate(Node* node) {
DCHECK_EQ(node->opcode(), IrOpcode::kAllocate);
......
......@@ -36,7 +36,6 @@ class V8_EXPORT_PRIVATE EscapeAnalysisReducer final
Reduction ReduceNode(Node* node);
Reduction ReduceLoad(Node* node);
Reduction ReduceStore(Node* node);
Reduction ReduceCheckMaps(Node* node);
Reduction ReduceAllocate(Node* node);
Reduction ReduceFinishRegion(Node* node);
Reduction ReduceReferenceEqual(Node* node);
......
......@@ -694,16 +694,7 @@ void EscapeStatusAnalysis::Process(Node* node) {
RevisitInputs(rep);
RevisitUses(rep);
}
} else {
Node* from = NodeProperties::GetValueInput(node, 0);
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);
break;
}
......@@ -807,7 +798,6 @@ bool EscapeStatusAnalysis::CheckUsesForEscape(Node* uses, Node* rep,
case IrOpcode::kStateValues:
case IrOpcode::kReferenceEqual:
case IrOpcode::kFinishRegion:
case IrOpcode::kCheckMaps:
if (IsEscaped(use) && SetEscaped(rep)) {
TRACE(
"Setting #%d (%s) to escaped because of use by escaping node "
......@@ -908,7 +898,7 @@ EscapeAnalysis::EscapeAnalysis(Graph* graph, CommonOperatorBuilder* common,
EscapeAnalysis::~EscapeAnalysis() {}
bool EscapeAnalysis::Run() {
void EscapeAnalysis::Run() {
replacements_.resize(graph()->NodeCount());
status_analysis_->AssignAliases();
if (status_analysis_->AliasCount() > 0) {
......@@ -917,9 +907,6 @@ bool EscapeAnalysis::Run() {
status_analysis_->ResizeStatusVector();
RunObjectAnalysis();
status_analysis_->RunStatusAnalysis();
return true;
} else {
return false;
}
}
......@@ -1125,9 +1112,6 @@ bool EscapeAnalysis::Process(Node* node) {
case IrOpcode::kLoadElement:
ProcessLoadElement(node);
break;
case IrOpcode::kCheckMaps:
ProcessCheckMaps(node);
break;
case IrOpcode::kStart:
ProcessStart(node);
break;
......@@ -1165,10 +1149,6 @@ void EscapeAnalysis::ProcessAllocationUsers(Node* node) {
case IrOpcode::kFinishRegion:
case IrOpcode::kObjectIsSmi:
break;
case IrOpcode::kCheckMaps: {
CheckMapsParameters params = CheckMapsParametersOf(node->op());
if (params.flags() == CheckMapsFlag::kNone) break;
} // Fallthrough.
default:
VirtualState* state = virtual_states_[node->id()];
if (VirtualObject* obj =
......@@ -1522,43 +1502,6 @@ void EscapeAnalysis::ProcessLoadField(Node* node) {
}
}
void EscapeAnalysis::ProcessCheckMaps(Node* node) {
DCHECK_EQ(node->opcode(), IrOpcode::kCheckMaps);
ForwardVirtualState(node);
Node* checked = ResolveReplacement(NodeProperties::GetValueInput(node, 0));
VirtualState* state = virtual_states_[node->id()];
if (VirtualObject* object = GetVirtualObject(state, checked)) {
if (!object->IsTracked()) {
if (status_analysis_->SetEscaped(node)) {
TRACE(
"Setting #%d (%s) to escaped because checked object #%i is not "
"tracked\n",
node->id(), node->op()->mnemonic(), object->id());
}
return;
}
CheckMapsParameters params = CheckMapsParametersOf(node->op());
Node* value = object->GetField(HeapObject::kMapOffset / kPointerSize);
if (value) {
value = ResolveReplacement(value);
// TODO(tebbi): We want to extend this beyond constant folding with a
// CheckMapsValue operator that takes the load-eliminated map value as
// input.
if (value->opcode() == IrOpcode::kHeapConstant &&
params.maps().contains(ZoneHandleSet<Map>(
Handle<Map>::cast(OpParameter<Handle<HeapObject>>(value))))) {
TRACE("CheckMaps #%i seems to be redundant (until now).\n", node->id());
return;
}
}
}
if (status_analysis_->SetEscaped(node)) {
TRACE("Setting #%d (%s) to escaped (checking #%i)\n", node->id(),
node->op()->mnemonic(), checked->id());
}
}
void EscapeAnalysis::ProcessLoadElement(Node* node) {
DCHECK_EQ(node->opcode(), IrOpcode::kLoadElement);
ForwardVirtualState(node);
......
......@@ -26,7 +26,7 @@ class V8_EXPORT_PRIVATE EscapeAnalysis {
EscapeAnalysis(Graph* graph, CommonOperatorBuilder* common, Zone* zone);
~EscapeAnalysis();
bool Run();
void Run();
Node* GetReplacement(Node* node);
bool IsVirtual(Node* node);
......@@ -44,7 +44,6 @@ class V8_EXPORT_PRIVATE EscapeAnalysis {
void ProcessStoreField(Node* node);
void ProcessLoadElement(Node* node);
void ProcessStoreElement(Node* node);
void ProcessCheckMaps(Node* node);
void ProcessAllocationUsers(Node* node);
void ProcessAllocation(Node* node);
void ProcessFinishRegion(Node* node);
......
......@@ -949,7 +949,7 @@ struct EscapeAnalysisPhase {
void Run(PipelineData* data, Zone* temp_zone) {
EscapeAnalysis escape_analysis(data->graph(), data->jsgraph()->common(),
temp_zone);
if (!escape_analysis.Run()) return;
escape_analysis.Run();
JSGraphReducer graph_reducer(data->jsgraph(), temp_zone);
EscapeAnalysisReducer escape_reducer(&graph_reducer, data->jsgraph(),
&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