Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, calling
{Criterion,BenchmarkGroup}::bench_functioncreates a copy ofBenchmarkGroup::run_bench, which includes all theRoutinetrait methods, for every unique bench closure. This is unnecessary and doesn't make a difference for benchmark performance as the closure in question is the one taking&mut Bencher, which is not the actual routine that is timed.This PR roughly halves the number of LLVM lines generated by the Rust compiler, tested with
recmo/uint's benchmarking suite usingcargo llvm-lines -p ruint --bench bench_uint. This suite has around 214 unique calls tocriterion.bench_function. This speeds up compilation of a release build of the benchmark from ~15s to ~12s on my machine, likely a lot more in more resource-constrained environments like in CI, or when using less codegen-units.Before:
After: