diff options
| author | bors <bors@rust-lang.org> | 2022-08-28 01:34:47 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-08-28 01:34:47 +0000 |
| commit | 1e978a3627bd65064164af3548c585fb25eef9d2 (patch) | |
| tree | d36b93e40e37cd26a0f15a200435c511ed21c0bd /compiler/rustc_codegen_llvm/src/intrinsic.rs | |
| parent | eaadb8947b850a025404082f6297766c4680a42a (diff) | |
| parent | ca753124088c0d57ca6728ee093363cbc1db5274 (diff) | |
| download | rust-1e978a3627bd65064164af3548c585fb25eef9d2.tar.gz rust-1e978a3627bd65064164af3548c585fb25eef9d2.zip | |
Auto merge of #96946 - WaffleLapkin:ptr_mask, r=scottmcm
Add pointer masking convenience functions
This PR adds the following public API:
```rust
impl<T: ?Sized> *const T {
fn mask(self, mask: usize) -> *const T;
}
impl<T: ?Sized> *mut T {
fn mask(self, mask: usize) -> *const T;
}
// mod intrinsics
fn mask<T>(ptr: *const T, mask: usize) -> *const T
```
This is equivalent to `ptr.map_addr(|a| a & mask)` but also uses a cool llvm intrinsic.
Proposed in https://github.com/rust-lang/rust/pull/95643#issuecomment-1121562352
cc `@Gankra` `@scottmcm` `@RalfJung`
r? rust-lang/libs-api
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/intrinsic.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/intrinsic.rs | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/compiler/rustc_codegen_llvm/src/intrinsic.rs b/compiler/rustc_codegen_llvm/src/intrinsic.rs index f4227fbd8fa..3d789904707 100644 --- a/compiler/rustc_codegen_llvm/src/intrinsic.rs +++ b/compiler/rustc_codegen_llvm/src/intrinsic.rs @@ -71,6 +71,7 @@ fn get_simple_intrinsic<'ll>( sym::nearbyintf64 => "llvm.nearbyint.f64", sym::roundf32 => "llvm.round.f32", sym::roundf64 => "llvm.round.f64", + sym::ptr_mask => "llvm.ptrmask", _ => return None, }; Some(cx.get_intrinsic(llvm_name)) |
