diff options
| author | The 8472 <git@infinite-source.de> | 2023-09-02 13:37:00 +0200 |
|---|---|---|
| committer | The 8472 <git@infinite-source.de> | 2023-10-06 18:33:25 +0200 |
| commit | b018ad3d41de500c52156fb8a84d2197d966f370 (patch) | |
| tree | 8ec9db8877cd7317f5cc6a2fbef85124e8c2588a /tests | |
| parent | 6683f13fa1ba91ab84dd5bc5bc21965a1b0530e1 (diff) | |
| download | rust-b018ad3d41de500c52156fb8a84d2197d966f370.tar.gz rust-b018ad3d41de500c52156fb8a84d2197d966f370.zip | |
optimize zipping over array iterators
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/assembly/libs/issue-115339-zip-arrays.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/assembly/libs/issue-115339-zip-arrays.rs b/tests/assembly/libs/issue-115339-zip-arrays.rs new file mode 100644 index 00000000000..26b7b9770bc --- /dev/null +++ b/tests/assembly/libs/issue-115339-zip-arrays.rs @@ -0,0 +1,25 @@ +// assembly-output: emit-asm +// # zen3 previously exhibited odd vectorization +// compile-flags: --crate-type=lib -Ctarget-cpu=znver3 -O +// only-x86_64 +// ignore-sgx + +use std::iter; + +// previously this produced a long chain of +// 56: vpextrb $6, %xmm0, %ecx +// 57: orb %cl, 22(%rsi) +// 58: vpextrb $7, %xmm0, %ecx +// 59: orb %cl, 23(%rsi) +// [...] + +// CHECK-LABEL: zip_arrays: +#[no_mangle] +pub fn zip_arrays(mut a: [u8; 32], b: [u8; 32]) -> [u8; 32] { + // CHECK-NOT: vpextrb + // CHECK-NOT: orb %cl + // CHECK: vorps + iter::zip(&mut a, b).for_each(|(a, b)| *a |= b); + // CHECK: retq + a +} |
