Skip to content

Commit 246f66a

Browse files
committed
Auto merge of rust-lang#99062 - Kobzol:lld-icf, r=jyn514
Use ICF (identical code folding) for building rustc It seems that ICF (identical code folding) is able to remove duplicated functions created by monomorphization from binaries, resulting in smaller binary size and better i-cache utilization. Let's see if it helps for `rustc`. I'm not sure if `lld` is even used for linking `rustc` on the Linux `dist` builder, let's see.
2 parents 263edd4 + 97f6f95 commit 246f66a

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

src/bootstrap/compile.rs

+6
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,12 @@ impl Step for Rustc {
651651
panic!("Cannot use and generate PGO profiles at the same time");
652652
}
653653

654+
// With LLD, we can use ICF (identical code folding) to reduce the executable size
655+
// of librustc_driver/rustc and to improve i-cache utilization.
656+
if builder.config.use_lld {
657+
cargo.rustflag("-Clink-args=-Wl,--icf=all");
658+
}
659+
654660
let is_collecting = if let Some(path) = &builder.config.rust_profile_generate {
655661
if compiler.stage == 1 {
656662
cargo.rustflag(&format!("-Cprofile-generate={}", path));

src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile

+2-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@ ENV RUST_CONFIGURE_ARGS \
122122
--set target.x86_64-unknown-linux-gnu.ranlib=/rustroot/bin/llvm-ranlib \
123123
--set llvm.thin-lto=true \
124124
--set llvm.ninja=false \
125-
--set rust.jemalloc
125+
--set rust.jemalloc \
126+
--set rust.use-lld=true
126127
ENV SCRIPT ../src/ci/pgo.sh python3 ../x.py dist \
127128
--host $HOSTS --target $HOSTS \
128129
--include-default-paths \

src/ci/pgo.sh

+4
Original file line numberDiff line numberDiff line change
@@ -195,3 +195,7 @@ rm -r $BUILD_ARTIFACTS/llvm $BUILD_ARTIFACTS/lld
195195
$@ \
196196
--rust-profile-use=${RUSTC_PROFILE_MERGED_FILE} \
197197
--llvm-profile-use=${LLVM_PROFILE_MERGED_FILE}
198+
199+
echo "Rustc binary size"
200+
ls -la ./build/$PGO_HOST/stage2/bin
201+
ls -la ./build/$PGO_HOST/stage2/lib

0 commit comments

Comments
 (0)