Skip to content

Commit

Permalink
Don't lookup span position when the span hasn't changed
Browse files Browse the repository at this point in the history
This improves performance of FunctionDebugContext::define by ~60%

Fixes rust-lang#807
  • Loading branch information
bjorn3 committed Mar 14, 2020
1 parent 660b5c3 commit efe3d84
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion src/debuginfo/line_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,17 @@ impl<'a, 'tcx> FunctionDebugContext<'a, 'tcx> {

let line_strings = &mut self.debug_context.dwarf.line_strings;
let function_span = self.mir.span;
let mut last_span = None;
let mut last_file = None;
let mut create_row_for_span = |line_program: &mut LineProgram, span: Span| {
if let Some(last_span) = last_span {
if span == last_span {
line_program.generate_row();
return;
}
}
last_span = Some(span);

// Based on https://github.com/rust-lang/rust/blob/e369d87b015a84653343032833d65d0545fd3f26/src/librustc_codegen_ssa/mir/mod.rs#L116-L131
// In order to have a good line stepping behavior in debugger, we overwrite debug
// locations of macro expansions with that of the outermost expansion site
Expand All @@ -150,7 +159,7 @@ impl<'a, 'tcx> FunctionDebugContext<'a, 'tcx> {

// line_program_add_file is very slow.
// Optimize for the common case of the current file not being changed.
let current_file_changed = if let Some(last_file) = &mut last_file {
let current_file_changed = if let Some(last_file) = &last_file {
// If the allocations are not equal, then the files may still be equal, but that
// is not a problem, as this is just an optimization.
!Lrc::ptr_eq(last_file, &file)
Expand Down

0 comments on commit efe3d84

Please sign in to comment.