From 80c9012e422263a567d217c5699c4d88623afc32 Mon Sep 17 00:00:00 2001 From: Jubilee Young Date: Mon, 1 Aug 2022 14:04:14 -0700 Subject: [PATCH] Enable function merging when opt is for size It is, of course, natural to want to merge aliasing functions when optimizing for code size, since that can eliminate several bytes. And an exhaustive match helps make the code less brittle. --- compiler/rustc_codegen_ssa/src/back/write.rs | 7 +++++-- src/test/codegen/merge-functions.rs | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/compiler/rustc_codegen_ssa/src/back/write.rs b/compiler/rustc_codegen_ssa/src/back/write.rs index ea60f6055f3d..9657e2af3e6d 100644 --- a/compiler/rustc_codegen_ssa/src/back/write.rs +++ b/compiler/rustc_codegen_ssa/src/back/write.rs @@ -255,8 +255,11 @@ impl ModuleConfig { { MergeFunctions::Disabled => false, MergeFunctions::Trampolines | MergeFunctions::Aliases => { - sess.opts.optimize == config::OptLevel::Default - || sess.opts.optimize == config::OptLevel::Aggressive + use config::OptLevel::*; + match sess.opts.optimize { + Aggressive | Default | SizeMin | Size => true, + Less | No => false, + } } }, diff --git a/src/test/codegen/merge-functions.rs b/src/test/codegen/merge-functions.rs index 5eefc0f98f1f..d6caeeee8966 100644 --- a/src/test/codegen/merge-functions.rs +++ b/src/test/codegen/merge-functions.rs @@ -1,7 +1,9 @@ -// compile-flags: -O +// revisions: O Os +//[Os] compile-flags: -Copt-level=s +//[O] compile-flags: -O #![crate_type = "lib"] -// CHECK: @func2 = {{.*}}alias{{.*}}@func1 +// CHECK: @func{{2|1}} = {{.*}}alias{{.*}}@func{{1|2}} #[no_mangle] pub fn func1(c: char) -> bool {