diff options
| author | Simonas Kazlauskas <git@kazlauskas.me> | 2018-10-27 15:29:06 +0300 |
|---|---|---|
| committer | Simonas Kazlauskas <git@kazlauskas.me> | 2019-01-24 20:13:50 +0200 |
| commit | f38d0da89389c45067d37ba15e783c024088a09a (patch) | |
| tree | 75260423c9caa95661d32a8bbdef5888f8591fa4 /src/librustc_codegen_llvm/declare.rs | |
| parent | 095b44c83b540bb4dbf74be1cae604f4bae87989 (diff) | |
| download | rust-f38d0da89389c45067d37ba15e783c024088a09a.tar.gz rust-f38d0da89389c45067d37ba15e783c024088a09a.zip | |
Implement optimize(size) and optimize(speed)
Diffstat (limited to 'src/librustc_codegen_llvm/declare.rs')
| -rw-r--r-- | src/librustc_codegen_llvm/declare.rs | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/librustc_codegen_llvm/declare.rs b/src/librustc_codegen_llvm/declare.rs index aa2a0016b3e..166c6ab9ae9 100644 --- a/src/librustc_codegen_llvm/declare.rs +++ b/src/librustc_codegen_llvm/declare.rs @@ -15,7 +15,7 @@ use llvm; use llvm::AttributePlace::Function; use rustc::ty::{self, PolyFnSig}; use rustc::ty::layout::LayoutOf; -use rustc::session::config::Sanitizer; +use rustc::session::config::{Sanitizer, OptLevel}; use rustc_data_structures::small_c_str::SmallCStr; use abi::{FnType, FnTypeExt}; use attributes; @@ -65,15 +65,24 @@ fn declare_raw_fn( } } - match cx.tcx.sess.opts.cg.opt_level.as_ref().map(String::as_ref) { - Some("s") => { + // FIXME(opt): this is kinda duplicated with similar code in attributes::from_fm_attrs… + match cx.tcx.sess.opts.optimize { + OptLevel::Size => { + llvm::Attribute::MinSize.unapply_llfn(Function, llfn); llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn); + llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn); }, - Some("z") => { + OptLevel::SizeMin => { llvm::Attribute::MinSize.apply_llfn(Function, llfn); llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn); - }, - _ => {}, + llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn); + } + OptLevel::No => { + llvm::Attribute::MinSize.unapply_llfn(Function, llfn); + llvm::Attribute::OptimizeForSize.unapply_llfn(Function, llfn); + llvm::Attribute::OptimizeNone.apply_llfn(Function, llfn); + } + _ => {} } attributes::non_lazy_bind(cx.sess(), llfn); |
