diff options
| author | bors <bors@rust-lang.org> | 2021-01-17 05:43:55 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-01-17 05:43:55 +0000 |
| commit | 49d7889da4b97b63f4d3e793a27b78a78326c1cd (patch) | |
| tree | 0821d36d8180b6c6c2a2a43190f588ef4fd0c9c9 /src/test/codegen | |
| parent | 95cbcad920d602cb7319e819e7ebc3cf56c20cd7 (diff) | |
| parent | 6bcaba9f51cc345435cb8fdf085fecda7eeeed61 (diff) | |
| download | rust-49d7889da4b97b63f4d3e793a27b78a78326c1cd.tar.gz rust-49d7889da4b97b63f4d3e793a27b78a78326c1cd.zip | |
Auto merge of #78818 - scottmcm:as_rchunks, r=KodrAus
Add `as_rchunks` (and friends) to slices `@est31` mentioned (https://github.com/rust-lang/rust/issues/76354#issuecomment-717027175) that, for completeness, there needed to be an `as_chunks`-like method that chunks from the end (with the remainder at the beginning) like `rchunks` does. So here's a PR for `as_rchunks: &[T] -> (&[T], &[[T; N]])` and `as_rchunks_mut: &mut [T] -> (&mut [T], &mut [[T; N]])`. But as I was doing this and copy-pasting `from_raw_parts` calls, I thought that I should extract that into an unsafe method. It started out a private helper, but it seemed like `as_chunks_unchecked` could be reasonable as a "real" method, so I added docs and made it public. Let me know if you think it doesn't pull its weight.
Diffstat (limited to 'src/test/codegen')
| -rw-r--r-- | src/test/codegen/slice-as_chunks.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/test/codegen/slice-as_chunks.rs b/src/test/codegen/slice-as_chunks.rs new file mode 100644 index 00000000000..48e3f73fc86 --- /dev/null +++ b/src/test/codegen/slice-as_chunks.rs @@ -0,0 +1,33 @@ +// no-system-llvm +// compile-flags: -O +// only-64bit (because the LLVM type of i64 for usize shows up) +// ignore-debug: the debug assertions get in the way + +#![crate_type = "lib"] +#![feature(slice_as_chunks)] + +// CHECK-LABEL: @chunks4 +#[no_mangle] +pub fn chunks4(x: &[u8]) -> &[[u8; 4]] { + // CHECK-NEXT: start: + // CHECK-NEXT: lshr i64 %x.1, 2 + // CHECK-NOT: shl + // CHECK-NOT: mul + // CHECK-NOT: udiv + // CHECK-NOT: urem + // CHECK: ret + x.as_chunks().0 +} + +// CHECK-LABEL: @chunks4_with_remainder +#[no_mangle] +pub fn chunks4_with_remainder(x: &[u8]) -> (&[[u8; 4]], &[u8]) { + // CHECK: and i64 %x.1, -4 + // CHECK: and i64 %x.1, 3 + // CHECK: lshr exact + // CHECK-NOT: mul + // CHECK-NOT: udiv + // CHECK-NOT: urem + // CHECK: ret + x.as_chunks() +} |
