| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 183c6324450a7eb5ead471aabe538d8d77a76fce..1345f2770d38ecdbafc2ab9910a82be4353ef52b 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -7070,124 +7070,93 @@ void DeoptimizationInputData::DeoptimizationInputDataPrint(FILE* out) {
|
|
|
| PrintF(out, "%6s %6s %6s %12s\n", "index", "ast id", "argc", "commands");
|
| for (int i = 0; i < deopt_count; i++) {
|
| - int command_count = 0;
|
| PrintF(out, "%6d %6d %6d",
|
| i, AstId(i)->value(), ArgumentsStackHeight(i)->value());
|
| +
|
| + if (!FLAG_print_code_verbose) continue;
|
| + // Print details of the frame translation.
|
| int translation_index = TranslationIndex(i)->value();
|
| TranslationIterator iterator(TranslationByteArray(), translation_index);
|
| Translation::Opcode opcode =
|
| static_cast<Translation::Opcode>(iterator.Next());
|
| ASSERT(Translation::BEGIN == opcode);
|
| int frame_count = iterator.Next();
|
| - if (FLAG_print_code_verbose) {
|
| - PrintF(out, " %s {count=%d}\n", Translation::StringFor(opcode),
|
| - frame_count);
|
| - }
|
| + PrintF(out, " %s {count=%d}\n", Translation::StringFor(opcode),
|
| + frame_count);
|
|
|
| - for (int i = 0; i < frame_count; ++i) {
|
| - opcode = static_cast<Translation::Opcode>(iterator.Next());
|
| - ASSERT(Translation::FRAME == opcode);
|
| - int ast_id = iterator.Next();
|
| - int function_id = iterator.Next();
|
| - JSFunction* function =
|
| - JSFunction::cast(LiteralArray()->get(function_id));
|
| - unsigned height = iterator.Next();
|
| - if (FLAG_print_code_verbose) {
|
| - PrintF(out, "%24s %s {ast_id=%d, function=",
|
| - "", Translation::StringFor(opcode), ast_id);
|
| - function->PrintName(out);
|
| - PrintF(out, ", height=%u}\n", height);
|
| - }
|
| -
|
| - // Size of translation is height plus all incoming arguments including
|
| - // receiver.
|
| - int size = height + function->shared()->formal_parameter_count() + 1;
|
| - command_count += size;
|
| - for (int j = 0; j < size; ++j) {
|
| - opcode = static_cast<Translation::Opcode>(iterator.Next());
|
| - if (FLAG_print_code_verbose) {
|
| - PrintF(out, "%24s %s ", "", Translation::StringFor(opcode));
|
| - }
|
| + while (iterator.HasNext() &&
|
| + Translation::BEGIN !=
|
| + (opcode = static_cast<Translation::Opcode>(iterator.Next()))) {
|
| + PrintF(out, "%24s %s ", "", Translation::StringFor(opcode));
|
|
|
| - if (opcode == Translation::DUPLICATE) {
|
| - opcode = static_cast<Translation::Opcode>(iterator.Next());
|
| - if (FLAG_print_code_verbose) {
|
| - PrintF(out, "%s ", Translation::StringFor(opcode));
|
| - }
|
| - --j; // Two commands share the same frame index.
|
| + switch (opcode) {
|
| + case Translation::BEGIN:
|
| + UNREACHABLE();
|
| + break;
|
| +
|
| + case Translation::FRAME: {
|
| + int ast_id = iterator.Next();
|
| + int function_id = iterator.Next();
|
| + JSFunction* function =
|
| + JSFunction::cast(LiteralArray()->get(function_id));
|
| + unsigned height = iterator.Next();
|
| + PrintF(out, "{ast_id=%d, \nfunction=", ast_id);
|
| + function->PrintName(out);
|
| + PrintF(out, ", height=%u}", height);
|
| + break;
|
| }
|
|
|
| - switch (opcode) {
|
| - case Translation::BEGIN:
|
| - case Translation::FRAME:
|
| - case Translation::DUPLICATE:
|
| - UNREACHABLE();
|
| - break;
|
| -
|
| - case Translation::REGISTER: {
|
| - int reg_code = iterator.Next();
|
| - if (FLAG_print_code_verbose) {
|
| - PrintF(out, "{input=%s}", converter.NameOfCPURegister(reg_code));
|
| - }
|
| - break;
|
| - }
|
| + case Translation::DUPLICATE:
|
| + break;
|
|
|
| - case Translation::INT32_REGISTER: {
|
| - int reg_code = iterator.Next();
|
| - if (FLAG_print_code_verbose) {
|
| - PrintF(out, "{input=%s}", converter.NameOfCPURegister(reg_code));
|
| - }
|
| - break;
|
| - }
|
| + case Translation::REGISTER: {
|
| + int reg_code = iterator.Next();
|
| + PrintF(out, "{input=%s}", converter.NameOfCPURegister(reg_code));
|
| + break;
|
| + }
|
|
|
| - case Translation::DOUBLE_REGISTER: {
|
| - int reg_code = iterator.Next();
|
| - if (FLAG_print_code_verbose) {
|
| - PrintF(out, "{input=%s}",
|
| - DoubleRegister::AllocationIndexToString(reg_code));
|
| - }
|
| - break;
|
| - }
|
| + case Translation::INT32_REGISTER: {
|
| + int reg_code = iterator.Next();
|
| + PrintF(out, "{input=%s}", converter.NameOfCPURegister(reg_code));
|
| + break;
|
| + }
|
|
|
| - case Translation::STACK_SLOT: {
|
| - int input_slot_index = iterator.Next();
|
| - if (FLAG_print_code_verbose) {
|
| - PrintF(out, "{input=%d}", input_slot_index);
|
| - }
|
| - break;
|
| - }
|
| + case Translation::DOUBLE_REGISTER: {
|
| + int reg_code = iterator.Next();
|
| + PrintF(out, "{input=%s}",
|
| + DoubleRegister::AllocationIndexToString(reg_code));
|
| + break;
|
| + }
|
|
|
| - case Translation::INT32_STACK_SLOT: {
|
| - int input_slot_index = iterator.Next();
|
| - if (FLAG_print_code_verbose) {
|
| - PrintF(out, "{input=%d}", input_slot_index);
|
| - }
|
| - break;
|
| - }
|
| + case Translation::STACK_SLOT: {
|
| + int input_slot_index = iterator.Next();
|
| + PrintF(out, "{input=%d}", input_slot_index);
|
| + break;
|
| + }
|
|
|
| - case Translation::DOUBLE_STACK_SLOT: {
|
| - int input_slot_index = iterator.Next();
|
| - if (FLAG_print_code_verbose) {
|
| - PrintF(out, "{input=%d}", input_slot_index);
|
| - }
|
| - break;
|
| - }
|
| + case Translation::INT32_STACK_SLOT: {
|
| + int input_slot_index = iterator.Next();
|
| + PrintF(out, "{input=%d}", input_slot_index);
|
| + break;
|
| + }
|
|
|
| - case Translation::LITERAL: {
|
| - unsigned literal_index = iterator.Next();
|
| - if (FLAG_print_code_verbose) {
|
| - PrintF(out, "{literal_id=%u}", literal_index);
|
| - }
|
| - break;
|
| - }
|
| + case Translation::DOUBLE_STACK_SLOT: {
|
| + int input_slot_index = iterator.Next();
|
| + PrintF(out, "{input=%d}", input_slot_index);
|
| + break;
|
| + }
|
|
|
| - case Translation::ARGUMENTS_OBJECT:
|
| - break;
|
| + case Translation::LITERAL: {
|
| + unsigned literal_index = iterator.Next();
|
| + PrintF(out, "{literal_id=%u}", literal_index);
|
| + break;
|
| }
|
| - if (FLAG_print_code_verbose) PrintF(out, "\n");
|
| +
|
| + case Translation::ARGUMENTS_OBJECT:
|
| + break;
|
| }
|
| + PrintF(out, "\n");
|
| }
|
| - if (!FLAG_print_code_verbose) PrintF(out, " %12d\n", command_count);
|
| }
|
| }
|
|
|
|
|