Make --trace-deopt --code-comments print the Lithium instruction that caused deoptimization.
This saves us from manually searching the disassembled code for the bailout id when looking for the reason for deoptimization. Review URL: http://codereview.chromium.org/8008013 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9414 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
901f20b052
commit
683decd4ae
@ -347,6 +347,26 @@ Deoptimizer::Deoptimizer(Isolate* isolate,
|
||||
if (type == EAGER) {
|
||||
ASSERT(from == NULL);
|
||||
optimized_code_ = function_->code();
|
||||
if (FLAG_trace_deopt && FLAG_code_comments) {
|
||||
// Print instruction associated with this bailout.
|
||||
const char* last_comment = NULL;
|
||||
int mask = RelocInfo::ModeMask(RelocInfo::COMMENT)
|
||||
| RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY);
|
||||
for (RelocIterator it(optimized_code_, mask); !it.done(); it.next()) {
|
||||
RelocInfo* info = it.rinfo();
|
||||
if (info->rmode() == RelocInfo::COMMENT) {
|
||||
last_comment = reinterpret_cast<const char*>(info->data());
|
||||
}
|
||||
if (info->rmode() == RelocInfo::RUNTIME_ENTRY) {
|
||||
unsigned id = Deoptimizer::GetDeoptimizationId(
|
||||
info->target_address(), Deoptimizer::EAGER);
|
||||
if (id == bailout_id && last_comment != NULL) {
|
||||
PrintF(" %s\n", last_comment);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (type == LAZY) {
|
||||
optimized_code_ = FindDeoptimizingCodeFromAddress(from);
|
||||
ASSERT(optimized_code_ != NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user