| Index: src/x64/lithium-codegen-x64.cc
|
| diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc
|
| index 21b0fcdd3be357b20ccb853003dcc7d640bf9c73..642daedd94b12876e0aaecd219003b8842cd372d 100644
|
| --- a/src/x64/lithium-codegen-x64.cc
|
| +++ b/src/x64/lithium-codegen-x64.cc
|
| @@ -261,38 +261,21 @@ bool LCodeGen::GenerateBody() {
|
| !is_aborted() && current_instruction_ < instructions_->length();
|
| current_instruction_++) {
|
| LInstruction* instr = instructions_->at(current_instruction_);
|
| +
|
| + // Don't emit code for basic blocks with a replacement.
|
| if (instr->IsLabel()) {
|
| - LLabel* label = LLabel::cast(instr);
|
| - emit_instructions = !label->HasReplacement();
|
| + emit_instructions = !LLabel::cast(instr)->HasReplacement();
|
| }
|
| + if (!emit_instructions) continue;
|
|
|
| - if (emit_instructions) {
|
| - if (FLAG_code_comments) {
|
| - HValue* hydrogen = instr->hydrogen_value();
|
| - if (hydrogen != NULL) {
|
| - if (hydrogen->IsChange()) {
|
| - HValue* changed_value = HChange::cast(hydrogen)->value();
|
| - int use_id = 0;
|
| - const char* use_mnemo = "dead";
|
| - if (hydrogen->UseCount() >= 1) {
|
| - HValue* use_value = hydrogen->uses().value();
|
| - use_id = use_value->id();
|
| - use_mnemo = use_value->Mnemonic();
|
| - }
|
| - Comment(";;; @%d: %s. <of #%d %s for #%d %s>",
|
| - current_instruction_, instr->Mnemonic(),
|
| - changed_value->id(), changed_value->Mnemonic(),
|
| - use_id, use_mnemo);
|
| - } else {
|
| - Comment(";;; @%d: %s. <#%d>", current_instruction_,
|
| - instr->Mnemonic(), hydrogen->id());
|
| - }
|
| - } else {
|
| - Comment(";;; @%d: %s.", current_instruction_, instr->Mnemonic());
|
| - }
|
| - }
|
| - instr->CompileToNative(this);
|
| + if (FLAG_code_comments && instr->HasInterestingComment(this)) {
|
| + Comment(";;; <%d,%d> %s",
|
| + current_instruction_,
|
| + instr->hydrogen_value()->id(),
|
| + instr->Mnemonic());
|
| }
|
| +
|
| + instr->CompileToNative(this);
|
| }
|
| EnsureSpaceForLazyDeopt(Deoptimizer::patch_size());
|
| return !is_aborted();
|
| @@ -302,6 +285,9 @@ bool LCodeGen::GenerateBody() {
|
| bool LCodeGen::GenerateJumpTable() {
|
| Label needs_frame_not_call;
|
| Label needs_frame_is_call;
|
| + if (jump_table_.length() > 0) {
|
| + Comment(";;; -------------------- Jump table --------------------");
|
| + }
|
| for (int i = 0; i < jump_table_.length(); i++) {
|
| __ bind(&jump_table_[i].label);
|
| Address entry = jump_table_[i].address;
|
| @@ -368,11 +354,14 @@ bool LCodeGen::GenerateDeferredCode() {
|
| if (deferred_.length() > 0) {
|
| for (int i = 0; !is_aborted() && i < deferred_.length(); i++) {
|
| LDeferredCode* code = deferred_[i];
|
| + Comment(";;; <%d,%d> "
|
| + "-------------------- Deferred %s --------------------",
|
| + code->instruction_index(),
|
| + code->instr()->hydrogen_value()->id(),
|
| + code->instr()->Mnemonic());
|
| __ bind(code->entry());
|
| if (NeedsDeferredFrame()) {
|
| - Comment(";;; Deferred build frame @%d: %s.",
|
| - code->instruction_index(),
|
| - code->instr()->Mnemonic());
|
| + Comment(";;; Build frame");
|
| ASSERT(!frame_is_built_);
|
| ASSERT(info()->IsStub());
|
| frame_is_built_ = true;
|
| @@ -381,15 +370,11 @@ bool LCodeGen::GenerateDeferredCode() {
|
| __ push(Operand(rbp, StandardFrameConstants::kContextOffset));
|
| __ Push(Smi::FromInt(StackFrame::STUB));
|
| __ lea(rbp, Operand(rsp, 2 * kPointerSize));
|
| + Comment(";;; Deferred code");
|
| }
|
| - Comment(";;; Deferred code @%d: %s.",
|
| - code->instruction_index(),
|
| - code->instr()->Mnemonic());
|
| code->Generate();
|
| if (NeedsDeferredFrame()) {
|
| - Comment(";;; Deferred destroy frame @%d: %s.",
|
| - code->instruction_index(),
|
| - code->instr()->Mnemonic());
|
| + Comment(";;; Destroy frame");
|
| ASSERT(frame_is_built_);
|
| frame_is_built_ = false;
|
| __ movq(rsp, rbp);
|
| @@ -925,10 +910,19 @@ void LCodeGen::RecordPosition(int position) {
|
| }
|
|
|
|
|
| +static const char* LabelType(LLabel* label) {
|
| + if (label->is_loop_header()) return " (loop header)";
|
| + if (label->is_osr_entry()) return " (OSR entry)";
|
| + return "";
|
| +}
|
| +
|
| +
|
| void LCodeGen::DoLabel(LLabel* label) {
|
| - Comment(";;; -------------------- B%d%s --------------------",
|
| + Comment(";;; <%d,%d> -------------------- B%d%s --------------------",
|
| + current_instruction_,
|
| + label->hydrogen_value()->id(),
|
| label->block_id(),
|
| - label->is_loop_header() ? " (loop header)" : "");
|
| + LabelType(label));
|
| __ bind(label->label());
|
| current_block_ = label->block_id();
|
| DoGap(label);
|
| @@ -1822,7 +1816,7 @@ void LCodeGen::DoArithmeticT(LArithmeticT* instr) {
|
| }
|
|
|
|
|
| -int LCodeGen::GetNextEmittedBlock() {
|
| +int LCodeGen::GetNextEmittedBlock() const {
|
| for (int i = current_block_ + 1; i < graph()->blocks()->length(); ++i) {
|
| if (!chunk_->GetLabel(i)->HasReplacement()) return i;
|
| }
|
|
|