Index: src/compiler/code-generator.cc |
diff --git a/src/compiler/code-generator.cc b/src/compiler/code-generator.cc |
index da568d6f0aa9e6a805439a0d7b052fa545f7505b..78634768714229a002a17d4e1cabfaf5e9de4447 100644 |
--- a/src/compiler/code-generator.cc |
+++ b/src/compiler/code-generator.cc |
@@ -92,6 +92,11 @@ Handle<Code> CodeGenerator::GenerateCode() { |
// the frame (that is done in AssemblePrologue). |
FrameScope frame_scope(masm(), StackFrame::MANUAL); |
+ if (info->is_source_positions_enabled()) { |
+ SourcePosition source_position(info->shared_info()->start_position()); |
+ AssembleSourcePosition(source_position); |
+ } |
+ |
// Place function entry hook if requested to do so. |
if (linkage()->GetIncomingDescriptor()->IsJSFunctionCall()) { |
ProfileEntryHookStub::MaybeCallEntryHook(masm()); |
@@ -405,6 +410,10 @@ void CodeGenerator::GetPushCompatibleMoves(Instruction* instr, |
CodeGenerator::CodeGenResult CodeGenerator::AssembleInstruction( |
Instruction* instr, const InstructionBlock* block) { |
int first_unused_stack_slot; |
+ FlagsMode mode = FlagsModeField::decode(instr->opcode()); |
+ if (mode != kFlags_trap) { |
+ AssembleSourcePosition(instr); |
+ } |
bool adjust_stack = |
GetSlotAboveSPBeforeTailCall(instr, &first_unused_stack_slot); |
if (adjust_stack) AssembleTailCallBeforeGap(instr, first_unused_stack_slot); |
@@ -417,10 +426,6 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleInstruction( |
if (instr->IsJump() && block->must_deconstruct_frame()) { |
AssembleDeconstructFrame(); |
} |
- FlagsMode mode = FlagsModeField::decode(instr->opcode()); |
- if (mode != kFlags_trap) { |
- AssembleSourcePosition(instr); |
- } |
// Assemble architecture-specific code for the instruction. |
CodeGenResult result = AssembleArchInstruction(instr); |
if (result != kSuccess) return result; |
@@ -487,10 +492,14 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleInstruction( |
return kSuccess; |
} |
- |
void CodeGenerator::AssembleSourcePosition(Instruction* instr) { |
SourcePosition source_position = SourcePosition::Unknown(); |
+ if (instr->IsNop() && instr->AreMovesRedundant()) return; |
if (!code()->GetSourcePosition(instr, &source_position)) return; |
+ AssembleSourcePosition(source_position); |
+} |
+ |
+void CodeGenerator::AssembleSourcePosition(SourcePosition source_position) { |
if (source_position == current_source_position_) return; |
current_source_position_ = source_position; |
if (!source_position.IsKnown()) return; |
@@ -500,7 +509,13 @@ void CodeGenerator::AssembleSourcePosition(Instruction* instr) { |
CompilationInfo* info = this->info(); |
if (!info->parse_info()) return; |
std::ostringstream buffer; |
- buffer << "-- " << source_position.InliningStack(info) << " --"; |
+ buffer << "-- "; |
+ if (FLAG_trace_turbo) { |
+ buffer << source_position; |
+ } else { |
+ buffer << source_position.InliningStack(info); |
+ } |
+ buffer << " --"; |
masm()->RecordComment(StrDup(buffer.str().c_str())); |
} |
} |