diff options
Diffstat (limited to 'tests/assembly-llvm/libs/issue-115339-zip-arrays.rs')
| -rw-r--r-- | tests/assembly-llvm/libs/issue-115339-zip-arrays.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/assembly-llvm/libs/issue-115339-zip-arrays.rs b/tests/assembly-llvm/libs/issue-115339-zip-arrays.rs new file mode 100644 index 00000000000..098382502e8 --- /dev/null +++ b/tests/assembly-llvm/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 -Copt-level=3 +//@ 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 +} |
