Rollup merge of #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.
This commit is contained in:
commit
c892e68387
@ -1208,6 +1208,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
|
||||
"set the MIR optimization level (0-3, default: 1)"),
|
||||
mutable_noalias: bool = (false, parse_bool, [UNTRACKED],
|
||||
"emit noalias metadata for mutable references"),
|
||||
arg_align_attributes: bool = (false, parse_bool, [UNTRACKED],
|
||||
"emit align metadata for reference arguments"),
|
||||
dump_mir: Option<String> = (None, parse_opt_string, [UNTRACKED],
|
||||
"dump MIR state at various points in translation"),
|
||||
dump_mir_dir: String = (String::from("mir_dump"), parse_string, [UNTRACKED],
|
||||
|
@ -779,7 +779,7 @@ impl<'a, 'tcx> FnType<'tcx> {
|
||||
|
||||
// HACK(eddyb) LLVM inserts `llvm.assume` calls when inlining functions
|
||||
// with align attributes, and those calls later block optimizations.
|
||||
if !is_return {
|
||||
if !is_return && !cx.tcx.sess.opts.debugging_opts.arg_align_attributes {
|
||||
attrs.pointee_align = None;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user