Skip to content

Commit 4a3b5f7

Browse files
authored
Rollup merge of rust-lang#49122 - scottmcm:z-align-attr, r=cramertj
Add a -Z flag for LLVM align attributes on arguments LLVM seems to still put the assume calls in when inlining, so this probably isn't in a place where it can be turned on by default, but it's interesting to experiment with. For example, this makes `mem::swap::<u64x8>` be 8x `vmovaps ymm` instead of 16x `vmovups xmm`, on my cpu.
2 parents 59b5887 + b498192 commit 4a3b5f7

File tree

2 files changed

+3
-1
lines changed

2 files changed

+3
-1
lines changed

src/librustc/session/config.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1208,6 +1208,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
12081208
"set the MIR optimization level (0-3, default: 1)"),
12091209
mutable_noalias: bool = (false, parse_bool, [UNTRACKED],
12101210
"emit noalias metadata for mutable references"),
1211+
arg_align_attributes: bool = (false, parse_bool, [UNTRACKED],
1212+
"emit align metadata for reference arguments"),
12111213
dump_mir: Option<String> = (None, parse_opt_string, [UNTRACKED],
12121214
"dump MIR state at various points in translation"),
12131215
dump_mir_dir: String = (String::from("mir_dump"), parse_string, [UNTRACKED],

src/librustc_trans/abi.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ impl<'a, 'tcx> FnType<'tcx> {
779779

780780
// HACK(eddyb) LLVM inserts `llvm.assume` calls when inlining functions
781781
// with align attributes, and those calls later block optimizations.
782-
if !is_return {
782+
if !is_return && !cx.tcx.sess.opts.debugging_opts.arg_align_attributes {
783783
attrs.pointee_align = None;
784784
}
785785

0 commit comments

Comments
 (0)