diff options
| author | James Miller <bladeon@gmail.com> | 2013-05-26 17:40:07 +1200 |
|---|---|---|
| committer | James Miller <bladeon@gmail.com> | 2013-05-26 17:40:07 +1200 |
| commit | 2c2346e3d4f999b95a56444d978c3ea792828263 (patch) | |
| tree | 41553e521c5434998a19e8d39ef6d12589483e59 | |
| parent | e2f8b51dc599cf1fb7f3f72252bef5e5b717f6bd (diff) | |
| download | rust-2c2346e3d4f999b95a56444d978c3ea792828263.tar.gz rust-2c2346e3d4f999b95a56444d978c3ea792828263.zip | |
Mark &mut parameters as noalias
| -rw-r--r-- | src/librustc/middle/trans/base.rs | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index f92acbaf5c6..f14ea279c2d 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -1694,7 +1694,20 @@ pub fn create_llargs_for_fn_args(cx: fn_ctxt, vec::from_fn(args.len(), |i| { unsafe { let arg_n = first_real_arg + i; - llvm::LLVMGetParam(cx.llfn, arg_n as c_uint) + let arg = &args[i]; + let llarg = llvm::LLVMGetParam(cx.llfn, arg_n as c_uint); + + // Mark `&mut T` as no-alias, as the borrowck pass ensures it's true + match arg.ty.node { + ast::ty_rptr(_, mt) => { + if mt.mutbl == ast::m_mutbl { + llvm::LLVMAddAttribute(llarg, lib::llvm::NoAliasAttribute as c_uint); + } + } + _ => {} + } + + llarg } }) } |
