simd_gather mask triggers an error
Hi, this code
fn main() {
let masks = [m32::new(false); 1024];
let mask_ptr = cptrx8::splat(masks.as_ptr());
let mask = unsafe {
mask_ptr.read(m32x8::splat(true), m32x8::splat(false))
};
}
triggers this error
invalid monomorphization of
simd_gatherintrinsic: expected element type*const packed_simd::masks::m32of second argumentpacked_simd::codegen::vPtr::cptrx8<*const packed_simd::masks::m32>to be a pointer to the element typei32of the first argumentpacked_simd::codegen::v256::m32x8, found*const packed_simd::masks::m32!=*_ i32
Is it the intended behavior?
All masks trigger an error and I'm using the version 1.36.0-nightly (e938c2b9a 2019-04-23) on x86_64-pc-windows-msvc.
Thanks for the report. That should work, but as you mention it does not - I can reproduce.
When doing the mask_ptr.read we should be internally casting / transmuting m32 to i32 but we are not doing currently that, and apparently no test covers this. Nice.
Until this is fixed, a workaround would be to write cptrx8::splat(masks.as_ptr() as *const i32); and once you load the vector of i32s, then cast it to a mask vector.