@@ -352,7 +352,7 @@ top_level_options!(
352
352
actually_rustdoc: bool [ TRACKED ] ,
353
353
354
354
// Number of object files/codegen units to produce on the backend
355
- codegen_units : usize [ UNTRACKED ] ,
355
+ cli_forced_codegen_units : Option < usize > [ UNTRACKED ] ,
356
356
}
357
357
) ;
358
358
@@ -505,7 +505,7 @@ pub fn basic_options() -> Options {
505
505
unstable_features : UnstableFeatures :: Disallow ,
506
506
debug_assertions : true ,
507
507
actually_rustdoc : false ,
508
- codegen_units : 1 ,
508
+ cli_forced_codegen_units : None ,
509
509
}
510
510
}
511
511
@@ -1711,48 +1711,6 @@ pub fn build_session_options_and_crate_config(matches: &getopts::Matches)
1711
1711
1712
1712
let incremental = debugging_opts. incremental . as_ref ( ) . map ( |m| PathBuf :: from ( m) ) ;
1713
1713
1714
- let codegen_units = codegen_units. unwrap_or_else ( || {
1715
- match opt_level {
1716
- // If we're compiling at `-O0` then default to 16 codegen units.
1717
- // The number here shouldn't matter too too much as debug mode
1718
- // builds don't rely on performance at all, meaning that lost
1719
- // opportunities for inlining through multiple codegen units is
1720
- // a non-issue.
1721
- //
1722
- // Note that the high number here doesn't mean that we'll be
1723
- // spawning a large number of threads in parallel. The backend
1724
- // of rustc contains global rate limiting through the
1725
- // `jobserver` crate so we'll never overload the system with too
1726
- // much work, but rather we'll only be optimizing when we're
1727
- // otherwise cooperating with other instances of rustc.
1728
- //
1729
- // Rather the high number here means that we should be able to
1730
- // keep a lot of idle cpus busy. By ensuring that no codegen
1731
- // unit takes *too* long to build we'll be guaranteed that all
1732
- // cpus will finish pretty closely to one another and we should
1733
- // make relatively optimal use of system resources
1734
- //
1735
- // Another note worth mentioning here, however, is that this number
1736
- // isn't *too* high. When codegen units are increased that means we
1737
- // currently have to codegen `#[inline]` functions into each codegen
1738
- // unit, which means the more codegen units we're using the more we
1739
- // may be generating. In other words, increasing codegen units may
1740
- // increase the overall work the compiler does. If we don't have
1741
- // enough cores to make up for this loss then increasing the number
1742
- // of codegen units could become an overall loss!
1743
- //
1744
- // As a result we choose a hopefully conservative value 16, which
1745
- // should be more than the number of cpus of most hardware compiling
1746
- // Rust but also not too much for 2-4 core machines to have too much
1747
- // loss of compile time.
1748
- OptLevel :: No => 16 ,
1749
-
1750
- // All other optimization levels default use one codegen unit,
1751
- // the historical default in Rust for a Long Time.
1752
- _ => 1 ,
1753
- }
1754
- } ) ;
1755
-
1756
1714
( Options {
1757
1715
crate_types,
1758
1716
optimize : opt_level,
@@ -1777,7 +1735,7 @@ pub fn build_session_options_and_crate_config(matches: &getopts::Matches)
1777
1735
unstable_features : UnstableFeatures :: from_environment ( ) ,
1778
1736
debug_assertions,
1779
1737
actually_rustdoc : false ,
1780
- codegen_units,
1738
+ cli_forced_codegen_units : codegen_units,
1781
1739
} ,
1782
1740
cfg)
1783
1741
}
0 commit comments