diff options
| author | Haidong Zhang <zhanghaidong@uniontech.com> | 2025-09-03 17:40:45 +0800 |
|---|---|---|
| committer | Haidong Zhang <zhanghaidong@uniontech.com> | 2025-09-18 15:26:14 +0800 |
| commit | 6e74905be29b861bcfd2780a8c81495deffec6c3 (patch) | |
| tree | ec9020c1007bf3bbd10ec16f4abf79f86d0dfc9b /compiler/rustc_session/src | |
| parent | 93117677d857bb7c3f12c9dc500d77839f8fb13d (diff) | |
| download | rust-6e74905be29b861bcfd2780a8c81495deffec6c3.tar.gz rust-6e74905be29b861bcfd2780a8c81495deffec6c3.zip | |
Set lto="fat" automatically when compiling with RUSTFLAGS="-Zautodiff=Enable".
Diffstat (limited to 'compiler/rustc_session/src')
| -rw-r--r-- | compiler/rustc_session/src/config.rs | 5 | ||||
| -rw-r--r-- | compiler/rustc_session/src/session.rs | 7 |
2 files changed, 12 insertions, 0 deletions
diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs index 297df7c2c97..795cb2b2cfe 100644 --- a/compiler/rustc_session/src/config.rs +++ b/compiler/rustc_session/src/config.rs @@ -1509,6 +1509,11 @@ impl Options { pub fn get_symbol_mangling_version(&self) -> SymbolManglingVersion { self.cg.symbol_mangling_version.unwrap_or(SymbolManglingVersion::Legacy) } + + #[inline] + pub fn autodiff_enabled(&self) -> bool { + self.unstable_opts.autodiff.contains(&AutoDiff::Enable) + } } impl UnstableOptions { diff --git a/compiler/rustc_session/src/session.rs b/compiler/rustc_session/src/session.rs index 3525c7c1d1a..d0dd2cdac0c 100644 --- a/compiler/rustc_session/src/session.rs +++ b/compiler/rustc_session/src/session.rs @@ -600,6 +600,13 @@ impl Session { /// Calculates the flavor of LTO to use for this compilation. pub fn lto(&self) -> config::Lto { + // Autodiff currently requires fat-lto to have access to the llvm-ir of all (indirectly) used functions and types. + // fat-lto is the easiest solution to this requirement, but quite expensive. + // FIXME(autodiff): Make autodiff also work with embed-bc instead of fat-lto. + if self.opts.autodiff_enabled() { + return config::Lto::Fat; + } + // If our target has codegen requirements ignore the command line if self.target.requires_lto { return config::Lto::Fat; |
