diff options
| author | bors <bors@rust-lang.org> | 2022-10-10 06:18:58 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-10-10 06:18:58 +0000 |
| commit | 8dfb40722da197e77a33a19eb9d3fd6512831341 (patch) | |
| tree | 0b1f5c3ab12887e2a7b42986175b2b5ed068646c /src/bootstrap/config.rs | |
| parent | e495b37c9a301d776a7bd0c72d5c4a202e159032 (diff) | |
| parent | cc475f5ef2988e9db2e3ce07bd4abd4d4975f3e7 (diff) | |
| download | rust-8dfb40722da197e77a33a19eb9d3fd6512831341.tar.gz rust-8dfb40722da197e77a33a19eb9d3fd6512831341.zip | |
Auto merge of #94381 - Kobzol:llvm-bolt, r=Mark-Simulacrum
Use BOLT in CI to optimize LLVM This PR adds an optimization step in the Linux `dist` CI pipeline that uses [BOLT](https://github.com/llvm/llvm-project/tree/main/bolt) to optimize the `libLLVM.so` library built by boostrap. Steps: - [x] Use LLVM 15 as a bootstrap compiler and use it to build BOLT - [x] Compile LLVM with support for relocations (`-DCMAKE_SHARED_LINKER_FLAGS="-Wl,-q"`) - [x] Gather profile data using instrumented LLVM - [x] Apply profile to LLVM that has already been PGOfied - [x] Run with BOLT profiling on more benchmarks - [x] Decide on the order of optimization (PGO -> BOLT?) - [x] Decide how we should get `bolt` (currently we use the host `bolt`) - [x] Clean up The latest perf results can be found [here](https://github.com/rust-lang/rust/pull/94381#issuecomment-1258269440). The current CI build time with BOLT applied is around 1h 55 minutes.
Diffstat (limited to 'src/bootstrap/config.rs')
| -rw-r--r-- | src/bootstrap/config.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index da2d1c1301d..635823b958b 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -161,6 +161,8 @@ pub struct Config { pub llvm_profile_use: Option<String>, pub llvm_profile_generate: bool, pub llvm_libunwind_default: Option<LlvmLibunwind>, + pub llvm_bolt_profile_generate: bool, + pub llvm_bolt_profile_use: Option<String>, pub build: TargetSelection, pub hosts: Vec<TargetSelection>, @@ -806,6 +808,15 @@ impl Config { } config.llvm_profile_use = flags.llvm_profile_use; config.llvm_profile_generate = flags.llvm_profile_generate; + config.llvm_bolt_profile_generate = flags.llvm_bolt_profile_generate; + config.llvm_bolt_profile_use = flags.llvm_bolt_profile_use; + + if config.llvm_bolt_profile_generate && config.llvm_bolt_profile_use.is_some() { + eprintln!( + "Cannot use both `llvm_bolt_profile_generate` and `llvm_bolt_profile_use` at the same time" + ); + crate::detail_exit(1); + } // Infer the rest of the configuration. |
