From cd8ec6c787e147667e3bf43145873dd8e27755d0 Mon Sep 17 00:00:00 2001 From: Mara Bos Date: Thu, 12 Jan 2023 20:14:31 +0100 Subject: [PATCH] Add note on optimization in format args ast lowering. --- compiler/rustc_ast_lowering/src/format.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/compiler/rustc_ast_lowering/src/format.rs b/compiler/rustc_ast_lowering/src/format.rs index d5da1a666f90..8985f8ad85da 100644 --- a/compiler/rustc_ast_lowering/src/format.rs +++ b/compiler/rustc_ast_lowering/src/format.rs @@ -223,6 +223,9 @@ fn expand_format_args<'hir>( // in order, we can use a simple array instead of a `match` construction. // However, if there's a yield point in any argument except the first one, // we don't do this, because an ArgumentV1 cannot be kept across yield points. + // + // This is an optimization, speeding up compilation about 1-2% in some cases. + // See https://perf.rust-lang.org/compare.html?start=5dbee4d3a6728eb4530fb66c9775834438ecec74&end=e36affffe97378a0027b4bcfbb18d27356164ed0&stat=instructions:u let use_simple_array = argmap.len() == arguments.len() && argmap.iter().enumerate().all(|(i, &(j, _))| i == j) && arguments.iter().skip(1).all(|arg| !may_contain_yield_point(&arg.expr));