//@ 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 }