Commit 948a0dea authored by vegorov@chromium.org's avatar vegorov@chromium.org

When marking dependent code for deoptimization print the group that is being deoptimized.

Otherwise it is impossible to figure out from the --trace-deoptimization output what is going on.

R=yangguo@chromium.org

Review URL: https://codereview.chromium.org/467183002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23191 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 10678fb2
......@@ -2724,7 +2724,8 @@ void MarkCompactCollector::ClearDependentCode(DependentCode* entries) {
DCHECK(entries->is_code_at(i));
Code* code = entries->code_at(i);
if (IsMarked(code) && !code->marked_for_deoptimization()) {
code->set_marked_for_deoptimization(true);
DependentCode::SetMarkedForDeoptimization(
code, static_cast<DependentCode::DependencyGroup>(g));
code->InvalidateEmbeddedObjects();
have_code_to_deoptimize_ = true;
}
......
......@@ -11786,7 +11786,7 @@ bool DependentCode::MarkCodeForDeoptimization(
if (is_code_at(i)) {
Code* code = code_at(i);
if (!code->marked_for_deoptimization()) {
code->set_marked_for_deoptimization(true);
SetMarkedForDeoptimization(code, group);
marked = true;
}
} else {
......@@ -11837,6 +11837,51 @@ void DependentCode::AddToDependentICList(Handle<Code> stub) {
}
void DependentCode::SetMarkedForDeoptimization(Code* code,
DependencyGroup group) {
code->set_marked_for_deoptimization(true);
if (FLAG_trace_deopt &&
(code->deoptimization_data() != code->GetHeap()->empty_fixed_array())) {
DeoptimizationInputData* deopt_data =
DeoptimizationInputData::cast(code->deoptimization_data());
CodeTracer::Scope scope(code->GetHeap()->isolate()->GetCodeTracer());
PrintF(scope.file(), "[marking dependent code 0x%08" V8PRIxPTR
" (opt #%d) for deoptimization, reason: %s]\n",
reinterpret_cast<intptr_t>(code),
deopt_data->OptimizationId()->value(), DependencyGroupName(group));
}
}
const char* DependentCode::DependencyGroupName(DependencyGroup group) {
switch (group) {
case kWeakICGroup:
return "weak-ic";
case kWeakCodeGroup:
return "weak-code";
case kTransitionGroup:
return "transition";
case kPrototypeCheckGroup:
return "prototype-check";
case kElementsCantBeAddedGroup:
return "elements-cant-be-added";
case kPropertyCellChangedGroup:
return "property-cell-changed";
case kFieldTypeGroup:
return "field-type";
case kInitialMapChangedGroup:
return "initial-map-changed";
case kAllocationSiteTenuringChangedGroup:
return "allocation-site-tenuring-changed";
case kAllocationSiteTransitionChangedGroup:
return "allocation-site-transition-changed";
default:
UNREACHABLE();
return "?";
}
}
Handle<Map> Map::TransitionToPrototype(Handle<Map> map,
Handle<Object> prototype) {
Handle<Map> new_map = GetPrototypeTransition(map, prototype);
......
......@@ -6006,6 +6006,9 @@ class DependentCode: public FixedArray {
static DependentCode* ForObject(Handle<HeapObject> object,
DependencyGroup group);
static const char* DependencyGroupName(DependencyGroup group);
static void SetMarkedForDeoptimization(Code* code, DependencyGroup group);
private:
// Make a room at the end of the given group by moving out the first
// code objects of the subsequent groups.
......
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